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.cls_mgmt_scheme import ClsMgmtResponse from scheme.teacher_scheme import TeacherAdd,TeacherUpdate, TeacherResponse router = APIRouter() # 查询所有教师(支持分页) @router.get("/get_all_teachers", response_model=List[TeacherResponse],summary="查询所有教师") 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,summary="查询单个教师") 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}",response_model=ClsMgmtResponse,summary="教师ID查询带教班级信息") async def get_class_info( teacher_id: str = Path(..., description="要查询教师的id"), db: Session = Depends(get_db) ): # 检查传入的id教师是否存在 existing = TeacherDao.get_by_id(db, teacher_id) if not existing: raise HTTPException(status_code=404, detail="该教师id不存在") # 查询教师是否有带教班级 class_info = TeacherDao.get_clss_info(db, teacher_id) if not class_info: raise HTTPException(status_code=404, detail="无带教班级") return class_info # 添加教师信息 @router.post("/add_teacher", response_model=TeacherResponse,summary="增加教师信息") 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,summary="更新教师信息") 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}",summary="删除教师") 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 "该教师已删除"