from datetime import date from fastapi import APIRouter,Depends,HTTPException,Query from dao.class_management_dao import add_class_dao, update_class_dao, get_class_dao, delete_class_dao from database import get_db from schema.class_management_request import ClassCreate, ClassResponse, ClassUpdate class_api = APIRouter(tags=['班级管理模块']) @class_api.post("/classes",summary='新增班级') def add_class(cla:ClassCreate,db=Depends(get_db)): c_dict = cla.model_dump() r = add_class_dao(c=c_dict,db=db) if not r: raise HTTPException(status_code=500,detail='服务器繁忙,请稍后添加!') return ClassResponse(totals=1,data=c_dict) @class_api.get('/classes/{class_id}',summary='根据id查询班级') def get_one_class(class_id:int,db=Depends(get_db)): res = get_class_dao(c={'class_id':class_id},db=db) if not res: raise HTTPException(status_code=404, detail="该班级不存在或已删除") return ClassResponse(data=res) @class_api.get('/classes',summary='多字段查询班级') def get_some_classes(class_name:str|None = Query(None,description='班级名称') ,class_teacher:str|None = Query(None,description='班主任') ,class_lecturer:str|None = Query(None,description='授课老师') ,class_start_time:date|None = Query(None, description="开班日期,格式YYYY‑MM‑DD") ,class_end_time: date|None = Query(None, description="结课日期,格式YYYY‑MM‑DD") ,page:int = Query(1,ge=1,description='页码,从1开始') ,page_size:int = Query(5,ge=1,le=50,description='每页信息条数') ,db=Depends(get_db) ): c_dict={'class_name':class_name ,'class_teacher':class_teacher ,'class_lecturer':class_lecturer ,'class_start_time':class_start_time ,'class_end_time':class_end_time } c_dict={k:v for k,v in c_dict.items() if v is not None}#过滤掉值为None的key res = get_class_dao(c=c_dict,db=db) total = len(res) #内存分页 start_index = (page-1)*page_size page_data = res[start_index:start_index + page_size] page_response = ClassResponse(data=page_data,totals=total) return page_response @class_api.put("/classes/{class_id}",summary='修改班级信息') def update_class(class_id,update_info:ClassUpdate,db=Depends(get_db)): update_dict=update_info.model_dump(exclude_unset=True) if not update_dict: raise HTTPException(status_code=400, detail="没有传入要修改的字段") row_count = update_class_dao(cid=class_id, update_data=update_dict, db=db) if row_count <= 0: raise HTTPException(status_code=404, detail="班级不存在,修改失败") return ClassResponse(detail="修改成功", data={"class_id": class_id}) @class_api.delete('/classes/{class_id}',summary='逻辑删除班级') def remove_class(class_id:int,db=Depends(get_db)): del_rows = delete_class_dao(class_id,db) if del_rows <= 0: raise HTTPException(status_code=404, detail="班级不存在,删除失败") return ClassResponse(detail='删除成功',data={'class_id':class_id})