claude_sms_test

This commit is contained in:
jianqi
2026-09-18 16:53:21 +08:00
commit b9311bdb1e
46 changed files with 4225 additions and 0 deletions
+59
View File
@@ -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}