2026-09-21 21:39:13 +08:00
|
|
|
from fastapi import APIRouter, Depends, HTTPException
|
2026-09-21 17:51:33 +08:00
|
|
|
from sqlalchemy.orm import Session
|
2026-09-21 21:39:13 +08:00
|
|
|
|
|
|
|
|
from core.database import get_db
|
|
|
|
|
from schemas.student import StudentCreate, StudentUpdate
|
|
|
|
|
from dao import student as student_dao
|
2026-09-21 12:36:57 +08:00
|
|
|
student_router = APIRouter()
|
|
|
|
|
|
2026-09-21 19:28:15 +08:00
|
|
|
@student_router.post("",summary='添加学生')
|
2026-09-21 17:51:33 +08:00
|
|
|
def create_student(request:StudentCreate,db:Session = Depends(get_db)):
|
2026-09-21 12:36:57 +08:00
|
|
|
d = request.model_dump()
|
2026-09-21 21:39:13 +08:00
|
|
|
r = student_dao.create_students(d,db)
|
2026-09-21 12:36:57 +08:00
|
|
|
if not r:
|
|
|
|
|
raise HTTPException(status_code=500,detail='服务器繁忙,请稍后添加!')
|
2026-09-21 17:51:33 +08:00
|
|
|
return {'code':200,'detail':"添加学生成功"}
|
|
|
|
|
|
2026-09-21 21:39:13 +08:00
|
|
|
@student_router.put("/{id}", summary="修改学生")
|
|
|
|
|
def update_student(
|
|
|
|
|
id: int,
|
|
|
|
|
request: StudentUpdate,
|
|
|
|
|
db: Session = Depends(get_db),
|
|
|
|
|
):
|
|
|
|
|
# 只取前端真正传来的字段
|
|
|
|
|
# 例如只传 age,就只修改 age
|
|
|
|
|
data = request.model_dump(exclude_unset=True)
|
2026-09-21 19:28:15 +08:00
|
|
|
|
2026-09-21 21:39:13 +08:00
|
|
|
student = student_dao.update_student(id, data, db)
|
2026-09-21 19:28:15 +08:00
|
|
|
|
2026-09-21 21:39:13 +08:00
|
|
|
# None 表示学生不存在
|
|
|
|
|
if student is None:
|
|
|
|
|
raise HTTPException(status_code=404, detail="学生不存在")
|
2026-09-21 20:42:53 +08:00
|
|
|
|
2026-09-21 21:39:13 +08:00
|
|
|
# False 表示操作数据库失败
|
|
|
|
|
if student is False:
|
|
|
|
|
raise HTTPException(status_code=500, detail="修改学生失败")
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
"code": 200,
|
|
|
|
|
"detail": "修改学生成功",
|
|
|
|
|
"data": student,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@student_router.get("", summary="查询学生列表")
|
|
|
|
|
def get_students(
|
|
|
|
|
# 三个查询条件都可以不传
|
|
|
|
|
student_no: str | None = None,
|
|
|
|
|
student_name: str | None = None,
|
|
|
|
|
class_id: int | None = None,
|
|
|
|
|
# 获取本次请求使用的数据库连接
|
|
|
|
|
db: Session = Depends(get_db),
|
|
|
|
|
):
|
|
|
|
|
# 调用 DAO 查询数据库
|
|
|
|
|
students = student_dao.get_students(
|
|
|
|
|
db=db,
|
|
|
|
|
student_no=student_no,
|
|
|
|
|
student_name=student_name,
|
|
|
|
|
class_id=class_id,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
"code": 200,
|
|
|
|
|
"detail": "查询成功",
|
|
|
|
|
"total": len(students),
|
|
|
|
|
"data": students,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@student_router.get("/{id}", summary="查询学生详情")
|
|
|
|
|
def get_student(id: int, db: Session = Depends(get_db)):
|
|
|
|
|
# 根据路径中的 ID 查询学生
|
|
|
|
|
student = student_dao.get_student_by_id(id, db)
|
|
|
|
|
|
|
|
|
|
if not student:
|
|
|
|
|
# 404 表示请求的数据不存在
|
|
|
|
|
raise HTTPException(status_code=404, detail="学生不存在")
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
"code": 200,
|
|
|
|
|
"detail": "查询成功",
|
|
|
|
|
"data": student,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@student_router.delete("/{id}", summary="逻辑删除学生")
|
|
|
|
|
def delete_student(id: int, db: Session = Depends(get_db)):
|
|
|
|
|
student = student_dao.delete_student(id, db)
|
|
|
|
|
|
|
|
|
|
# None 表示不存在,或者以前已经删除
|
|
|
|
|
if student is None:
|
|
|
|
|
raise HTTPException(status_code=404, detail="学生不存在或已经删除")
|
|
|
|
|
|
|
|
|
|
if student is False:
|
|
|
|
|
raise HTTPException(status_code=500, detail="删除学生失败")
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
"code": 200,
|
|
|
|
|
"detail": "删除学生成功",
|
|
|
|
|
}
|