Files
group0921/advisors.py
T
2026-09-21 17:07:09 +08:00

50 lines
2.7 KiB
Python

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}