diff --git a/class_management/api/class_management_api.py b/class_management/api/class_management_api.py index e349b55..31ff10f 100644 --- a/class_management/api/class_management_api.py +++ b/class_management/api/class_management_api.py @@ -1,15 +1,12 @@ 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(tags=['班级管理模块']) +class_api = APIRouter(prefix='/classes',tags=['班级管理模块']) - - -@class_api.post("/classes",summary='新增班级') +@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) @@ -18,29 +15,36 @@ def add_class(cla:ClassCreate,db=Depends(get_db)): 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) +@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(data=res) + return ClassResponse(total=1,data=res[0]) -@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_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={'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 = { + '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) @@ -50,26 +54,28 @@ def get_some_classes(class_name:str|None = Query(None,description='班级名称' 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 + return ClassResponse(totals=total,data=page_data) -@class_api.put("/classes/{class_id}",summary='修改班级信息') -def update_class(class_id,update_info:ClassUpdate,db=Depends(get_db)): +@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": class_id}) + return ClassResponse(detail="修改成功", data={"class_id": 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) +@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={'class_id':class_id}) + return ClassResponse(detail='删除成功',data={'id':id}) diff --git a/class_management/dao/class_management_dao.py b/class_management/dao/class_management_dao.py index 319420b..31cc833 100644 --- a/class_management/dao/class_management_dao.py +++ b/class_management/dao/class_management_dao.py @@ -5,77 +5,92 @@ from sqlalchemy.orm import Session #查询 def get_class_dao(c:dict,db:Session) : q = db.query(ClassInfo).filter(ClassInfo.is_delete == 0)#is_delete=0代表未删除 - if c.get('class_id'): - q = q.filter(ClassInfo.class_id == c.get('class_id')) - if c.get('class_name'): - q = q.filter(ClassInfo.class_name == c.get('class_name')) - if c.get('class_teacher'): - q = q.filter(ClassInfo.class_teacher == c.get('class_teacher')) - if c.get('class_lecturer'): - q = q.filter(ClassInfo.class_lecturer == c.get('class_lecturer')) + if c.get('id'): + q = q.filter(ClassInfo.id == c.get('id')) + if c.get('num'): + q = q.filter(ClassInfo.num == c.get('num')) + if c.get('name'): + q = q.filter(ClassInfo.name == c.get('name')) + if c.get('head_teacher_id'): + q = q.filter(ClassInfo.head_teacher_id == c.get('head_teacher_id')) + if c.get('coach_teacher_id'): + q = q.filter(ClassInfo.coach_teacher_id == c.get('coach_teacher_id')) + if c.get('tutor_teacher_id'): + q = q.filter(ClassInfo.tutor_teacher_id == c.get('tutor_teacher_id')) if c.get('class_start_time'): q = q.filter(ClassInfo.class_start_time == c.get('class_start_time')) if c.get('class_end_time'): q = q.filter(ClassInfo.class_end_time == c.get('class_end_time')) - c1 = q.all() - if not c1: + res = q.all() + if not res: return [] return[ - {'班级编号':i.class_id - ,'班级名称':i.class_name - ,'班主任':i.class_teacher - ,'授课老师':i.class_lecturer - ,'开课时间':i.class_start_time - ,'结课时间':i.class_end_time - } for i in c1 + {'id':i.id + ,'num':i.num + ,'name':i.name + ,'head_teacher_id':i.head_teacher_id + ,'coach_teacher_id':i.coach_teacher_id + ,'tutor_teacher_id':i.tutor_teacher_id + ,'class_start_time':i.class_start_time + ,'class_end_time':i.class_end_time + ,"is_delete": i.is_delete + ,"create_time": i.create_time + ,"update_time": i.update_time + } for i in res ] -#新增 +#新增班级 def add_class_dao(c:dict,db:Session): try: exist_class = db.query(ClassInfo)\ - .filter(ClassInfo.class_name == c['class_name'] + .filter(ClassInfo.name == c['name'] ,ClassInfo.is_delete == 0)\ .first() if exist_class: msg = '班级名称已存在' print(msg) - return [False,msg] + return (False,msg) c1 = ClassInfo(**c) db.add(c1) - except: - db.rollback() - return False - else: db.commit() - return True + db.refresh(c1) + return (True,None) + + except Exception as e: + db.rollback() + err_msg = f'数据库异常:{str(e)}' + print(err_msg) + return (False,err_msg) + #修改 def update_class_dao(cid:int,update_data,db): try: rows = db.query(ClassInfo)\ - .filter(ClassInfo.class_id == cid + .filter(ClassInfo.id == cid ,ClassInfo.is_delete==0)\ .update(update_data) - except: - db.rollback() - return False - else: db.commit() return rows + except Exception as e: + db.rollback() + print(f"update_class_dao异常:{e}") + return 0 -#删除 + + +#删除(逻辑删除) def delete_class_dao(cid,db): try: rows = db.query(ClassInfo)\ - .filter(ClassInfo.class_id == cid,ClassInfo.is_delete==0)\ + .filter(ClassInfo.id == cid,ClassInfo.is_delete==0)\ .update({'is_delete':1}) - except: - db.rollback() - rows = 0 - else: db.commit() - finally: return rows + except Exception as e: + db.rollback() + print(f"delete_class_dao异常:{e}") + rows = 0 + diff --git a/class_management/schema/class_management_request.py b/class_management/schema/class_management_request.py index b5fe019..3d57c81 100644 --- a/class_management/schema/class_management_request.py +++ b/class_management/schema/class_management_request.py @@ -2,41 +2,31 @@ from pydantic import BaseModel,Field from datetime import date,datetime from typing import Optional,List -#基础班级请求体 +#班级基础信息请求体 class ClassBase(BaseModel): - class_teacher:str|None = Field(None,description='班主任') - class_lecturer:str|None = Field(None,description='授课老师') - class_start_time:date|None = Field(None,description='开班日期') - class_end_time:date|None = Field(None,description='结课日期') + num:str|None = Field(None,description='班级编号') + name:str|None = Field(None,description='班级名称') + head_teacher_id:int|None = Field(None,description='班主任编号(teacher表id)') + coach_teacher_id:int|None = Field(None,description='授课老师编号(teacher表id)') + tutor_teacher_id:int|None = Field(None,description='助教老师编号(teacher表id)') + class_start_time:date|None = Field(None,description='开班日期 YYYY‑MM‑DD') + class_end_time:date|None = Field(None,description='结课日期 YYYY‑MM‑DD') -#新增班级请求体模型 +#新增班级请求体:num,name必填,其余继承父类ClassBase class ClassCreate(ClassBase): - class_name:str = Field(..., description='班级名称') + num:str = Field(...,description='班级编号') + name:str = Field(...,description='班级名称') -#修改班级请求体模型 +#修改班级请求体,继承ClassBase,全部字段可选,传哪个就更新哪个 class ClassUpdate(ClassBase): - class_name:str = Field(None,description='班级名称') + pass -class ClassInfoResp(BaseModel): - class_id:int - class_name:str - class_teacher:str - class_lecturer:str - class_start_time:date - class_end_time:date - create_time:datetime - update_time:datetime - - class Config: - from_attributes = True - class ClassResponse(BaseModel): code:int = 200 detail:str = 'OK' totals:int = 0 data:str|dict|tuple|list - msg:str = 'OK'