99 lines
3.0 KiB
Python
99 lines
3.0 KiB
Python
# 问题记录路由
|
|
|
|
from flask import request, jsonify
|
|
from app.routes import main_bp
|
|
from app.models import db, Student, StudentProblem
|
|
from app.routes.auth import login_required_json
|
|
|
|
|
|
@main_bp.route("/api/students/<int:student_id>/problems", methods=["GET"])
|
|
@login_required_json
|
|
def get_student_problems(student_id):
|
|
"""获取学员的问题列表"""
|
|
student = Student.query.get_or_404(student_id)
|
|
problems = student.problems.all()
|
|
return jsonify([p.to_dict() for p in problems])
|
|
|
|
|
|
@main_bp.route("/api/students/<int:student_id>/problems", methods=["POST"])
|
|
@login_required_json
|
|
def add_student_problem(student_id):
|
|
"""为学员添加问题(增量模式:只添加或更新,不删除已有)"""
|
|
student = Student.query.get_or_404(student_id)
|
|
data = request.get_json()
|
|
|
|
problems = data.get("problems", [])
|
|
|
|
# 添加或更新问题(不删除已有的)
|
|
for p in problems:
|
|
problem_id = p.get("problem_id") # 这是 problems.id
|
|
|
|
# 检查是否已存在
|
|
existing = StudentProblem.query.filter_by(
|
|
student_id=student_id, problem_id=problem_id
|
|
).first()
|
|
|
|
if existing:
|
|
# 更新现有记录
|
|
existing.severity = p.get("severity")
|
|
existing.level = p.get("level")
|
|
else:
|
|
# 添加新记录
|
|
problem = StudentProblem(
|
|
student_id=student_id,
|
|
problem_id=problem_id,
|
|
severity=p.get("severity"),
|
|
level=p.get("level"),
|
|
)
|
|
db.session.add(problem)
|
|
|
|
db.session.commit()
|
|
return jsonify({"message": "问题记录成功"})
|
|
|
|
|
|
@main_bp.route("/api/students/<int:student_id>/problems", methods=["DELETE"])
|
|
@login_required_json
|
|
def clear_student_problems(student_id):
|
|
"""清除学员的问题记录"""
|
|
StudentProblem.query.filter_by(student_id=student_id).delete()
|
|
db.session.commit()
|
|
return jsonify({"message": "清除成功"})
|
|
|
|
|
|
@main_bp.route(
|
|
"/api/students/<int:student_id>/problems/<int:student_problem_id>", methods=["DELETE"]
|
|
)
|
|
@login_required_json
|
|
def delete_single_problem(student_id, student_problem_id):
|
|
"""删除学员的单个问题"""
|
|
StudentProblem.query.filter_by(
|
|
id=student_problem_id
|
|
).delete()
|
|
db.session.commit()
|
|
return jsonify({"message": "删除成功"})
|
|
|
|
|
|
@main_bp.route(
|
|
"/api/students/<int:student_id>/problems/<int:student_problem_id>", methods=["PUT"]
|
|
)
|
|
@login_required_json
|
|
def update_single_problem(student_id, student_problem_id):
|
|
"""更新学员的单个问题(严重程度和级别)"""
|
|
student = Student.query.get_or_404(student_id)
|
|
data = request.get_json()
|
|
|
|
problem = StudentProblem.query.filter_by(
|
|
id=student_problem_id
|
|
).first()
|
|
|
|
if not problem:
|
|
return jsonify({"error": "问题记录不存在"}), 404
|
|
|
|
if "severity" in data:
|
|
problem.severity = data["severity"]
|
|
if "level" in data:
|
|
problem.level = data["level"]
|
|
|
|
db.session.commit()
|
|
return jsonify({"message": "更新成功", "problem": problem.to_dict()})
|