更新注释
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
# 顾问模块:独立接口,沿用原学生接口的依赖注入与返回方式。
|
||||
|
||||
# 顾问模块:独立接口,沿用原学生接口的依赖注入与返回方式。
|
||||
# FastAPI路由层,定义顾问管理相关接口,接收前端请求,参数校验,调用DAO层完成数据库操作
|
||||
from fastapi import APIRouter, Depends, HTTPException, Query
|
||||
@@ -85,6 +87,43 @@ def get_advisor(adv_id: int, db: Session = Depends(get_db)):
|
||||
return advisor
|
||||
|
||||
|
||||
# 查询顾问信息和该顾问名下的学生
|
||||
@router.get("/{adv_id}/students")
|
||||
def get_advisor_students(adv_id: int, db: Session = Depends(get_db)):
|
||||
if adv_id <= 0:
|
||||
raise HTTPException(422, "顾问编号必须大于0")
|
||||
advisor = wl_advisor_dao.get_advisor_with_students(db, adv_id)
|
||||
if not advisor:
|
||||
raise HTTPException(404, "顾问不存在")
|
||||
|
||||
student_list = []
|
||||
for student in advisor.student_list:
|
||||
student_list.append({
|
||||
"stu_no": student.stu_no,
|
||||
"stu_name": student.stu_name,
|
||||
"class_id": student.class_id,
|
||||
"advisor_id": student.advisor_id,
|
||||
"native_place": student.native_place,
|
||||
"graduate_school": student.graduate_school,
|
||||
"major": student.major,
|
||||
"in_time": student.in_time,
|
||||
"out_time": student.out_time,
|
||||
"edu": student.edu,
|
||||
"stu_age": student.stu_age,
|
||||
"stu_gender": student.stu_gender,
|
||||
})
|
||||
|
||||
return {
|
||||
"adv_id": advisor.adv_id,
|
||||
"adv_name": advisor.adv_name,
|
||||
"adv_gender": advisor.adv_gender,
|
||||
"adv_phone": advisor.adv_phone,
|
||||
"adv_email": advisor.adv_email,
|
||||
"adv_region": advisor.adv_region,
|
||||
"student_list": student_list,
|
||||
}
|
||||
|
||||
|
||||
@router.put("/{adv_id}", response_model=AdvisorOut)
|
||||
def update_advisor(adv_id: int, data: AdvisorUpdate, db: Session = Depends(get_db)):
|
||||
|
||||
@@ -114,3 +153,4 @@ def delete_advisor(adv_id: int, db: Session = Depends(get_db)):
|
||||
raise HTTPException(404, "顾问不存在")
|
||||
# 返回成功信息
|
||||
return {"msg": "删除成功"}
|
||||
|
||||
|
||||
+17
-3
@@ -1,8 +1,7 @@
|
||||
# 顾问模块DAO层:直接操作 advisor 表,沿用原学生 DAO 的写法。
|
||||
# DAO(Data Access Object) 数据访问层,封装数据库增删改查逻辑,供上层API调用
|
||||
from sqlalchemy.orm import Session
|
||||
# 导入SQLAlchemy ORM数据库模型:顾问表实体
|
||||
from model.wl_advisor_model import Advisor
|
||||
from model.wl_student_model import Student
|
||||
# 导入Pydantic请求模型:新增、更新顾问的入参校验模型
|
||||
from scheme.wl_advisor_scheme import AdvisorCreate, AdvisorUpdate
|
||||
|
||||
@@ -56,6 +55,21 @@ def get_advisor_by_id(db: Session, adv_id: int) -> Advisor | None:
|
||||
).first() # first() 取第一条,无结果返回None
|
||||
|
||||
|
||||
# 查询顾问信息和该顾问名下的学生
|
||||
def get_advisor_with_students(db: Session, adv_id: int):
|
||||
advisor = get_advisor_by_id(db, adv_id)
|
||||
if not advisor:
|
||||
return None
|
||||
|
||||
# 学生表中的顾问外键字段名是 advisor_id
|
||||
student_list = db.query(Student).filter(
|
||||
Student.advisor_id == adv_id,
|
||||
Student.is_deleted == 0
|
||||
).all()
|
||||
advisor.student_list = student_list
|
||||
return advisor
|
||||
|
||||
|
||||
def update_advisor(db: Session, adv_id: int, data: AdvisorUpdate) -> Advisor | None:
|
||||
# 根据ID查询顾问
|
||||
advisor = get_advisor_by_id(db, adv_id)
|
||||
@@ -88,4 +102,4 @@ def delete_advisor(db: Session, adv_id: int) -> bool:
|
||||
# 提交事务保存修改
|
||||
db.commit()
|
||||
# 删除标记修改成功返回True
|
||||
return True
|
||||
return True
|
||||
@@ -52,4 +52,3 @@ class AdvisorOut(BaseModel):
|
||||
# from_attributes = True:支持直接把SQLAlchemy ORM对象转为Pydantic模型
|
||||
# 作用:ORM查询出来的数据库实体,可以直接赋值给AdvisorOut,自动读取属性
|
||||
from_attributes = True
|
||||
|
||||
|
||||
Reference in New Issue
Block a user