130 lines
6.1 KiB
Python
130 lines
6.1 KiB
Python
from typing import List
|
|
from fastapi import APIRouter, Depends, HTTPException
|
|
from sqlalchemy.orm import Session
|
|
from core import database
|
|
from core.database import get_db
|
|
from schemas.teacher import TeacherOut, TeacherCreate, TeacherUpdate, ClassTeachersCreate, ClassTeacherOut
|
|
# 导入dao层所有函数
|
|
from models.teacher import Teacher
|
|
from models.class_teacher import ClassTeachers
|
|
from dao.teacher import (
|
|
get_teacher_list,
|
|
get_teacher_by_id,
|
|
create_teacher,
|
|
update_teacher,
|
|
delete_teacher,
|
|
get_class_teacher_by_class_id,
|
|
create_class_teacher,
|
|
update_class_teacher_full,
|
|
delete_class_teacher
|
|
)
|
|
|
|
router = APIRouter(prefix="/teacher", tags=["老师管理模块"])
|
|
|
|
#============================老师表===============================
|
|
@router.get("/list", response_model=List[TeacherOut])
|
|
def api_get_teacher_list(db: Session = Depends(get_db)):
|
|
"""
|
|
GET 查询全部有效老师列表
|
|
:param db: 数据库会话,Depends自动注入
|
|
:return: List[TeacherOut] 老师列表,使用TeacherOut做响应格式化
|
|
"""
|
|
return get_teacher_list(db)
|
|
|
|
@router.get("/{teacher_id}", response_model=TeacherOut)
|
|
def api_get_teacher_by_id(teacher_id: int,db: Session = Depends(get_db)):
|
|
"""
|
|
根据老师主键ID查询单个有效老师
|
|
:param teacher_id: int 老师表主键ID
|
|
:param db: Session 数据库会话对象,依赖注入自动获取
|
|
:return: TeacherOut 老师详情信息
|
|
"""
|
|
return get_teacher_by_id(db,teacher_id)
|
|
@router.post("", response_model=TeacherOut, summary="新增老师")
|
|
def api_create_teacher(obj: TeacherCreate, db: Session = Depends(get_db)):
|
|
"""
|
|
新增老师记录,自动校验姓名、编号唯一性,并自动生成老师业务编号
|
|
:param obj: TeacherCreate Pydantic模型,前端提交新增老师表单数据
|
|
:param db: Session 数据库会话对象,依赖注入自动获取
|
|
:return: TeacherOut 新增成功后的老师完整信息
|
|
"""
|
|
return create_teacher(db, obj)
|
|
@router.put("/{teacher_id}", response_model=TeacherOut, summary="修改老师信息(局部更新)")
|
|
def api_update_teacher(teacher_id: int, obj: TeacherUpdate, db: Session = Depends(get_db)):
|
|
"""
|
|
修改老师信息,支持局部更新,仅更新前端传入的字段
|
|
:param teacher_id: int 需要修改的老师主键ID
|
|
:param obj: TeacherUpdate Pydantic模型,前端提交待修改字段
|
|
:param db: Session 数据库会话对象,依赖注入自动获取
|
|
:return: TeacherOut 更新后的老师完整信息
|
|
"""
|
|
db_teacher = get_teacher_by_id(db, teacher_id)
|
|
if not db_teacher:
|
|
raise HTTPException(status_code=404, detail="老师不存在或已删除!")
|
|
result = update_teacher(db, teacher_id, obj)
|
|
return result
|
|
@router.delete("/{teacher_id}", summary="逻辑删除老师")
|
|
def api_delete_teacher(teacher_id: int, db: Session = Depends(get_db)):
|
|
"""
|
|
逻辑删除老师,存在有效班级带班关系时禁止删除
|
|
:param teacher_id: int 需要删除的老师主键ID
|
|
:param db: Session 数据库会话对象,依赖注入自动获取
|
|
:return: dict 操作成功提示
|
|
"""
|
|
result = delete_teacher(db, teacher_id)
|
|
if not result:
|
|
raise HTTPException(status_code=404, detail="老师不存在或已删除!")
|
|
return {"msg": "老师逻辑删除成功"}
|
|
|
|
# ===================== 班级老师关联路由组 =====================
|
|
class_teacher_router = APIRouter(prefix="/class-teacher", tags=["班级老师分配管理模块"])
|
|
|
|
@class_teacher_router.get("/class/{class_id}", response_model=List[ClassTeacherOut], summary="根据班级ID查询该班级所有带班老师")
|
|
def api_get_class_teacher_by_class_id(class_id: int, db: Session = Depends(get_db)):
|
|
"""
|
|
根据班级主键ID,查询该班级全部有效的班级-老师绑定记录
|
|
:param class_id: int 班级表主键ID
|
|
:param db: Session 数据库会话对象,依赖注入自动获取
|
|
:return: List[ClassTeachersOut] 班级老师关联记录列表
|
|
"""
|
|
return get_class_teacher_by_class_id(db, class_id)
|
|
|
|
@class_teacher_router.post("", response_model=ClassTeacherOut, summary="分配老师到班级,新增班级老师关联记录")
|
|
def api_create_class_teacher(obj: ClassTeachersCreate, db: Session = Depends(get_db)):
|
|
"""
|
|
新增班级与老师的绑定关系,做重复性校验与老师有效性校验
|
|
:param obj: ClassTeachersCreate Pydantic模型,前端提交class_id、teacher_id、role
|
|
:param db: Session 数据库会话对象,依赖注入自动获取
|
|
:return: ClassTeachersOut 新增成功后的班级老师关联记录
|
|
"""
|
|
return create_class_teacher(db, obj)
|
|
|
|
@class_teacher_router.put("/{rel_id}", response_model=ClassTeacherOut, summary="更新班级老师绑定关系")
|
|
def api_update_class_teacher_full(rel_id: int, obj: ClassTeachersCreate, db: Session = Depends(get_db)):
|
|
"""
|
|
修改班级老师中间表记录,支持修改class_id、teacher_id、role;自动校验老师有效性、三元组合唯一性
|
|
:param rel_id: int class_teachers中间表主键ID(待修改的关联记录id)
|
|
:param obj: ClassTeachersCreate Pydantic模型,前端提交新的class_id、teacher_id、role
|
|
:param db: Session 数据库会话对象,依赖注入自动获取
|
|
:return: ClassTeachersOut 更新后的班级老师关联记录
|
|
"""
|
|
result = update_class_teacher_full(db, rel_id, obj)
|
|
if not result:
|
|
raise HTTPException(status_code=404, detail="班级老师关联记录不存在!")
|
|
return result
|
|
|
|
@class_teacher_router.delete("/{rel_id}", summary="逻辑删除班级老师带班关联")
|
|
def api_delete_class_teacher(rel_id: int, db: Session = Depends(get_db)):
|
|
"""
|
|
逻辑删除班级老师绑定关系,修改is_deleted标记为1,非物理删除
|
|
:param rel_id: int class_teachers中间表主键ID
|
|
:param db: Session 数据库会话对象,依赖注入自动获取
|
|
:return: dict 操作成功提示
|
|
"""
|
|
result = delete_class_teacher(db, rel_id)
|
|
if not result:
|
|
raise HTTPException(status_code=404, detail="班级老师关联记录不存在!")
|
|
return {"msg": "解除班级带班关系成功"}
|
|
|
|
|