from django.http.response import JsonResponse from drf_yasg.utils import swagger_auto_schema from drf_yasg import openapi from rest_framework.parsers import MultiPartParser, FormParser from rest_framework.response import Response from rest_framework.views import APIView from rest_framework import status from Subscriptions.serializers import RegistrationTemplateMasterSerializer, RegistrationTemplateSerializer from Subscriptions.models import RegistrationTemplateMaster, RegistrationTemplate from N3wtSchool import bdd class RegistrationTemplateMasterView(APIView): @swagger_auto_schema( operation_description="Récupère tous les masters de templates d'inscription", responses={200: RegistrationTemplateMasterSerializer(many=True)} ) def get(self, request): masters = RegistrationTemplateMaster.objects.all() serializer = RegistrationTemplateMasterSerializer(masters, many=True) return Response(serializer.data) @swagger_auto_schema( operation_description="Crée un nouveau master de template d'inscription", request_body=RegistrationTemplateMasterSerializer, responses={ 201: RegistrationTemplateMasterSerializer, 400: "Données invalides" } ) def post(self, request): serializer = RegistrationTemplateMasterSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) class RegistrationTemplateMasterSimpleView(APIView): @swagger_auto_schema( operation_description="Récupère un master de template d'inscription spécifique", responses={ 200: RegistrationTemplateMasterSerializer, 404: "Master non trouvé" } ) def get(self, request, id): master = bdd.getObject(_objectName=RegistrationTemplateMaster, _columnName='id', _value=id) if master is None: return JsonResponse({"errorMessage":'Le master de template n\'a pas été trouvé'}, safe=False, status=status.HTTP_404_NOT_FOUND) serializer = RegistrationTemplateMasterSerializer(master) return JsonResponse(serializer.data, safe=False) @swagger_auto_schema( operation_description="Met à jour un master de template d'inscription existant", request_body=RegistrationTemplateMasterSerializer, responses={ 200: RegistrationTemplateMasterSerializer, 400: "Données invalides", 404: "Master non trouvé" } ) def put(self, request, id): master = bdd.getObject(_objectName=RegistrationTemplateMaster, _columnName='id', _value=id) if master is None: return JsonResponse({'erreur': 'Le master de template n\'a pas été trouvé'}, safe=False, status=status.HTTP_404_NOT_FOUND) serializer = RegistrationTemplateMasterSerializer(master, data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_200_OK) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) @swagger_auto_schema( operation_description="Supprime un master de template d'inscription", responses={ 204: "Suppression réussie", 404: "Master non trouvé" } ) def delete(self, request, id): master = bdd.getObject(_objectName=RegistrationTemplateMaster, _columnName='id', _value=id) if master is not None: master.delete() return JsonResponse({'message': 'La suppression du master de template a été effectuée avec succès'}, safe=False, status=status.HTTP_204_NO_CONTENT) else: return JsonResponse({'erreur': 'Le master de template n\'a pas été trouvé'}, safe=False, status=status.HTTP_404_NOT_FOUND) class RegistrationTemplateView(APIView): @swagger_auto_schema( operation_description="Récupère tous les templates d'inscription", responses={200: RegistrationTemplateSerializer(many=True)} ) def get(self, request): templates = RegistrationTemplate.objects.all() serializer = RegistrationTemplateSerializer(templates, many=True) return Response(serializer.data) @swagger_auto_schema( operation_description="Crée un nouveau template d'inscription", request_body=RegistrationTemplateSerializer, responses={ 201: RegistrationTemplateSerializer, 400: "Données invalides" } ) def post(self, request): serializer = RegistrationTemplateSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) class RegistrationTemplateSimpleView(APIView): @swagger_auto_schema( operation_description="Récupère un template d'inscription spécifique", responses={ 200: RegistrationTemplateSerializer, 404: "Template non trouvé" } ) def get(self, request, id): template = bdd.getObject(_objectName=RegistrationTemplate, _columnName='id', _value=id) if template is None: return JsonResponse({"errorMessage":'Le template d\'inscription n\'a pas été trouvé'}, safe=False, status=status.HTTP_404_NOT_FOUND) serializer = RegistrationTemplateSerializer(template) return JsonResponse(serializer.data, safe=False) @swagger_auto_schema( operation_description="Met à jour un template d'inscription existant", request_body=RegistrationTemplateSerializer, responses={ 200: RegistrationTemplateSerializer, 400: "Données invalides", 404: "Template non trouvé" } ) def put(self, request, id): template = bdd.getObject(_objectName=RegistrationTemplate, _columnName='id', _value=id) if template is None: return JsonResponse({'erreur': 'Le template d\'inscription n\'a pas été trouvé'}, safe=False, status=status.HTTP_404_NOT_FOUND) serializer = RegistrationTemplateSerializer(template, data=request.data) if serializer.is_valid(): serializer.save() return Response({'message': 'Template mis à jour avec succès', 'data': serializer.data}, status=status.HTTP_200_OK) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) @swagger_auto_schema( operation_description="Supprime un template d'inscription", responses={ 204: "Suppression réussie", 404: "Template non trouvé" } ) def delete(self, request, id): template = bdd.getObject(_objectName=RegistrationTemplate, _columnName='id', _value=id) if template is not None: template.delete() return JsonResponse({'message': 'La suppression du template a été effectuée avec succès'}, safe=False, status=status.HTTP_204_NO_CONTENT) else: return JsonResponse({'erreur': 'Le template n\'a pas été trouvé'}, safe=False, status=status.HTTP_404_NOT_FOUND)