Files

84 lines
3.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from datetime import date
from fastapi import APIRouter,Depends,HTTPException,Query
from class_management.dao.class_management_dao import add_class_dao, update_class_dao, get_class_dao, delete_class_dao
from class_management.database import get_db
from class_management.schema.class_management_request import ClassCreate, ClassResponse, ClassUpdate
class_api = APIRouter(prefix='/classes')
# ,tags=['班级管理模块']
@class_api.post("",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('/{id}',summary='根据id查询班级')
def get_one_class(id:int,db=Depends(get_db)):
res = get_class_dao(c={'id':id},db=db)
if not res:
raise HTTPException(status_code=404, detail="该班级不存在或已删除")
return ClassResponse(totals=1,data=res[0])
@class_api.get('',summary='多字段查询班级')
def get_some_classes( num:str|None = Query(None,description='班级编号')
,name:str|None = Query(None,description='班级名称')
,head_teacher_id:int|None = Query(None,description='班主任')
,coach_teacher_id:int|None = Query(None,description='授课老师')
,tutor_teacher_id:int|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 = {
'num': num,
'name': name,
'head_teacher_id': head_teacher_id,
'coach_teacher_id': coach_teacher_id,
'tutor_teacher_id': tutor_teacher_id,
'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]
return ClassResponse(totals=total,data=page_data)
@class_api.put("/{class_id}",summary='修改班级信息')
def update_class(class_id:int
,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": id})
@class_api.delete('/{id}',summary='逻辑删除班级')
def remove_class(id:int,db=Depends(get_db)):
del_rows = delete_class_dao(id,db)
if del_rows <= 0:
raise HTTPException(status_code=404, detail="班级不存在,删除失败")
return ClassResponse(detail='删除成功',data={'id':id})