Merge remote-tracking branch 'origin/master'

This commit is contained in:
Corning Zhao
2026-09-14 12:16:02 +08:00
27 changed files with 2919 additions and 91 deletions
+20 -16
View File
@@ -1,43 +1,47 @@
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from dao.wl_score_dao import get_score, create_score, update_score, delete_score, list_score_by_stu_id
from dao.wl_score_dao import get_score, create_score, update_score, delete_score, list_score_by_stu_no
from database import get_db
from scheme.wl_score_scheme import ScoreOut
router = APIRouter(tags=["成绩CRUD"])
# 说明:本模块统一用学号 stu_no(wl_score 表的主键就是它),
# 入参都是 query 标量而不是 JSON body,前端调用时注意别包 body。
# 新增成绩
@router.post("/score/add")
def api_add_score(stu_id: int, exam_order: int, score: float, db: Session = Depends(get_db)):
res = create_score(db, stu_id, exam_order, score)
@router.post("/score/add", response_model=ScoreOut)
def api_add_score(stu_no: str, exam_order: int, score: float, db: Session = Depends(get_db)):
res = create_score(db, stu_no, exam_order, score)
if res is None:
raise HTTPException(status_code=400, detail="新增失败:学生不存在或成绩重复")
return res
# 查询单条成绩
@router.get("/score/one")
def api_get_score(stu_id: int, exam_order: int, db: Session = Depends(get_db)):
s = get_score(db, stu_id, exam_order)
@router.get("/score/one", response_model=ScoreOut)
def api_get_score(stu_no: str, exam_order: int, db: Session = Depends(get_db)):
s = get_score(db, stu_no, exam_order)
if not s:
raise HTTPException(status_code=404, detail="成绩记录不存在")
return s
# 查询某个学生全部成绩
@router.get("/score/list/{stu_id}")
def api_list_score(stu_id: int, db: Session = Depends(get_db)):
return list_score_by_stu_id(db, stu_id)
@router.get("/score/list/{stu_no}", response_model=list[ScoreOut])
def api_list_score(stu_no: str, db: Session = Depends(get_db)):
return list_score_by_stu_no(db, stu_no)
# 更新成绩
@router.put("/score/update")
def api_update_score(stu_id: int, exam_order: int, new_score: float, db: Session = Depends(get_db)):
obj = update_score(db, stu_id, exam_order, new_score)
@router.put("/score/update", response_model=ScoreOut)
def api_update_score(stu_no: str, exam_order: int, new_score: float, db: Session = Depends(get_db)):
obj = update_score(db, stu_no, exam_order, new_score)
if obj is None:
raise HTTPException(status_code=404, detail="更新失败,记录不存在")
return obj
# 删除成绩
@router.delete("/score/del")
def api_del_score(stu_id: int, exam_order: int, db: Session = Depends(get_db)):
ok = delete_score(db, stu_id, exam_order)
def api_del_score(stu_no: str, exam_order: int, db: Session = Depends(get_db)):
ok = delete_score(db, stu_no, exam_order)
if not ok:
raise HTTPException(status_code=404, detail="删除失败,记录不存在")
return {"msg": "删除成功"}
return {"msg": "删除成功"}
+6 -1
View File
@@ -20,7 +20,12 @@ def list_students(
@router.post("", response_model=StudentOut)
def create_student(data: StudentCreate, db: Session = Depends(get_db)):
return wl_student_dao.create_student(db, data)
# 和 wl_emp_api 的写法保持一致:学号生成失败(没选班级/班级不存在)
# 属于参数问题,转成 400,否则会冒成 500
try:
return wl_student_dao.create_student(db, data)
except ValueError as e:
raise HTTPException(status_code=400, detail=str(e))
@router.get("/{stu_no}", response_model=StudentOut)