diff --git a/api/class_management_api.py b/api/class_management_api.py index cddb327..53099de 100644 --- a/api/class_management_api.py +++ b/api/class_management_api.py @@ -1,4 +1,6 @@ -from fastapi import APIRouter,Depends,HTTPException +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 @@ -23,16 +25,46 @@ def get_one_class(class_id:int,db=Depends(get_db)): 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(update_info:ClassUpdate,cid:int,db=Depends(get_db)): +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(cname=cid, update_data=update_dict, db=db) + 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": cid}) + return ClassResponse(detail="修改成功", data={"class_id": class_id}) @class_api.delete('/classes/{class_id}',summary='逻辑删除班级') diff --git a/dao/class_management_dao.py b/dao/class_management_dao.py index 5e19047..2a38835 100644 --- a/dao/class_management_dao.py +++ b/dao/class_management_dao.py @@ -1,10 +1,10 @@ from model.class_management_model import ClassInfo -from sqlalchemy.orm import sessionmaker,Session -from schema.class_management_request import ClassCreate, ClassUpdate +from sqlalchemy.orm import Session + #查询 -def get_class_dao(c,db): - q = db.query(ClassInfo) +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'): @@ -18,20 +18,30 @@ def get_class_dao(c,db): if c.get('class_end_time'): q = q.filter(ClassInfo.class_end_time == c.get('class_end_time')) c1 = q.all() - if c1: - 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 - ] + if not c1: + 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 + ] #新增 -def add_class_dao(c,db): +def add_class_dao(c:dict,db:Session): try: + exist_class = db.query(ClassInfo)\ + .filter(ClassInfo.class_name == c['class_name'] + ,ClassInfo.is_delete == 0)\ + .first() + if exist_class: + msg = '班级名称已存在' + print(msg) + return [False,msg] c1 = ClassInfo(**c) db.add(c1) except: @@ -42,19 +52,26 @@ def add_class_dao(c,db): return True #修改 -def update_class_dao(cname,update_data,db): +def update_class_dao(cid:int,update_data,db): try: - rows = db.query(ClassInfo).filter(ClassInfo.class_id == cname).update(update_data) + rows = db.query(ClassInfo)\ + .filter(ClassInfo.class_id == cid + ,ClassInfo.is_delete==0)\ + .update(update_data) except: db.rollback() return False else: db.commit() return rows + + #删除 def delete_class_dao(cid,db): try: - rows = db.query(ClassInfo).filter(ClassInfo.class_id == cid).delete() + rows = db.query(ClassInfo)\ + .filter(ClassInfo.class_id == cid,ClassInfo.is_delete==0)\ + .update({'is_delete':1}) except: db.rollback() rows = 0 diff --git a/main.py b/main.py index eacdb38..a44634f 100644 --- a/main.py +++ b/main.py @@ -2,6 +2,7 @@ from fastapi import FastAPI,APIRouter from api.class_management_api import class_api from model.class_management_model import ClassInfo from database import Base,engine +import model app = FastAPI() app.include_router(class_api) diff --git a/model/class_management_model.py b/model/class_management_model.py index eaf03fe..3650761 100644 --- a/model/class_management_model.py +++ b/model/class_management_model.py @@ -36,8 +36,8 @@ class ClassInfo(Base): ,comment='结课日期' ) is_delete = Column(Integer - ,default=False - ,comment='逻辑删除 False未删除 True已删除' + ,default=0 + ,comment='逻辑删除 0未删除 1已删除' ) create_time = Column(DATETIME ,default=datetime.now diff --git a/schema/class_management_request.py b/schema/class_management_request.py index b7f88a3..b5fe019 100644 --- a/schema/class_management_request.py +++ b/schema/class_management_request.py @@ -6,8 +6,8 @@ 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:str|None = Field(None,description='开班日期') - class_end_time:str|None = Field(None,description='结课日期') + class_start_time:date|None = Field(None,description='开班日期') + class_end_time:date|None = Field(None,description='结课日期') #新增班级请求体模型 class ClassCreate(ClassBase): @@ -31,15 +31,12 @@ class ClassInfoResp(BaseModel): class Config: from_attributes = True -class ClassPageResp(BaseModel): - total:int - data:List[ClassInfoResp] class ClassResponse(BaseModel): code:int = 200 detail:str = 'OK' totals:int = 0 data:str|dict|tuple|list - + msg:str = 'OK'