mirror of
https://gitlab.crans.org/bde/nk20
synced 2025-07-20 16:09:12 +02:00
Rank calculation optimized
This commit is contained in:
@ -1,7 +1,7 @@
|
||||
# Copyright (C) 2018-2025 by BDE ENS Paris-Saclay
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
from .views import FamilyViewSet, FamilyMembershipViewSet, ChallengeViewSet, AchievementViewSet
|
||||
from django.urls import path
|
||||
from .views import FamilyViewSet, FamilyMembershipViewSet, ChallengeViewSet, AchievementViewSet, BatchAchievementsAPIView
|
||||
|
||||
|
||||
def register_family_urls(router, path):
|
||||
@ -12,3 +12,7 @@ def register_family_urls(router, path):
|
||||
router.register(path + '/familymembership', FamilyMembershipViewSet)
|
||||
router.register(path + '/challenge', ChallengeViewSet)
|
||||
router.register(path + '/achievement', AchievementViewSet)
|
||||
|
||||
urlpatterns = [
|
||||
path('achievements/batch/', BatchAchievementsAPIView.as_view(), name='batch_achievements')
|
||||
]
|
@ -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