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
|
|||
|
|
}
|