# # api/c_lass.py # # 本文件定义班级的所有 API 路由(Controller 层) from fastapi import APIRouter, Depends, HTTPException, Query # APIRouter=创建路由,Depends=依赖注入,HTTPException=错误响应,Query=查询参数校验 from sqlalchemy.orm import Session # 会话类型 from database import get_db # 导入会话生成器 from dao.c_lass import create_c_lass, get_c_lass, get_all_c_lass, update_c_lass, delete_c_lass # 把DAO层的5个函数都导入进来,接口里直接调用 from scheme.c_lass import ClassCreate, ClassUpdate, ClassResponse # 路由对象,具体前缀(/c_lass)在 main.py 统一注册 router = APIRouter()# 创建本模块的路由对象,main.py会把它注册进应用 # ---------- 1. 新增班级 POST ---------- # 完整地址:POST /c_lass/add @router.post("/add", response_model=ClassResponse, summary="新增班级") # 装饰器:注册一个POST接口,路径/add;response_model=返回时按ClassResponse格式化 def add_c_lass(class_data: ClassCreate, db: Session = Depends(get_db)): # class_data: ClassCreate = FastAPI自动校验请求体并转成对象;db = FastAPI自动注入会话 # 先查重:如果这个班级ID已经存在(包括逻辑删除的),进入if if get_c_lass(db, class_data.class_id): raise HTTPException(status_code=400, detail="该班级ID已存在,不能重复添加") return create_c_lass(db, class_data)# 通过查重,调DAO层真正插入,返回结果 # ---------- 2. 根据id查询单个班级 GET ---------- # 完整地址:GET /c_lass/{class_id} @router.get("/{class_id}", response_model=ClassResponse, summary="根据id查询班级") # GET接口,路径里带班级编号,如 GET /c_lass/101 def get_class_by_id(class_id: int, db: Session = Depends(get_db)): # 调DAO查询 db_class = get_c_lass(db, class_id) if not db_class: raise HTTPException(status_code=404, detail="该班级不存在") # 查不到就返回404,带提示信息 return db_class # ---------- 3. 分页查询所有班级 GET ---------- # 完整地址:GET /c_lass/?skip=0&limit=10 @router.get("/", response_model=list[ClassResponse], summary="分页查询班级列表") # GET根路径,如 GET /c_lass/?skip=0&limit=10;response_model是列表 def get_class_list( skip: int = Query(0, ge=0, description="跳过的记录数"), # 查询参数skip,默认0,必须≥0 limit: int = Query(10, ge=1, le=200, description="每页最大记录数"), # 查询参数limit,默认10,范围1~200 db: Session = Depends(get_db), ): return get_all_c_lass(db, skip, limit) # 调DAO分页查询 # ---------- 4. 修改班级 PUT ---------- # 完整地址:PUT /c_lass/{class_id} @router.put("/{class_id}/", response_model=ClassResponse, summary="修改班级信息") def update_class(class_id: int, update_data: ClassUpdate, db: Session = Depends(get_db)): # def update_class(class_id: int, start_time: date, db: Session = Depends(get_db)): if not get_c_lass(db, class_id): # 先确认要改的班级存在(存在且没删) raise HTTPException(status_code=404, detail="要修改的班级不存在") return update_c_lass(db, class_id, update_data) # 调DAO执行局部更新 # ---------- 5. 删除班级 DELETE ---------- # 完整地址:DELETE /c_lass/{class_id} @router.delete("/{class_id}", summary="删除班级") def delete_class(class_id: int, db: Session = Depends(get_db)): if not delete_c_lass(db, class_id): raise HTTPException(status_code=404, detail="该班级不存在") # 删除失败(查不到)返回404 return {"message": "删除成功"} #API 层只做三件事—— 接请求、校验 / 查重、调 DAO,自己不写 SQL