# 导入FastAPI组件 from fastapi import APIRouter, Depends, HTTPException, Query # 导入sqlalchemy会话 from sqlalchemy.orm import Session # 导入数据库会话依赖,自动管理连接开关 from database import get_db # 导入pydantic请求响应模型 from schema.teacher_schema import TeacherCreate, TeacherUpdate, TeacherOut # 导入DAO类 from dao.teacher_dao import TeacherDao # 创建子路由实例,tags用于swagger文档分组 router = APIRouter() # =============== 根据ID查询单个老师 GET =============== @router.get("/getTeacher/{t_id}", response_model=TeacherOut, summary="根据ID查询老师") def get_teacher( t_id: int, # 路径参数:老师编号 db: Session = Depends(get_db) # 依赖注入获取数据库会话 ): teacher_info = TeacherDao.get_teacher_by_id(db, t_id) # 调用Dao类查询方法 if not teacher_info: # 判断老师是否已存在 raise HTTPException(status_code=404, detail="老师不存在") # 存在主动抛出异常 return teacher_info # =============== 分页查询老师列表 GET【改动:直接定义Query参数】 =============== @router.get("/search/teacher/limit", response_model=list[TeacherOut], summary="分页查询老师列表") # 范围查询,用查询参数Query() def get_teacher_list( skip: int = Query(0, ge=0, description="跳过的记录数"), # 跳过0条,校验参数必须大于零 limit: int = Query(10, ge=1, le=100, description="每页条数"), # 不穿默认10条一页,没页数据范围1-100 db: Session = Depends(get_db) # 依赖注入获取数据库会话 ): return TeacherDao.get_teacher_list(db, skip, limit) #返回分好页的老师列表 # =============== 新增老师 POST ================ @router.post("/add/teacher", response_model=TeacherOut, summary="新增老师") # summary 接口摘要 def add_teacher( teacher: TeacherCreate, # 请求体,自动校验参数 db: Session = Depends(get_db) # 依赖注入获取数据库会话 ): return TeacherDao.create_teacher(db, teacher) # 返回 调用Dao类新增方法 # =============== 更新老师信息 PUT =============== @router.put("/update/{t_id}", response_model=TeacherOut, summary="更新老师信息") def update_teacher( # 路径参数 t_id: int, # 传入id teacher: TeacherUpdate, # 新增请求体模型校验 db: Session = Depends(get_db) # 依赖注入获取数据库会话 ): teacher_info = TeacherDao.update_teacher(db, t_id, teacher) # 调用Dao方法修改信息 if not teacher_info: # 判断老师id是否存在 raise HTTPException(status_code=404, detail="老师不存在") # 不存在主动抛出异常 return teacher_info # 返回修改后的老师对象 # =============== 逻辑删除老师 DELETE =============== @router.delete("/delete/{t_id}", summary="删除老师(逻辑删除)") def delete_teacher( t_id: int, # 接收 url 路径传过来的 id db: Session = Depends(get_db) # 依赖注入获取数据库会话 ): result = TeacherDao.delete_teacher(db, t_id) # 调用Dao层逻辑删除方法,状态修改为0=已删除 if not result: # 判断老师id是否存在 raise HTTPException(status_code=404, detail="老师不存在") # 不存在主动抛出异常 return {"message": "删除成功"}