diff --git a/api/score.py b/api/score.py index 7302b5e..31d1ed8 100644 --- a/api/score.py +++ b/api/score.py @@ -1,7 +1,7 @@ from fastapi import APIRouter, Depends, HTTPException, Query from sqlalchemy.orm import Session from core.database import get_db -from dao.score import post_score_dao, update_score_dao, get_score_dao, get_all_scores_dao,delete_score_dao, exist_student_exam_dao +from dao.score import post_score_dao, update_score_dao, get_score_dao,delete_score_dao, exist_student_exam_dao from schemas.score import ScoreCreate, ScoreUpdate, ScorePageResp scores_router = APIRouter(prefix="/scores", tags=["成绩接口"]) @@ -32,14 +32,6 @@ def list_score( -@scores_router.get("/all", response_model=ScorePageResp, - summary="所有学生成绩接口", - ) -def list_all_scores(page: int = Query(1, ge=1), - page_size: int = Query(10, ge=1, le=100), - db: Session = Depends(get_db)): - total, data_list = get_all_scores_dao(page, page_size, db) - return {"total": total, "data": data_list} @scores_router.put("{score_id}", summary="更新成绩接口") def modify_score(score_id: int, req: ScoreUpdate, db: Session = Depends(get_db)): diff --git a/dao/score.py b/dao/score.py index eecfa60..5fb2138 100644 --- a/dao/score.py +++ b/dao/score.py @@ -34,14 +34,25 @@ def update_score_dao(score_id, db, updates): def get_score_dao(score_id, student_id, exam_seq, page, page_size, db): - """分页查询成绩,多条件过滤,只查未删除""" + """分页查询成绩,多条件过滤,只查未删除 + 规则: + - score_id == 0 → 查所有学生成绩(仅分页,不加 id 过滤) + - 三个筛选条件全为空(None) → 直接返回空,不查库 + - 其他情况 → 按传入条件过滤 + """ q = db.query(Score).filter(Score.is_deleted == 0) - if score_id: - q = q.filter(Score.id == score_id) - if student_id: - q = q.filter(Score.student_id == student_id) - if exam_seq: - q = q.filter(Score.exam_seq == exam_seq) + + if score_id == 0: + pass # score_id=0 → 查全部(分页) + elif score_id is None and not student_id and not exam_seq: + return 0, [] # 三个参数都没传 → 返回空 + else: + if score_id: + q = q.filter(Score.id == score_id) + if student_id: + q = q.filter(Score.student_id == student_id) + if exam_seq: + q = q.filter(Score.exam_seq == exam_seq) total = q.count() rows = q.offset((page - 1) * page_size).limit(page_size).all() @@ -62,36 +73,20 @@ def get_score_dao(score_id, student_id, exam_seq, page, page_size, db): ] return total, res_list -def get_all_scores_dao(page, page_size, db): - r = db.query(Score).filter(Score.is_deleted == 0)\ - .order_by(Score.student_id, Score.exam_seq) - total = r.count() # 总条数 - rows = r.offset((page-1)*page_size).limit(page_size).all()# 分页 - res_list_all = [ - { - "id": i.id, - "student_id": i.student_id, - "score": i.score, - "exam_seq": i.exam_seq, - "exam_date": i.exam_date, - "remark": i.remark, - "created_at": i.created_at, - "updated_at": i.updated_at, - "is_deleted": i.is_deleted - } - for i in rows - ] - return total,res_list_all + + def delete_score_dao(score_id, db): - """逻辑删除,更新is_deleted=1""" try: - db.query(Score).filter( + cnt = db.query(Score).filter( Score.id == score_id, Score.is_deleted == 0 - ).update({"is_deleted": 1}) + ).update({"is_deleted": 1}) # ← 接住返回值 + if cnt == 0: # ← 关键:一行都没匹配到 + db.rollback() + return False except Exception as err: print("删除成绩异常:", err) db.rollback()