from fastapi import APIRouter, Depends, HTTPException from schema.score_request import ScoreRequest, ScoreUpdateRequest, ScoreResponse from database import get_db from dao.score_dao import ( calc_level, calc_pass, add_score_dao, update_score_dao, delete_score_dao, get_scores_dao ) score_api = APIRouter() # ========== 1. 添加成绩(按考核序次录入) ========== @score_api.post('', response_model=ScoreResponse, summary='添加成绩') def add_score(score: ScoreRequest, db=Depends(get_db)): d = score.model_dump() d['score_level'] = calc_level(d['score']) # ← 调 DAO 的工具函数 d['is_pass'] = calc_pass(d['score']) r = add_score_dao(o=d, db=db) if not r: raise HTTPException( status_code=500, detail='添加失败!' ) return ScoreResponse(totals=1, data=d) # ========== 2. 查询成绩(动态条件 + 分页) ========== @score_api.get('', summary='查询成绩(支持多条件+分页)') def get_scores( score_id: int = None, student_id: str = None, course_id: str = None, teacher_id: str = None, exam_order: int = None, page: int = 1, page_size: int = 10, db=Depends(get_db) ): r = get_scores_dao( score_id=score_id, student_id=student_id, course_id=course_id, teacher_id=teacher_id, exam_order=exam_order, page=page, page_size=page_size, db=db ) if r: return r raise HTTPException(status_code=404, detail='成绩不存在!') # ========== 3. 修改成绩 ========== @score_api.put('/{score_id}', summary='修改成绩') def update_score(score_id: int, score: ScoreUpdateRequest, db=Depends(get_db)): d = score.model_dump(exclude_unset=True) if 'score' in d: d['score_level'] = calc_level(d['score']) d['is_pass'] = calc_pass(d['score']) r = update_score_dao(score_id=score_id, update_data=d, db=db) if not r: raise HTTPException(status_code=500, detail='没有更新!') return {'code': 200, 'totals': r, 'detail': '更新成功'} # ========== 4. 删除成绩(逻辑删除) ========== @score_api.delete('/{score_id}', summary='删除成绩(逻辑删除)') def delete_score(score_id: int, db=Depends(get_db)): r = delete_score_dao(score_id=score_id, db=db) if not r: raise HTTPException(status_code=500, detail='删除异常,稍后操作!') return {'code': 200, 'totals': r, 'detail': '删除成功'}