from fastapi import APIRouter, Depends, HTTPException, Query, Path from sqlalchemy.orm import Session from typing import List from database import get_db from dao.teacher_dao import TeacherDao from scheme.teacher_scheme import TeacherAdd,TeacherUpdate, TeacherResponse router = APIRouter() # 查询所有教师(支持分页) @router.get("/get_all_teachers", response_model=List[TeacherResponse]) async def get_all_teachers( skip: int = Query(0, ge=0, description="跳过的记录数"), limit: int = Query(100, ge=1, le=200, description="返回的最大记录数"), db: Session = Depends(get_db) # 依赖注入获得数据库会话 ): teachers = TeacherDao.get_all(db, skip=skip, limit=limit) return teachers # FastAPI 自动根据 response_model 转换为 JSON # 根据 ID 和 name 查询单个教师 @router.get("/get_teacher/{teacher_id_name}", response_model=TeacherResponse) async def get_teacher( teacher_id_name: str = Path(..., description="要查询教师的id或姓名"), db: Session = Depends(get_db) ): teacher = TeacherDao.get_by_id(db, teacher_id_name) or TeacherDao.get_by_name(db, teacher_id_name) if not teacher: raise HTTPException(status_code=404, detail="用户不存在") return teacher # 根据 ID 查询教师带教的班级的信息 @router.get("/get_class_info/{teacher_id}") async def get_class_info( teacher_id: str = Path(..., description="要查询教师的id"), db: Session = Depends(get_db) ): teacher = TeacherDao.get_clss_info(db, teacher_id) if not teacher: raise HTTPException(status_code=404, detail="用户不存在") return teacher # 添加教师信息 @router.post("/add_teacher", response_model=TeacherResponse) async def add_teacher( teacher_data: TeacherAdd, db: Session = Depends(get_db) ): # 调用 TeacherDao 创建教师信息 new_teacher = TeacherDao.add(db, teacher_data) return new_teacher # 根据教师id更新教师信息 @router.put("/update_teacher/{teacher_id}", response_model=TeacherResponse) async def update_teacher( teacher_id: str, teacher_data: TeacherUpdate, db: Session = Depends(get_db) ): # 检查传入的id教师是否存在 existing = TeacherDao.get_by_id(db, teacher_id) if not existing: raise HTTPException(status_code=404, detail="用户不存在") # 执行更新 updated = TeacherDao.update(db, teacher_id, teacher_data) return updated # 删除教师 @router.delete("/delete_teacher/{teacher_id}") async def delete_teacher( teacher_id: str, db: Session = Depends(get_db) ): success = TeacherDao.delete(db, teacher_id) if not success: raise HTTPException(status_code=404, detail="用户不存在") return "该教师已删除"