claude_sms_test
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
# api/advisor_api.py
|
||||
# 顾问信息管理模块:接口层只负责 HTTP 出入参,查库/校验/事务交给 dao.advisor_dao
|
||||
|
||||
from typing import Optional
|
||||
|
||||
from fastapi import APIRouter, Depends, Query
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from dao import advisor_dao
|
||||
from database import get_db
|
||||
from schemas.advisor_schema import AdvisorCreate, AdvisorUpdate, AdvisorOut
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.get("", summary="分页查询顾问列表")
|
||||
def list_advisors(
|
||||
page: int = Query(1, ge=1, description="页码"),
|
||||
size: int = Query(10, ge=1, le=100, description="每页数量"),
|
||||
name: Optional[str] = Query(None, description="按姓名模糊查询"),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
total, items = advisor_dao.list_advisors(db, page=page, size=size, name=name)
|
||||
return {
|
||||
"total": total,
|
||||
"page": page,
|
||||
"size": size,
|
||||
"items": [AdvisorOut.model_validate(x) for x in items],
|
||||
}
|
||||
|
||||
|
||||
@router.get("/{adv_id}", summary="查询单个顾问详情")
|
||||
def get_advisor(adv_id: str, db: Session = Depends(get_db)):
|
||||
"""查询顾问详情,附带其负责的学生编号与人数。"""
|
||||
advisor = advisor_dao.assert_advisor_alive(db, adv_id, "顾问不存在或已删除")
|
||||
data = AdvisorOut.model_validate(advisor).model_dump()
|
||||
student_ids = [s.id for s in advisor.students if not s.is_deleted]
|
||||
data["student_ids"] = student_ids
|
||||
data["student_count"] = len(student_ids)
|
||||
return data
|
||||
|
||||
|
||||
@router.post("", response_model=AdvisorOut, status_code=201, summary="新增顾问")
|
||||
def create_advisor(payload: AdvisorCreate, db: Session = Depends(get_db)):
|
||||
"""新增顾问(编号唯一,由 DAO 校验)。"""
|
||||
return advisor_dao.create_advisor(db, payload.model_dump())
|
||||
|
||||
|
||||
@router.put("/{adv_id}", response_model=AdvisorOut, summary="更新顾问信息")
|
||||
def update_advisor(adv_id: str, payload: AdvisorUpdate, db: Session = Depends(get_db)):
|
||||
"""按传入字段局部更新顾问信息。"""
|
||||
return advisor_dao.update_advisor(db, adv_id, payload.model_dump(exclude_unset=True))
|
||||
|
||||
|
||||
@router.delete("/{adv_id}", summary="删除顾问(软删除)")
|
||||
def delete_advisor(adv_id: str, db: Session = Depends(get_db)):
|
||||
"""软删除顾问。"""
|
||||
advisor_dao.soft_delete_advisor(db, adv_id)
|
||||
return {"message": "删除成功", "id": adv_id}
|
||||
Reference in New Issue
Block a user