Skip to content

Commit 01e4a67

Browse files
authored
Merge pull request #160 from pythonkr/fix/sponsor-level
Fix: 후원사 등급 별 후원사 목록 API 추가
2 parents 788dcad + cf71d99 commit 01e4a67

File tree

3 files changed

+27
-10
lines changed

3 files changed

+27
-10
lines changed

sponsor/serializers.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,7 @@ class Meta:
7070
"level",
7171
"id",
7272
]
73-
read_only_fields = [
74-
"name",
75-
"level",
76-
"id",
77-
]
73+
read_only_fields = ["id"]
7874

7975

8076
class SponsorLevelSerializer(serializers.ModelSerializer):
@@ -97,12 +93,20 @@ class Meta:
9793
read_only_fields = ["id"]
9894

9995

96+
class SponsorSummariesSerializer(serializers.ModelSerializer):
97+
class Meta:
98+
model = Sponsor
99+
fields = ["name", "desc", "url", "logo_image", "id"]
100+
101+
100102
class SponsorWithLevelSerializer(serializers.ModelSerializer):
101-
sponsor = SponsorSerializer(read_only=True, many=True, source="sponsor_set")
103+
sponsor = SponsorSummariesSerializer(
104+
read_only=True, many=True, source="sponsor_set"
105+
)
102106

103107
class Meta:
104108
model = SponsorLevel
105-
fields = ["name", "order", "sponsor"]
109+
fields = ["id", "name", "visible", "order", "sponsor"]
106110

107111

108112
class SponsorDetailSerializer(serializers.ModelSerializer):
@@ -126,6 +130,8 @@ def get_creator_userid(obj: Sponsor):
126130

127131

128132
class SponsorListSerializer(serializers.ModelSerializer):
133+
level = SponsorLevelSerializer(read_only=True)
134+
129135
class Meta:
130136
model = Sponsor
131137
fields = [

sponsor/urls.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
{"get": "retrieve", "delete": "destroy", "put": "update"}
2828
),
2929
),
30+
path(
31+
"levels/with-sponsor/", SponsorLevelViewSet.as_view({"get": "list_with_levels"})
32+
),
3033
path(
3134
"levels/benefits/",
3235
SponsorLevelViewSet.as_view(

sponsor/viewsets.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,13 @@
1414
from sponsor.serializers import (
1515
PatronListSerializer,
1616
SponsorDetailSerializer,
17-
SponsorWithLevelSerializer,
17+
SponsorListSerializer,
1818
SponsorRemainingAccountSerializer,
1919
SponsorSerializer,
2020
SponsorLevelSerializer,
2121
SponsorBenefitSerializer,
2222
BenefitByLevelSerializer,
23+
SponsorWithLevelSerializer,
2324
)
2425
from sponsor.slack import send_new_sponsor_notification
2526
from sponsor.validators import SponsorValidater
@@ -45,9 +46,16 @@ def get_serializer_class(self):
4546
match self.action:
4647
case "create_or_update_benefits" | "assign_benefits":
4748
return BenefitByLevelSerializer
49+
case "list_with_levels":
50+
return SponsorWithLevelSerializer
4851
case _:
4952
return SponsorLevelSerializer
5053

54+
@action(detail=False, methods=["GET"], url_path="with-sponsor")
55+
def list_with_levels(self, request, version):
56+
serializer = self.get_serializer(self.get_queryset(), many=True)
57+
return Response(serializer.data)
58+
5159
@action(detail=False, methods=["POST"])
5260
def assign_benefits(self, request, version):
5361
serializer = self.get_serializer(data=request.data)
@@ -86,13 +94,13 @@ def get_queryset(self):
8694
return (
8795
super()
8896
.get_queryset()
89-
.filter(paid_at__isnull=False, level__year=self.request.version)
97+
.filter(level__year=self.request.version)
9098
.order_by("level__order", "paid_at")
9199
)
92100

93101
def get_serializer_class(self):
94102
if self.action == "list":
95-
return SponsorWithLevelSerializer
103+
return SponsorListSerializer
96104
return SponsorSerializer
97105

98106
@atomic

0 commit comments

Comments
 (0)