Files

81 lines
3.9 KiB
Python
Raw Permalink Normal View History

2026-09-21 19:14:15 +08:00
from typing import List
from fastapi import APIRouter, Depends, Query, HTTPException
from sqlalchemy.orm import Session
# 坚决把下面这三行开头的 sqlalchemy_fastapi_demo. 全删掉!
from scheme.teachers import TeacherAdd, TeacherResponse, TeacherUpdate
from database import get_db
from dao.teachers_dao import TeacherDAO
router=APIRouter()
# ---------- 创建新教师 ----------
@router.post("/teacher/add",response_model=TeacherResponse)
async def add_teacher(teacher:TeacherAdd,db:Session=Depends(get_db)):
existing_foreign_key=TeacherDAO.inspect_class_id_unq(db,teacher.class_id)
if existing_foreign_key:# 外键校验
existing_teacher_id=TeacherDAO.inspect_teacher_id_unq(db,teacher.teacher_id)
if existing_teacher_id:# 主键校验
raise HTTPException(status_code=409, detail="主键教师ID已被占用,包括软删除") # 资源冲突
return TeacherDAO.add_teacher(db,teacher)
else:
raise HTTPException(status_code=404, detail="班级ID不存在,数据库无数据,或已被软删除") # 关联资源不存在
# ---------- 软删除教师 ----------
@router.delete("/teacher/delete", status_code=204)
async def light_delete_teacher(teacher_id:int=Query(...,ge=1,description='输入想要删除的教师ID'),
db:Session=Depends(get_db)):
"""
删除用户,成功返回 204 No Content
"""
success = TeacherDAO.delete_light(db, teacher_id)
if not success: # 目标删除教师ID不存在(被硬删除或软删除)
raise HTTPException(status_code=404, detail="教师ID不存在") # 关联资源不存在
# 返回 None 表示目标教师ID已删除
return None
# ---------- 更新教师信息 ----------
@router.put("/teacher/update",response_model=TeacherResponse)
async def update_teacher(
teacher_data: TeacherUpdate,
teacher_id:int=Query(...,ge=1,description='输入教师想要更新的教师ID'),
db: Session = Depends(get_db)
):
"""
更新用户信息(只更新传入的字段,也就是非None)
"""
# 检查教师ID是否存在
existing_teacher_id = TeacherDAO.inspect_teacher_id_unq(db,teacher_id)
if (not existing_teacher_id) or (existing_teacher_id.is_deleted==1):
raise HTTPException(status_code=404, detail="教师ID不存在,已被硬删除或软删除") # 关联资源不存在
# 更新班级ID
if teacher_data.class_id is not None:
# 校验外键,校验班级ID是否在Class表存在
existing_foreign_key=TeacherDAO.inspect_class_id_unq(db,teacher_data.class_id)
if not existing_foreign_key:
raise HTTPException(status_code=404, detail="班级ID不存在,已被硬删除或软删除") # 关联资源不存在
updated = TeacherDAO.update(db, teacher_id, teacher_data)
return updated
updated = TeacherDAO.update(db, teacher_id, teacher_data)
return updated
# ---------- 查询所有教师(分页) ----------
@router.get("/teacher/total_query",response_model=List[TeacherResponse])
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) # 依赖注入获得数据库会话
):
"""
获取用户列表,支持分页,从skip+1条开始返回
"""
users = TeacherDAO.get_all(db, skip=skip, limit=limit)
return users # FastAPI 自动根据 response_model 转换为 JSON
# ---------- 根据 ID 查询单个教师 ----------
@router.get("/teacher/single_query", response_model=TeacherResponse)
async def get_teacher(
teacher_id: int,
db: Session = Depends(get_db)
):
"""
根据用户 ID 获取详细信息,不显示软删除
"""
teacher = TeacherDAO.inspect_teacher_id_unq(db, teacher_id)
if (not teacher) or teacher.is_deleted==1:
raise HTTPException(status_code=404, detail="教师ID不存在") # 关联资源不存在
return teacher