feat: Bilan de compétence d'un élève [#16]

This commit is contained in:
N3WT DE COMPET
2025-05-18 17:10:49 +02:00
parent e65e31014d
commit 5760c89105
14 changed files with 646 additions and 124 deletions

View File

@ -63,12 +63,36 @@ class StudentCompetencyListCreateView(APIView):
"data": result
}, safe=False, status=200)
# def post(self, request):
# serializer = AbsenceManagementSerializer(data=request.data)
# if serializer.is_valid():
# serializer.save()
# return JsonResponse(serializer.data, safe=False, status=status.HTTP_201_CREATED)
# return JsonResponse(serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST)
def put(self, request):
"""
Met à jour en masse les notes des compétences d'un élève.
Attend une liste d'objets {"competenceId": ..., "grade": ...}
"""
data = request.data
if not isinstance(data, list):
return JsonResponse({"error": "Une liste est attendue."}, status=400)
updated = []
errors = []
for item in data:
comp_id = item.get("competenceId")
grade = item.get("grade")
student_id = item.get('studentId')
print(f'lecture des données : {comp_id} - {grade} - {student_id}')
if comp_id is None or grade is None:
errors.append({"competenceId": comp_id, "error": "champ manquant"})
continue
try:
# Ajoute le filtre student_id
sc = StudentCompetency.objects.get(
competency_id=comp_id,
student_id=student_id
)
sc.score = grade
sc.save()
updated.append(comp_id)
except StudentCompetency.DoesNotExist:
errors.append({"competenceId": comp_id, "error": "not found"})
return JsonResponse({"updated": updated, "errors": errors}, status=200)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')