61 lines
2.5 KiB
Python
61 lines
2.5 KiB
Python
from fastapi import APIRouter, Depends, HTTPException, Query
|
|
from sqlalchemy.orm import Session
|
|
from dao import advisor_dao
|
|
from database import get_db
|
|
from scheme.advisor_scheme import (
|
|
AdvisorCreate,
|
|
AdvisorResp,
|
|
AdvisorStudentResp,
|
|
AdvisorUpdate,
|
|
)
|
|
|
|
# router = APIRouter(prefix="/advisor", tags=["顾问管理模块"])
|
|
router = APIRouter()
|
|
|
|
@router.post("/", response_model=AdvisorResp, summary="新增顾问")
|
|
def add_advisor(advisor: AdvisorCreate, db: Session = Depends(get_db)):
|
|
if advisor_dao.get_advisor_by_no(db, advisor.advisor_no):
|
|
raise HTTPException(status_code=400, detail=f"顾问编号 {advisor.advisor_no} 已存在")
|
|
return advisor_dao.create_advisor(db, advisor)
|
|
|
|
@router.get("/", response_model=list[AdvisorResp], summary="顾问列表/搜索")
|
|
def get_advisor_list(
|
|
search_keyword: str | None = Query(default=None, description="按顾问编号或姓名模糊搜索"),
|
|
db: Session = Depends(get_db),
|
|
):
|
|
return advisor_dao.get_advisor_list(db, search_keyword)
|
|
|
|
|
|
|
|
@router.get("/{advisor_no}", response_model=AdvisorResp, summary="按编号查询顾问")
|
|
def get_advisor(advisor_no: str, db: Session = Depends(get_db)):
|
|
advisor = advisor_dao.get_advisor_by_no(db, advisor_no)
|
|
if not advisor:
|
|
raise HTTPException(status_code=404, detail=f"顾问 {advisor_no} 不存在")
|
|
return advisor
|
|
|
|
|
|
# 查该顾问名下所有学生
|
|
@router.get("/{advisor_no}/students", response_model=list[AdvisorStudentResp], summary="查询顾问名下学生")
|
|
def get_advisor_students(advisor_no: str, db: Session = Depends(get_db)):
|
|
if not advisor_dao.get_advisor_by_no(db, advisor_no):
|
|
raise HTTPException(status_code=404, detail=f"顾问 {advisor_no} 不存在")
|
|
return advisor_dao.get_students_by_advisor_no(db, advisor_no)
|
|
|
|
|
|
@router.put("/{advisor_no}", response_model=AdvisorResp, summary="更新顾问")
|
|
def update_advisor(advisor_no: str, update: AdvisorUpdate, db: Session = Depends(get_db)):
|
|
advisor = advisor_dao.update_advisor(db, advisor_no, update.model_dump(exclude_unset=True))
|
|
if not advisor:
|
|
raise HTTPException(status_code=404, detail=f"顾问 {advisor_no} 不存在")
|
|
return advisor
|
|
|
|
# 请求:DELETE /advisor/A001
|
|
@router.delete("/{advisor_no}", response_model=AdvisorResp, summary="删除顾问")
|
|
def delete_advisor(advisor_no: str, db: Session = Depends(get_db)):
|
|
advisor = advisor_dao.delete_advisor(db, advisor_no)
|
|
if not advisor:
|
|
raise HTTPException(status_code=404, detail=f"顾问 {advisor_no} 不存在")
|
|
return advisor
|
|
|