mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-10-30 23:39:54 +01:00 
			
		
		
		
	Rank calculation optimized
This commit is contained in:
		| @@ -4,6 +4,14 @@ | ||||
| from api.viewsets import ReadProtectedModelViewSet | ||||
| from django_filters.rest_framework import DjangoFilterBackend | ||||
| from rest_framework.filters import SearchFilter | ||||
| from rest_framework.views import APIView | ||||
| from rest_framework.permissions import IsAuthenticated | ||||
| from rest_framework.response import Response | ||||
| from rest_framework import status | ||||
| from django.views.decorators.csrf import csrf_exempt | ||||
| from django.views.decorators.http import require_POST | ||||
| from django.http import JsonResponse | ||||
| import json | ||||
|  | ||||
| from .serializers import FamilySerializer, FamilyMembershipSerializer, ChallengeSerializer, AchievementSerializer | ||||
| from ..models import Family, FamilyMembership, Challenge, Achievement | ||||
| @@ -59,3 +67,25 @@ class AchievementViewSet(ReadProtectedModelViewSet): | ||||
|     filter_backends = [DjangoFilterBackend, SearchFilter] | ||||
|     filterset_fields = ['name', ] | ||||
|     search_fields = ['$name', ] | ||||
|  | ||||
|  | ||||
| class BatchAchievementsAPIView(APIView): | ||||
|     permission_classes = [IsAuthenticated] | ||||
|     def post(self, request, format=None): | ||||
|         print("POST de la view spéciale") | ||||
|         family_ids = request.data.get('families', []) | ||||
|         challenge_ids = request.data.get('challenges', []) | ||||
|  | ||||
|         families = Family.objects.filter(id__in=family_ids) | ||||
|         challenges = Challenge.objects.filter(id__in=challenge_ids) | ||||
|  | ||||
|         for family in families: | ||||
|             for challenge in challenges: | ||||
|                 a = Achievement(family=family, challenge=challenge) | ||||
|                 a.save(update_score=False) | ||||
|  | ||||
|         for family in families: | ||||
|             family.update_score() | ||||
|         Family.update_ranking() | ||||
|  | ||||
|         return Response({'status': 'ok'}, status=status.HTTP_201_CREATED) | ||||
		Reference in New Issue
	
	Block a user