import json from fastapi import APIRouter, Depends, HTTPException, UploadFile, File from sqlalchemy.orm import Session from ModelStore.App.Crud import ScoreCardCrud, DataTableCrud from Utils.AccessControl.AccessUtil import rbac from Utils.DataBase.ModelStore.MongoHelperUtils import get_mongodb, MongoHelper from Utils.DataBase.ModelStore.SqlAlchemyUtils import get_db router = APIRouter( tags=["打分卡数据表"], prefix="/api/model_store/scorecard/data_table", dependencies=[Depends(rbac)] ) @router.post("/create", summary="新建数据表") async def func(_id: str, file: UploadFile = File(...), db: Session = Depends(get_db), mongodb: MongoHelper = Depends(get_mongodb)): item = ScoreCardCrud.get_scorecard_by_id(db=db, _id=_id) if not item: raise HTTPException(status_code=404, detail="ScoreCard Not Found") if item.data_table: raise HTTPException(status_code=202, detail="DataTable Already Existed") _file = await file.read() content = json.loads(_file.decode('utf-8')) DataTableCrud.create_data_table(db=db, mongodb=mongodb, _id=_id, content={"data": content}) return {"info": "Success"} @router.post("/delete", summary="删除数据表") def func(_id: str, db: Session = Depends(get_db), mongodb: MongoHelper = Depends(get_mongodb)): item = ScoreCardCrud.get_scorecard_by_id(db=db, _id=_id) if not item: raise HTTPException(status_code=404, detail="ScoreCard Not Found") if not item.data_table: raise HTTPException(status_code=202, detail="DataTable Not Found") DataTableCrud.delete_data_table(db=db, mongodb=mongodb, _id=_id) return {"info": "Success"} @router.post("/view", summary="查看数据表") def func(_id: str, db: Session = Depends(get_db), mongodb: MongoHelper = Depends(get_mongodb)): item = ScoreCardCrud.get_scorecard_by_id(db=db, _id=_id) if not item: raise HTTPException(status_code=404, detail="ScoreCard Not Found") if not item.data_table: raise HTTPException(status_code=202, detail="DataTable Not Found") table_data = ScoreCardCrud.get_sub_table_data(mongodb=mongodb, tablename="数据表", obj_id=item.data_table.obj_id) return table_data