75 lines
3.0 KiB
Python
75 lines
3.0 KiB
Python
# ============================================================
|
||
# api/classinfo_api.py —— 班级模块路由层(Controller)
|
||
# 职责:定义班级相关的所有 HTTP 接口,调用 dao 层完成业务处理
|
||
# 统一前缀:/classinfo(在 main.py 中挂载)
|
||
# ============================================================
|
||
|
||
# 路由接口
|
||
from typing import List
|
||
|
||
from fastapi import APIRouter,Depends,HTTPException
|
||
from database import get_db # 数据库会话依赖
|
||
from dao.classinfo_dao import create_class, get_class, get_all_class, update_class, delete_class, \
|
||
get_class_all_teachers, get_class_all_students # 班级数据访问层函数
|
||
from scheme.classinfo_scheme import ClassCreate,ClassUpdate,ClassIn # 班级请求/响应模型
|
||
|
||
|
||
router=APIRouter()
|
||
|
||
# 新增班级(POST /classinfo/)
|
||
@router.post("/",response_model=ClassIn)
|
||
def add_class(class_data:ClassCreate,db=Depends(get_db)):
|
||
return create_class(db=db,obj=class_data)
|
||
|
||
# 条件查询班级(GET /classinfo/search):可按 id 或名称筛选
|
||
@router.get("/search",response_model=List[ClassIn])
|
||
def get_cls(class_id:int=None,class_name:str=None,db=Depends(get_db)):
|
||
res_list=get_class(db=db,class_id=class_id,class_name=class_name)
|
||
# 如果指定class_id但是查不到,才抛出404
|
||
if class_id is not None and len(res_list)==0:
|
||
raise HTTPException(status_code=404, detail="班级不存在")
|
||
return res_list
|
||
|
||
# 查询全部班级(GET /classinfo/)
|
||
@router.get("/",response_model=List[ClassIn])
|
||
def get_all(db=Depends(get_db)):
|
||
return get_all_class(db=db)
|
||
|
||
# 修改班级(PUT /classinfo/{class_id})
|
||
@router.put("/{class_id}",response_model=ClassIn)
|
||
def up_class(class_id:int,class_data:ClassUpdate,db=Depends(get_db)):
|
||
res=update_class(db=db,class_id=class_id, obj=class_data)
|
||
if not res:
|
||
raise HTTPException(status_code=404, detail="班级不存在")
|
||
return res
|
||
|
||
# 逻辑删除班级(DELETE /classinfo/{class_id})
|
||
@router.delete("/{class_id}")
|
||
def del_class(class_id:int,db=Depends(get_db)):
|
||
res=delete_class(db=db,class_id=class_id)
|
||
if not res:
|
||
raise HTTPException(status_code=404,detail="班级不存在")
|
||
return {"msg": "逻辑删除成功"}
|
||
|
||
# 1. 查询班级下全部老师(GET /classinfo/{class_id}/teachers)
|
||
@router.get("/{class_id}/teachers")
|
||
def get_class_teacher_list(class_id:int, db=Depends(get_db)):
|
||
teacher_list = get_class_all_teachers(db, class_id)
|
||
if teacher_list is None:
|
||
raise HTTPException(status_code=404, detail="班级不存在")
|
||
return {
|
||
"class_id": class_id,
|
||
"teacher_list": teacher_list
|
||
}
|
||
|
||
# 2. 查询班级下全部学生(GET /classinfo/{class_id}/students)
|
||
@router.get("/{class_id}/students")
|
||
def get_class_student_list(class_id:int, db=Depends(get_db)):
|
||
student_list = get_class_all_students(db, class_id)
|
||
if student_list is None:
|
||
raise HTTPException(status_code=404, detail="班级不存在")
|
||
return {
|
||
"class_id": class_id,
|
||
"student_list": student_list
|
||
}
|