From 6902fe4d8d301af5db55ffaf00b4b9cb782d9e12 Mon Sep 17 00:00:00 2001 From: PeterJFB Date: Fri, 29 Apr 2022 18:24:31 +0200 Subject: [PATCH] Use random endpoint instead of frontpage --- lego/apps/frontpage/views.py | 9 --------- lego/apps/users/views/abakus_groups.py | 23 ++++++++++++++++++++++- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/lego/apps/frontpage/views.py b/lego/apps/frontpage/views.py index 322e3ef0b0..d34c1f6da8 100644 --- a/lego/apps/frontpage/views.py +++ b/lego/apps/frontpage/views.py @@ -15,9 +15,6 @@ DetailedPollSerializer, HiddenResultsDetailedPollSerializer, ) -from lego.apps.users.models import AbakusGroup -from lego.apps.users.serializers.abakus_groups import PublicAbakusGroupSerializer -from lego.apps.users.constants import GROUP_INTEREST class FrontpageViewSet(viewsets.ViewSet): @@ -93,8 +90,6 @@ def get_serializer_context(): queryset_poll = Poll.objects.filter(pinned=True).order_by("created_at").last() - queryset_interestgroups = AbakusGroup.objects.filter(type=GROUP_INTEREST, active=True).order_by("?") - articles = PublicArticleSerializer( queryset_articles[:10], context=get_serializer_context(), many=True ).data @@ -111,15 +106,11 @@ def get_serializer_context(): poll = DetailedPollSerializer( queryset_poll, context=get_serializer_context() ).data - interestgroups = PublicAbakusGroupSerializer( - queryset_interestgroups[:3], context=get_serializer_context(), many=True - ).data ret = { "articles": articles, "events": events, "poll": poll, - "interestgroups": interestgroups, } return Response(ret) diff --git a/lego/apps/users/views/abakus_groups.py b/lego/apps/users/views/abakus_groups.py index e43919d85a..a4c3cb5639 100644 --- a/lego/apps/users/views/abakus_groups.py +++ b/lego/apps/users/views/abakus_groups.py @@ -1,4 +1,7 @@ -from rest_framework import viewsets +from random import sample +from rest_framework import status, viewsets +from rest_framework.decorators import action +from rest_framework.response import Response from lego.apps.permissions.api.views import AllowedPermissionsMixin from lego.apps.permissions.constants import EDIT @@ -43,3 +46,21 @@ def get_queryset(self): return AbakusGroup.objects_with_text.prefetch_related("users").all() return self.queryset + + @action(detail=False, methods=["GET"]) + def random_interests(self, request): + queryset = self.get_queryset().filter(type="interesse") + + values = queryset.values_list("pk", flat=True) + if not values: + return Response(status=status.HTTP_204_NO_CONTENT) + + values = list(values) + + if len(values) <= 3: + instance = [queryset.get(pk=pk) for pk in values] + else: + instance = [queryset.get(pk=pk) for pk in sample(values, 3)] + + serializer = self.get_serializer(instance, many=True) + return Response(serializer.data)