from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from dao.wl_teacher_dao import ( create_teacher, get_teacher_id, get_teacher_no, list_teachers, update_teacher, delete_teacher_logic, generate_teacher_no, get_teacher_class_info, ) from database import get_db from scheme.wl_teacher_scheme import ( TeacherCreate, TeacherUpdate, TeacherResponse, ) router = APIRouter(prefix="/teacher",tags=["老师管理"]) # 查询自动生成的老师工号 @router.get("/generate-no") def get_new_teacher_no(): """获取自动生成的教师工号""" new_no = generate_teacher_no() return {"t_no": new_no} # 查询教师列表 @router.get("/", response_model=list[TeacherResponse]) def query_list(db: Session = Depends(get_db)): return list_teachers(db) # 根据工号查询单个教师 @router.get("/no/{t_no}", response_model=TeacherResponse) def query_one_by_no(t_no: str, db: Session = Depends(get_db)): teacher = get_teacher_no(db, t_no) if not teacher: raise HTTPException(status_code=404, detail="老师不存在") return teacher # 根据 id 查询单个教师 @router.get("/{t_id}", response_model=TeacherResponse) def query_one_by_id(t_id: int, db: Session = Depends(get_db)): teacher = get_teacher_id(db, t_id) if not teacher: raise HTTPException(status_code=404, detail="老师不存在") return teacher # 新增教师 @router.post("/", response_model=TeacherResponse, status_code=201) def add_teacher(body: TeacherCreate, db: Session = Depends(get_db)): try: return create_teacher(db, body) except ValueError as e: raise HTTPException(status_code=400, detail=str(e)) # 修改教师 @router.put("/{t_id}", response_model=TeacherResponse) def edit_teacher( t_id: int, body: TeacherUpdate, db: Session = Depends(get_db), ): teacher = update_teacher(db, t_id, body) if not teacher: raise HTTPException(status_code=404, detail="老师不存在") return teacher # 逻辑删除教师 @router.delete("/{t_id}") def remove_teacher(t_id: int, db: Session = Depends(get_db)): teacher = delete_teacher_logic(db, t_id) if not teacher: raise HTTPException(status_code=404, detail="老师不存在") return {"msg": "删除成功"} # 查询老师所带的班级ID @router.get("/{t_id}/class") def get_class_by_t_id(t_id: int, db: Session = Depends(get_db)): """ 根据老师ID查询其负责的班级ID """ class_id = get_teacher_class_info(db, t_id) if class_id is None: # 如果返回 None,说明老师不存在或者没有分配班级 raise HTTPException(status_code=404, detail="老师不存在或未分配班级") return {"class_id": class_id}