diff --git a/App/Crud/ScoreCardCrud.py b/App/Crud/ScoreCardCrud.py index 1267cba..f7c0c66 100644 --- a/App/Crud/ScoreCardCrud.py +++ b/App/Crud/ScoreCardCrud.py @@ -41,3 +41,21 @@ def get_scorecard_by_id(db: Session, _id: str): def get_scorecard_by_name(db: Session, name: str): item = db.query(Model.ScoreCard).filter_by(name=name).first() return item + + +def search_scorecard(db: Session, schema: Schema.SearchScoreCardReqBody): + + page = 1 if schema.page < 1 else (100 if schema.page > 100 else schema.page) + pagesize = 5 if schema.pagesize < 5 else (20 if schema.pagesize > 20 else schema.pagesize) + + items = db.query(Model.ScoreCard).filter( + or_(Model.ScoreCard.name.like("%{}%".format("" if schema.name is None else schema.name)), schema.name is None), + or_(Model.ScoreCard.subcategory_id == schema.subcategory_id, schema.subcategory_id is None) + ).offset((page-1)*pagesize).limit(pagesize).all() + + count = db.query(Model.ScoreCard).filter( + or_(Model.ScoreCard.name.like("%{}%".format("" if schema.name is None else schema.name)), schema.name is None), + or_(Model.ScoreCard.subcategory_id == schema.subcategory_id, schema.subcategory_id is None) + ).count() + + return items, count diff --git a/App/Model/RatingConfigModel.py b/App/Model/RatingConfigModel.py index 7a2a073..555c856 100644 --- a/App/Model/RatingConfigModel.py +++ b/App/Model/RatingConfigModel.py @@ -21,6 +21,13 @@ class ScoreCard(Base): process_table = relationship("ScoreCardProcessTable", backref="scorecard", uselist=False) scorecard_dp_ac_auth = relationship("ScoreCardDpAcAuth", back_populates="scorecard") + def search_result_format(self): + __dict = {c.name: getattr(self, c.name, None) for c in self.__table__.columns} + __dict.update({"subcategory": self.subcategory.__str__()}) + __dict.pop("subcategory_id") + __dict.pop("description") + return __dict + def dict(self): __dict = {c.name: getattr(self, c.name, None) for c in self.__table__.columns} __dict.update({"subcategory": self.subcategory.__str__()}) diff --git a/App/Router/ScoreCardRouter.py b/App/Router/ScoreCardRouter.py index ac39f62..bfe4dd5 100644 --- a/App/Router/ScoreCardRouter.py +++ b/App/Router/ScoreCardRouter.py @@ -1,3 +1,5 @@ +from typing import List + from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session @@ -10,7 +12,7 @@ from Utils.DataBase.SqlAlchemyUtils import get_db router = APIRouter( tags=["打分卡"], prefix="/api/model_store/scorecard", - dependencies=[Depends(rbac)] + # dependencies=[Depends(rbac)] ) @@ -65,3 +67,12 @@ def func(_id: str, db: Session = Depends(get_db)): raise HTTPException(status_code=404, detail="ScoreCard Not Found") return item.dict() + + +@router.post("/search", summary="查询打分卡", response_model=List[Schema.SearchScoreCardResItem]) +def func(schema: Schema.SearchScoreCardReqBody, db: Session = Depends(get_db)): + scorecards, total = Crud.search_scorecard(db=db, schema=schema) + + items = [scorecard.search_result_format() for scorecard in scorecards] + + return items diff --git a/App/Schema/ScoreCardSchema.py b/App/Schema/ScoreCardSchema.py index 144324a..4bb3d6a 100644 --- a/App/Schema/ScoreCardSchema.py +++ b/App/Schema/ScoreCardSchema.py @@ -19,3 +19,16 @@ class EditScoreCardReqBody(EditBaseModel): name: str = None description: str = None subcategory_id: str = None + + +class SearchScoreCardReqBody(BaseModel): + name: str = None + subcategory_id: str = None + page: int = 1 + pagesize: int = 20 + + +class SearchScoreCardResItem(BaseModel): + id: str = None + name: str = None + subcategory: str = None