Skip to content

Commit

Permalink
Use random endpoint instead of frontpage
Browse files Browse the repository at this point in the history
  • Loading branch information
PeterJFB committed Apr 29, 2022
1 parent bc94c24 commit 6902fe4
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 10 deletions.
9 changes: 0 additions & 9 deletions lego/apps/frontpage/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -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
Expand All @@ -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)
23 changes: 22 additions & 1 deletion lego/apps/users/views/abakus_groups.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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)

0 comments on commit 6902fe4

Please sign in to comment.