-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathviews.py
More file actions
98 lines (75 loc) · 3.02 KB
/
Copy pathviews.py
File metadata and controls
98 lines (75 loc) · 3.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
from rest_framework import generics
from .serializers import GamesSerializer, GameshowcaseSerializer, EventSerializer, MemberSerializer
from .models import Game, GameShowcase, Event, Member, Committee
from django.utils import timezone
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.exceptions import ValidationError
from rest_framework.pagination import PageNumberPagination
class GamesDetailAPIView(generics.RetrieveAPIView):
"""
GET /api/games/<id>/
"""
serializer_class = GamesSerializer
lookup_url_kwarg = "id"
def get_queryset(self):
return Game.objects.filter(id=self.kwargs["id"])
class EventPagination(PageNumberPagination):
page_size = 20
page_size_query_param = "page_size"
max_page_size = 100
class EventListAPIView(generics.ListAPIView):
"""
GET /api/events/
Returns a paginated list of events (optionally filtered by time)
"""
serializer_class = EventSerializer
pagination_class = EventPagination
def get_queryset(self):
qs = Event.objects.all()
type_param = self.request.query_params.get("type")
now = timezone.now()
# Default to upcoming when type is missing/empty
if not type_param:
return qs.filter(date__gte=now).order_by("date")
if type_param == "past":
return qs.filter(date__lt=now).order_by("-date")
if type_param == "upcoming":
return qs.filter(date__gte=now).order_by("date")
raise ValidationError(
{"type": "Invalid value. Use 'past' or 'upcoming'."})
class EventDetailAPIView(generics.RetrieveAPIView):
"""
GET /api/events/<id>/
"""
serializer_class = EventSerializer
lookup_url_kwarg = "id"
def get_queryset(self):
return Event.objects.filter(id=self.kwargs["id"])
class GameshowcaseAPIView(APIView):
def get(self, request):
showcases = GameShowcase.objects.all()
serializer = GameshowcaseSerializer(showcases, many=True, context={'request': request})
return Response(serializer.data)
class MemberAPIView(generics.RetrieveAPIView):
serializer_class = MemberSerializer
lookup_field = "id"
def get_queryset(self):
return Member.objects.filter(active=True)
class CommitteeAPIView(generics.ListAPIView):
serializer_class = MemberSerializer
def get_queryset(self):
outputList = []
roleOrder = ("P", "VP", "SEC", "TRE", "MARK", "EVE", "PRO", "FRE")
placeholderMember = {"name": "Position not filled", "profile_picture": "url('/landing_placeholder.png')",
"about": "", "pronouns": "", "pk": 0}
for i in roleOrder:
try:
cur = Committee.objects.get(role=i).id
if cur.active:
outputList.append(cur)
else:
outputList.append(placeholderMember)
except Committee.DoesNotExist:
outputList.append(placeholderMember)
return outputList