diff --git a/model/dao/score_dao.py b/model/dao/score_dao.py new file mode 100644 index 0000000..09510ab --- /dev/null +++ b/model/dao/score_dao.py @@ -0,0 +1,116 @@ +# dao/score_dao.py +from sqlalchemy.orm import Session +from model.score import Score +from model.student import Student + + + # 查 + +# 查一个学生所有成绩 + +def get_score(db: Session, student_id: int): + return db.query(Score).filter( + Score.student_id == student_id, + Score.is_deleted == 0, + ).order_by(Score.exam_seq.asc()).all() + + + +# 查某学生的某次成绩 +def get_one_score(db: Session, student_id: int, exam_seq: int): + + return db.query(Score).filter( + Score.student_id == student_id, + Score.exam_seq == exam_seq, + Score.is_deleted == 0, + ).first() + + + +# 查不及格的 +def get_warning(db: Session): + return db.query(Score).filter( + Score.is_warning == 1, + Score.is_deleted == 0, + ).all() + + + + + + +# 录 + + +# 录信息 +def add_score(db: Session, student_id: int, exam_seq: int, score: float): + + stu = db.query(Student).filter(Student.id == student_id).first() + if not stu: + return None, "学生不存在" + + + exists = get_one_score(db, student_id, exam_seq) + if exists: + return None, "该学生这次成绩已录过" + + + + new_score = Score( + student_id=student_id, + exam_seq=exam_seq, + score=score, + is_warning=1 if score < 60 else 0, + is_deleted=0, + ) + db.add(new_score) + db.commit() + db.refresh(new_score) + return new_score, None + + + + + +# 改 + + # 改成绩 + +def update_score(db: Session, student_id: int, exam_seq: int, new_score: float): + + + obj = get_one_score(db, student_id, exam_seq) + if not obj: + return None, "成绩不存在或已删除" + + obj.score = new_score + + # 如果不及格 预警重置 + obj.is_warning = 1 if new_score < 60 else 0 + + db.commit() + db.refresh(obj) + return obj, None + + + + + +# 逻辑删除 + + +def delete_score(db: Session, student_id: int, exam_seq: int): + # 把删除的学生0改成1 + + obj = get_one_score(db, student_id, exam_seq) + + if not obj: + return None, "成绩不存在或已删除" + + + # 0 → 1 + obj.is_deleted = 1 + db.commit() + return obj, None + +