学生管理系统代码提交
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
# api/teachers.py
|
||||
# 老师模块接口:增、查(分页)、改、逻辑删除(沿用原 teacher 模块接口风格)
|
||||
from fastapi import APIRouter, Depends, HTTPException, Query
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from core.deps import get_current_user, require_roles
|
||||
from dao.teachers_dao import TeacherDAO
|
||||
from database import get_db
|
||||
from model.user import User
|
||||
from scheme.teachers import TeacherAdd, TeacherUpdate, TeacherResponse, TeacherListResponse
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
# ---------- 创建新教师 ----------
|
||||
@router.post("/teacher/add", response_model=TeacherResponse, summary="创建教师(工号可自动生成)")
|
||||
async def add_teacher(
|
||||
teacher: TeacherAdd,
|
||||
db: Session = Depends(get_db),
|
||||
current_user: User = Depends(require_roles("admin")),
|
||||
):
|
||||
# 外键校验:班级必须存在
|
||||
existing_class = TeacherDAO.inspect_class_id_unq(db, teacher.class_id)
|
||||
if not existing_class:
|
||||
raise HTTPException(status_code=404, detail="班级ID不存在,或已被软删除")
|
||||
# 主键校验(显式传入工号时)
|
||||
if teacher.teacher_id is not None:
|
||||
existing_teacher = TeacherDAO.inspect_teacher_id_unq(db, teacher.teacher_id)
|
||||
if existing_teacher:
|
||||
raise HTTPException(status_code=409, detail="工号已存在(包括软删除记录)")
|
||||
return TeacherDAO.add_teacher(db, teacher)
|
||||
|
||||
|
||||
# ---------- 软删除教师 ----------
|
||||
@router.delete("/teacher/delete", status_code=204, summary="逻辑删除教师")
|
||||
async def light_delete_teacher(
|
||||
teacher_id: int = Query(..., ge=1, description="要删除的教师工号"),
|
||||
db: Session = Depends(get_db),
|
||||
current_user: User = Depends(require_roles("admin")),
|
||||
):
|
||||
success = TeacherDAO.delete_light(db, teacher_id)
|
||||
if not success:
|
||||
raise HTTPException(status_code=404, detail="教师工号不存在,或已被删除")
|
||||
return None
|
||||
|
||||
|
||||
# ---------- 更新教师信息 ----------
|
||||
@router.put("/teacher/update", response_model=TeacherResponse, summary="更新教师信息")
|
||||
async def update_teacher(
|
||||
teacher_data: TeacherUpdate,
|
||||
teacher_id: int = Query(..., ge=1, description="要更新的教师工号"),
|
||||
db: Session = Depends(get_db),
|
||||
current_user: User = Depends(require_roles("admin")),
|
||||
):
|
||||
if teacher_data.class_id is not None:
|
||||
existing_class = TeacherDAO.inspect_class_id_unq(db, teacher_data.class_id)
|
||||
if not existing_class:
|
||||
raise HTTPException(status_code=404, detail="班级ID不存在,或已被软删除")
|
||||
updated = TeacherDAO.update(db, teacher_id, teacher_data)
|
||||
if updated is None:
|
||||
raise HTTPException(status_code=404, detail="教师工号不存在,或已被软删除")
|
||||
return TeacherDAO.get_by_id(db, teacher_id)
|
||||
|
||||
|
||||
# ---------- 查询所有教师(分页) ----------
|
||||
@router.get("/teacher/total_query", response_model=TeacherListResponse, summary="查询教师列表(分页,含班级名称)")
|
||||
async def get_teachers(
|
||||
skip: int = Query(0, ge=0, description="跳过的记录数"),
|
||||
limit: int = Query(100, ge=1, le=200, description="返回的最大记录数"),
|
||||
db: Session = Depends(get_db),
|
||||
current_user: User = Depends(get_current_user),
|
||||
):
|
||||
total, items = TeacherDAO.get_all(db, skip=skip, limit=limit)
|
||||
return TeacherListResponse(total=total, items=items)
|
||||
|
||||
|
||||
# ---------- 根据 ID 查询单个教师 ----------
|
||||
@router.get("/teacher/single_query", response_model=TeacherResponse, summary="根据工号查询教师")
|
||||
async def get_teacher(
|
||||
teacher_id: int = Query(..., ge=1),
|
||||
db: Session = Depends(get_db),
|
||||
current_user: User = Depends(get_current_user),
|
||||
):
|
||||
teacher = TeacherDAO.get_by_id(db, teacher_id)
|
||||
if teacher is None:
|
||||
raise HTTPException(status_code=404, detail="教师工号不存在,或已被删除")
|
||||
return teacher
|
||||
Reference in New Issue
Block a user