from django.http.response import JsonResponse from django.views.decorators.csrf import ensure_csrf_cookie, csrf_protect from django.utils.decorators import method_decorator from rest_framework.parsers import JSONParser from rest_framework.views import APIView from rest_framework import status from .models import ( Domain, Category ) from .serializers import ( DomainSerializer, CategorySerializer ) @method_decorator(csrf_protect, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch') class DomainListCreateView(APIView): def get(self, request): domains = Domain.objects.all() serializer = DomainSerializer(domains, many=True) return JsonResponse(serializer.data, safe=False) def post(self, request): data = JSONParser().parse(request) serializer = DomainSerializer(data=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) @method_decorator(csrf_protect, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch') class DomainDetailView(APIView): def get(self, request, id): try: domain = Domain.objects.get(id=id) serializer = DomainSerializer(domain) return JsonResponse(serializer.data, safe=False) except Domain.DoesNotExist: return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND) def put(self, request, id): try: domain = Domain.objects.get(id=id) except Domain.DoesNotExist: return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND) data = JSONParser().parse(request) serializer = DomainSerializer(domain, data=data, partial=True) if serializer.is_valid(): serializer.save() return JsonResponse(serializer.data, safe=False) return JsonResponse(serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST) def delete(self, request, id): try: domain = Domain.objects.get(id=id) domain.delete() return JsonResponse({'message': 'Deleted'}, safe=False) except Domain.DoesNotExist: return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND) # Répète la même logique pour Category, Competency, EstablishmentCompetency @method_decorator(csrf_protect, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch') class CategoryListCreateView(APIView): def get(self, request): categories = Category.objects.all() serializer = CategorySerializer(categories, many=True) return JsonResponse(serializer.data, safe=False) def post(self, request): data = JSONParser().parse(request) serializer = CategorySerializer(data=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) @method_decorator(csrf_protect, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch') class CategoryDetailView(APIView): def get(self, request, id): try: category = Category.objects.get(id=id) serializer = CategorySerializer(category) return JsonResponse(serializer.data, safe=False) except Category.DoesNotExist: return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND) def put(self, request, id): try: category = Category.objects.get(id=id) except Category.DoesNotExist: return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND) data = JSONParser().parse(request) serializer = CategorySerializer(category, data=data, partial=True) if serializer.is_valid(): serializer.save() return JsonResponse(serializer.data, safe=False) return JsonResponse(serializer.errors, safe=False, status=status.HTTP_400_BAD_REQUEST) def delete(self, request, id): try: category = Category.objects.get(id=id) category.delete() return JsonResponse({'message': 'Deleted'}, safe=False) except Category.DoesNotExist: return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND)