Skip to content

Commit 52edb2b

Browse files
authored
Merge pull request #19 from oleveloper/feature/sponsor
Feature: Add SponsorLevelViewSet
2 parents 32afbbe + 058df8f commit 52edb2b

File tree

3 files changed

+72
-5
lines changed

3 files changed

+72
-5
lines changed

sponsor/routers.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
def get_router():
77
router = DefaultRouter()
8+
router.register("remaining", SponsorRemainingAccountViewSet, basename="remaining")
9+
router.register("prospectus", SponsorLevelViewSet, basename="prospectus")
810
router.register("", SponsorViewSet, basename="sponsor")
911

1012
return router

sponsor/serializers.py

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
from rest_framework.fields import SerializerMethodField
12
from rest_framework.serializers import ModelSerializer
23

3-
from sponsor.models import Sponsor
4+
from sponsor.models import Sponsor, SponsorLevel
45

56

67
class SponsorSerializer(ModelSerializer):
@@ -31,3 +32,33 @@ class Meta:
3132
"logo_image",
3233
"id",
3334
]
35+
36+
37+
class SponsorLevelSerializer(ModelSerializer):
38+
class Meta:
39+
model = SponsorLevel
40+
fields = [
41+
"name",
42+
"price",
43+
"desc",
44+
"limit",
45+
"id",
46+
] # TODO: Add fields to show
47+
48+
49+
class SponsorRemainingAccountSerializer(ModelSerializer):
50+
remaining = SerializerMethodField()
51+
52+
class Meta:
53+
model = SponsorLevel
54+
fields = [
55+
"name",
56+
"price",
57+
"limit",
58+
"remaining",
59+
"id",
60+
]
61+
62+
@staticmethod
63+
def get_remaining(obj):
64+
return obj.current_remaining_number

sponsor/viewsets.py

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
1+
from typing import Type
2+
13
from django.shortcuts import get_object_or_404
2-
from rest_framework.permissions import IsAuthenticatedOrReadOnly
34
from rest_framework.response import Response
45
from rest_framework.viewsets import ModelViewSet
56

6-
from sponsor.models import Sponsor
7+
from sponsor.models import Sponsor, SponsorLevel
78
from sponsor.permissions import IsOwnerOrReadOnly, OwnerOnly
8-
from sponsor.serializers import SponsorListSerializer, SponsorSerializer
9+
from sponsor.serializers import (
10+
SponsorLevelSerializer,
11+
SponsorListSerializer,
12+
SponsorRemainingAccountSerializer,
13+
SponsorSerializer,
14+
)
915

1016

1117
class SponsorViewSet(ModelViewSet):
@@ -43,5 +49,33 @@ def retrieve(self, request, *args, **kwargs):
4349

4450
def check_owner_permission(self, request, sponsor_data: Sponsor):
4551
return OwnerOnly.has_object_permission(
46-
self=OwnerOnly, request=request, view=self, obj=sponsor_data
52+
self=Type[OwnerOnly], request=request, view=self, obj=sponsor_data
4753
)
54+
55+
56+
class SponsorLevelViewSet(ModelViewSet):
57+
serializer_class = SponsorLevelSerializer
58+
http_method_names = ["get"]
59+
60+
def get_queryset(self):
61+
return SponsorLevel.objects.all()
62+
63+
def list(self, request, *args, **kwargs):
64+
queryset = SponsorLevel.objects.all().order_by("-price")
65+
serializer = SponsorLevelSerializer(queryset, many=True)
66+
67+
return Response(serializer.data)
68+
69+
70+
class SponsorRemainingAccountViewSet(ModelViewSet):
71+
serializer_class = SponsorLevelSerializer
72+
http_method_names = ["get"]
73+
74+
def get_queryset(self):
75+
return SponsorLevel.objects.all()
76+
77+
def list(self, request, *args, **kwargs):
78+
queryset = SponsorLevel.objects.all().order_by("-price")
79+
serializer = SponsorRemainingAccountSerializer(queryset, many=True)
80+
81+
return Response(serializer.data)

0 commit comments

Comments
 (0)