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 .models import ( Domain, Category, Competency ) from .serializers import ( DomainSerializer, CategorySerializer, CompetencySerializer ) @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) @method_decorator(csrf_protect, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch') class CompetencyListCreateView(APIView): def get(self, request): cycle = request.GET.get('cycle') if cycle is None: return JsonResponse({'error': 'cycle est requis'}, safe=False, status=status.HTTP_400_BAD_REQUEST) competencies_list = getAllObjects(Competency) competencies_list = competencies_list.filter( category__domain__cycle=cycle ).distinct() serializer = CompetencySerializer(competencies_list, many=True) return JsonResponse(serializer.data, safe=False) def post(self, request): data = JSONParser().parse(request) serializer = CompetencySerializer(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 CompetencyDetailView(APIView): def get(self, request, id): try: competency = Competency.objects.get(id=id) serializer = CompetencySerializer(competency) return JsonResponse(serializer.data, safe=False) except Competency.DoesNotExist: return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND) def put(self, request, id): try: competency = Competency.objects.get(id=id) except Competency.DoesNotExist: return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND) data = JSONParser().parse(request) serializer = CompetencySerializer(competency, 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: competency = Competency.objects.get(id=id) competency.delete() return JsonResponse({'message': 'Deleted'}, safe=False) except Competency.DoesNotExist: return JsonResponse({'error': 'No object found'}, status=status.HTTP_404_NOT_FOUND)