学生管理系统代码提交

This commit is contained in:
李可欣
2026-09-21 23:17:51 +08:00
commit d3c60b2fbf
121 changed files with 4155 additions and 0 deletions
+87
View File
@@ -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