diff --git a/api/score.py b/api/score.py index a87e4c1..7302b5e 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, delete_score_dao, exist_student_exam_dao +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 schemas.score import ScoreCreate, ScoreUpdate, ScorePageResp scores_router = APIRouter(prefix="/scores", tags=["成绩接口"]) @@ -12,14 +12,13 @@ def create_score(req: ScoreCreate, db: Session = Depends(get_db)): # 业务校验:联合唯一 if exist_student_exam_dao(req.student_id, req.exam_seq, db): raise HTTPException(status_code=400, detail="该学生本次考试成绩已存在,不能重复录入") - ok = post_score_dao(req.model_dump(), db) if not ok: raise HTTPException(status_code=400, detail="新增成绩失败,请检查学生id是否存在") return {"msg": "新增成功"} -@scores_router.get("", response_model=ScorePageResp, summary="查询成绩接口") +@scores_router.get("", response_model=ScorePageResp, summary="个人成绩查询接口") def list_score( score_id: int|None=None, student_id: int |None=None, @@ -32,6 +31,16 @@ def list_score( return {"total": total, "data": data_list} + +@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)): update_dict = req.model_dump(exclude_unset=True) diff --git a/dao/score.py b/dao/score.py index 6a427d1..e0b53e5 100644 --- a/dao/score.py +++ b/dao/score.py @@ -1,4 +1,3 @@ -from sqlalchemy import DECIMAL from models.score import Score def post_score_dao(data_dict, db): @@ -59,6 +58,28 @@ 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"""