学生信息管理系统
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
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
|
||||
Reference in New Issue
Block a user