from django.http.response import JsonResponse from rest_framework.views import APIView from rest_framework import status from drf_yasg.utils import swagger_auto_schema from drf_yasg import openapi from Subscriptions.serializers import StudentByRFCreationSerializer, RegistrationFormByParentSerializer, StudentSerializer from Subscriptions.models import Student, RegistrationForm from N3wtSchool import bdd class StudentView(APIView): """ Gère la lecture d’un élève donné. """ @swagger_auto_schema( operation_summary="Récupérer les informations d'un élève", operation_description="Retourne les détails d'un élève spécifique à partir de son ID", responses={ 200: openapi.Response('Détails de l\'élève', StudentSerializer), 404: openapi.Response('Élève non trouvé') }, manual_parameters=[ openapi.Parameter( 'id', openapi.IN_PATH, description="ID de l'élève", type=openapi.TYPE_INTEGER, required=True ) ] ) def get(self, request, id): student = bdd.getObject(_objectName=Student, _columnName='id', _value=id) if student is None: return JsonResponse({"errorMessage":'Aucun élève trouvé'}, safe=False, status=status.HTTP_404_NOT_FOUND) student_serializer = StudentSerializer(student) return JsonResponse(student_serializer.data, safe=False) # API utilisée pour la vue de création d'un DI class StudentListView(APIView): """ Pour la vue de création d’un dossier d’inscription : liste les élèves disponibles. """ @swagger_auto_schema( operation_summary="Lister tous les élèves", operation_description="Retourne la liste de tous les élèves inscrits ou en cours d'inscription", responses={ 200: openapi.Response('Liste des élèves', StudentByRFCreationSerializer(many=True)) }, manual_parameters=[ openapi.Parameter( 'establishment_id', openapi.IN_QUERY, description="ID de l'établissement", type=openapi.TYPE_INTEGER, required=True ) ] ) # Récupération de la liste des élèves inscrits ou en cours d'inscriptions def get(self, request): establishment_id = request.GET.get('establishment_id', None) if establishment_id is None: return JsonResponse({'error': 'establishment_id est requis'}, safe=False, status=status.HTTP_400_BAD_REQUEST) students = Student.objects.filter(registrationform__establishment_id=establishment_id) students_serializer = StudentByRFCreationSerializer(students, many=True) return JsonResponse(students_serializer.data, safe=False) # API utilisée pour la vue parent class ChildrenListView(APIView): """ Pour la vue parent : liste les élèves rattachés à un profil donné. """ @swagger_auto_schema( operation_summary="Lister les élèves d'un parent", operation_description="Retourne la liste des élèves associés à un profil parent spécifique", responses={ 200: openapi.Response('Liste des élèves du parent', RegistrationFormByParentSerializer(many=True)) }, manual_parameters=[ openapi.Parameter( 'id', openapi.IN_PATH, description="ID du profil parent", type=openapi.TYPE_INTEGER, required=True ) ] ) # Récupération des élèves d'un parent # idProfile : identifiant du profil connecté rattaché aux fiches d'élèves def get(self, request, id): students = bdd.getObjects(_objectName=RegistrationForm, _columnName='student__guardians__associated_profile__id', _value=id) students_serializer = RegistrationFormByParentSerializer(students, many=True) return JsonResponse(students_serializer.data, safe=False)