from fastapi import APIRouter,Depends,HTTPException from sqlalchemy.orm import Session from sqlalchemy_fastapi_demo.database import get_db from sqlalchemy_fastapi_demo.scheme.advisors import AdvisorIn, AdvisorOut from sqlalchemy_fastapi_demo.dao.advisor import service,crud router = APIRouter() @router.get("/read",response_model=AdvisorOut) def read_advisor(advisor_id:int|None=None,advisor_name:str|None=None,db:Session=Depends(get_db)): r_advisor=crud.search_advisor(db=db,advisor_id=advisor_id,advisor_name=advisor_name) if r_advisor is not None: return r_advisor raise HTTPException(status_code=404,detail="顾问老师不存在") @router.get("/list",response_model=list[AdvisorOut]) def list_advisor(advisor_name:str|None=None,db:Session=Depends(get_db)): return crud.list_advisors(db=db,advisor_name=advisor_name) # r_advisor=crud.list_advisors(db=db,advisor_name=advisor_name,phone=phone) # if r_advisor: # return r_advisor # raise HTTPException(status_code=404,detail="顾问老师不存在") @router.post("/create",response_model=AdvisorOut) def create_advisor(advisor_in:AdvisorIn,db:Session=Depends(get_db)): c_advisor,error=service.create_advisor(db=db,advisor_id=advisor_in.advisor_id,advisor_name=advisor_in.advisor_name) if error == "DUPLICATE": raise HTTPException(status_code=409, detail="该顾问ID已被占用") if error is not None: # 兜底:Service 新增了返回码但这里没接住,不要静默当成成功 raise HTTPException(status_code=500, detail="未处理的业务结果: " + error) return c_advisor @router.put("/update",response_model=AdvisorOut) def update_advisor(advisor_in:AdvisorIn,db:Session=Depends(get_db)): u_advisor,error=service.update_advisor(db=db,advisor_id=advisor_in.advisor_id,advisor_in=advisor_in) if error == "NOT_FOUND": raise HTTPException(status_code=404,detail="更新失败:顾问不存在") if error is not None: raise HTTPException(status_code=500, detail="未处理的业务结果: " + error) return u_advisor @router.delete("/delete/{advisor_id}") def delete_advisor(advisor_id:int,db:Session=Depends(get_db)): d_advisor,error=service.delete_advisor(db=db,advisor_id=advisor_id) if error == "NOT_FOUND": raise HTTPException(status_code=404,detail="顾问老师不存在") if error == "HAS_STUDENTS": raise HTTPException(status_code=409, detail="顾问老师下还有学生") if error is not None: raise HTTPException(status_code=500, detail="未处理的业务结果: " + error) return {"message":"删除成功","delete_id":d_advisor}