diff --git a/.idea/learn_20260919_dome.iml b/.idea/learn_20260919_dome.iml index ea1b721..8437fe6 100644 --- a/.idea/learn_20260919_dome.iml +++ b/.idea/learn_20260919_dome.iml @@ -2,11 +2,7 @@ - + - - - - \ No newline at end of file diff --git a/api/class_management_api.py b/api/class_management_api.py new file mode 100644 index 0000000..cddb327 --- /dev/null +++ b/api/class_management_api.py @@ -0,0 +1,43 @@ +from fastapi import APIRouter,Depends,HTTPException +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.put("/classes/{class_id}",summary='修改班级信息') +def update_class(update_info:ClassUpdate,cid:int,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) + if row_count <= 0: + raise HTTPException(status_code=404, detail="班级不存在,修改失败") + return ClassResponse(detail="修改成功", data={"class_id": cid}) + + +@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}) diff --git a/dao/class_management_dao.py b/dao/class_management_dao.py new file mode 100644 index 0000000..5e19047 --- /dev/null +++ b/dao/class_management_dao.py @@ -0,0 +1,64 @@ +from model.class_management_model import ClassInfo +from sqlalchemy.orm import sessionmaker,Session +from schema.class_management_request import ClassCreate, ClassUpdate + +#查询 +def get_class_dao(c,db): + q = db.query(ClassInfo) + 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('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 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 + ] + + +#新增 +def add_class_dao(c,db): + try: + c1 = ClassInfo(**c) + db.add(c1) + except: + db.rollback() + return False + else: + db.commit() + return True + +#修改 +def update_class_dao(cname,update_data,db): + try: + rows = db.query(ClassInfo).filter(ClassInfo.class_id == cname).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() + except: + db.rollback() + rows = 0 + else: + db.commit() + finally: + return rows diff --git a/database.py b/database.py index e69de29..e31797d 100644 --- a/database.py +++ b/database.py @@ -0,0 +1,17 @@ +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker,declarative_base + +class_management_rul = "mysql+pymysql://root:123456@localhost:3306/ai0824_cyf?charset=utf8mb4" + +engine = create_engine(class_management_rul) +SessionLocal = sessionmaker(bind=engine,autocommit=False, autoflush=False) +Base = declarative_base() + +# 获取数据库会话依赖 + +def get_db(): + db = SessionLocal() + try : + yield db + finally: + db.close() diff --git a/main.py b/main.py index e69de29..eacdb38 100644 --- a/main.py +++ b/main.py @@ -0,0 +1,13 @@ +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 +app = FastAPI() + +app.include_router(class_api) + +Base.metadata.create_all(engine) + +if __name__ =='__main__': + import uvicorn + uvicorn.run('main:app',host='127.0.0.1',port=12345) \ No newline at end of file diff --git a/model/class_management_model.py b/model/class_management_model.py new file mode 100644 index 0000000..eaf03fe --- /dev/null +++ b/model/class_management_model.py @@ -0,0 +1,50 @@ + +from sqlalchemy import Column,Integer,String,Date,Boolean +from sqlalchemy.dialects.mysql import DATETIME +from datetime import datetime +from database import Base + + + + +class ClassInfo(Base): + __tablename__ = 'class_info' + + class_id = Column(Integer + ,primary_key=True + ,autoincrement=True + ,comment='班级id主键' + ) + class_name = Column(String(10) + ,nullable=False + ,comment='班级名称' + ) + class_teacher = Column(String(50) + ,nullable=False + ,comment='班主任' + ) + class_lecturer = Column(String(50) + ,nullable=False + ,comment='授课老师' + ) + class_start_time = Column(Date + ,nullable=False + ,comment='开班日期' + ) + class_end_time = Column(Date + ,nullable=False + ,comment='结课日期' + ) + is_delete = Column(Integer + ,default=False + ,comment='逻辑删除 False未删除 True已删除' + ) + create_time = Column(DATETIME + ,default=datetime.now + ,comment='记录创建时间' + ) + update_time = Column(DATETIME + ,default=datetime.now + ,onupdate=datetime.now + ,comment='记录更新时间' + ) diff --git a/schema/class_management_request.py b/schema/class_management_request.py new file mode 100644 index 0000000..b7f88a3 --- /dev/null +++ b/schema/class_management_request.py @@ -0,0 +1,45 @@ +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:str|None = Field(None,description='开班日期') + class_end_time:str|None = Field(None,description='结课日期') + +#新增班级请求体模型 +class ClassCreate(ClassBase): + class_name:str = Field(..., description='班级名称') + +#修改班级请求体模型 +class ClassUpdate(ClassBase): + class_name:str = Field(None,description='班级名称') + + +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 ClassPageResp(BaseModel): + total:int + data:List[ClassInfoResp] + +class ClassResponse(BaseModel): + code:int = 200 + detail:str = 'OK' + totals:int = 0 + data:str|dict|tuple|list + + +