nb
This commit is contained in:
@@ -3,6 +3,7 @@ from util.database import get_db
|
|||||||
from model.all_model import Student_Model
|
from model.all_model import Student_Model
|
||||||
from dao.grade_dao import *
|
from dao.grade_dao import *
|
||||||
from schema.grade_schema import *
|
from schema.grade_schema import *
|
||||||
|
from fastapi import APIRouter, Depends, HTTPException, Body
|
||||||
|
|
||||||
gradeAPI = APIRouter(tags=['学生考核成绩'])
|
gradeAPI = APIRouter(tags=['学生考核成绩'])
|
||||||
|
|
||||||
@@ -22,37 +23,50 @@ def post_grade(o:GradeRequest,db=Depends(get_db)):
|
|||||||
raise HTTPException(status_code=400, detail='学生不存在')
|
raise HTTPException(status_code=400, detail='学生不存在')
|
||||||
return o
|
return o
|
||||||
|
|
||||||
@gradeAPI.put('/{score_id}',summary='成绩修改')
|
@gradeAPI.put("/grade/{score_id}", summary="成绩修改")
|
||||||
def put_grade(
|
def put_grade(
|
||||||
score_id: int
|
score_id: int,
|
||||||
,o:GradeUpdate
|
exam_order: int | None = Body(default=None),
|
||||||
,db=Depends(get_db)
|
score: float | None = Body(default=None),
|
||||||
|
db=Depends(get_db)
|
||||||
):
|
):
|
||||||
|
# 1. 查询这条成绩记录是否存在(未删除)
|
||||||
old_obj = get_score_by_id_dao(score_id=score_id, db=db)
|
old_obj = get_score_by_id_dao(score_id=score_id, db=db)
|
||||||
if not old_obj:
|
if not old_obj:
|
||||||
raise HTTPException(status_code=404, detail="成绩记录不存在(已删除)")
|
raise HTTPException(status_code=404, detail="成绩记录不存在(已删除)")
|
||||||
|
|
||||||
d = o.model_dump(exclude_unset=True)
|
# 2. 组装需要更新的字典,只把不为None的字段放进去
|
||||||
if not d:
|
update_data = {}
|
||||||
raise HTTPException(status_code=400,detail='请传入需要修改的字段')
|
if exam_order is not None:
|
||||||
if "exam_order" in d:
|
update_data["exam_order"] = exam_order
|
||||||
|
if score is not None:
|
||||||
|
update_data["score"] = score
|
||||||
|
|
||||||
|
# 没有传入任何要修改的字段
|
||||||
|
if not update_data:
|
||||||
|
raise HTTPException(status_code=400, detail="请传入需要修改的字段:exam_order 或 score")
|
||||||
|
|
||||||
|
# 3. 如果要修改考核序次,做重复校验:同一个学生不能重复的exam_order
|
||||||
|
if "exam_order" in update_data:
|
||||||
exist_obj = get_score_by_stu_exam_order_dao(
|
exist_obj = get_score_by_stu_exam_order_dao(
|
||||||
stu_id=old_obj.stu_id,
|
stu_id=old_obj.stu_id,
|
||||||
exam_order=d["exam_order"],
|
exam_order=update_data["exam_order"],
|
||||||
db=db
|
db=db
|
||||||
)
|
)
|
||||||
if exist_obj and exist_obj.id != score_id:
|
# 查询到别的记录占用该学生该考核序次
|
||||||
|
if exist_obj and exist_obj.score_id != score_id:
|
||||||
raise HTTPException(status_code=409, detail="修改后的考核序次,该学生已有成绩!")
|
raise HTTPException(status_code=409, detail="修改后的考核序次,该学生已有成绩!")
|
||||||
|
|
||||||
try:
|
# 4.执行数据库更新
|
||||||
r = update_grade_dao(score_id=score_id, update_data=d, db=db)
|
try:
|
||||||
except Exception:
|
rows = update_grade_dao(score_id=score_id, update_data=update_data, db=db)
|
||||||
raise HTTPException(status_code=409, detail="数据冲突,重复数据")
|
except Exception:
|
||||||
|
raise HTTPException(status_code=409, detail="数据冲突,重复数据")
|
||||||
|
|
||||||
if r == 0:
|
if rows == 0:
|
||||||
return {"code": 200, "totals": r, "detail": "数据未发生变化"}
|
return {"code": 200, "totals": rows, "detail": "数据未发生变化"}
|
||||||
|
|
||||||
return {"code": 200, "totals": r, "detail": "更新成功"}
|
return {"code": 200, "totals": rows, "detail": "更新成功"}
|
||||||
|
|
||||||
@gradeAPI.delete('/{score_id}',summary='删除成绩')
|
@gradeAPI.delete('/{score_id}',summary='删除成绩')
|
||||||
def delete_grade(score_id:int,db=Depends(get_db)):
|
def delete_grade(score_id:int,db=Depends(get_db)):
|
||||||
|
|||||||
@@ -15,6 +15,6 @@ class GradeResponse(BaseModel):
|
|||||||
exam_order:int
|
exam_order:int
|
||||||
score:float
|
score:float
|
||||||
|
|
||||||
class GradeUpdate(BaseModel):
|
# class GradeUpdate(BaseModel):
|
||||||
exam_order: int | None = Field( None,description="考核序次")
|
# exam_order: int | None = Field( None,description="考核序次")
|
||||||
score: float | None = Field( None,description="成绩")
|
# score: float | None = Field( None,description="成绩")
|
||||||
|
|||||||
Reference in New Issue
Block a user