From cf71d991ad035fa68417e4dddb12ab169a167845 Mon Sep 17 00:00:00 2001 From: jungmir Date: Wed, 4 Sep 2024 21:34:32 +0900 Subject: [PATCH] =?UTF-8?q?Fix:=20=ED=9B=84=EC=9B=90=EC=82=AC=20=EB=93=B1?= =?UTF-8?q?=EA=B8=89=20=EB=B3=84=20=ED=9B=84=EC=9B=90=EC=82=AC=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sponsor/serializers.py | 20 +++++++++++++------- sponsor/urls.py | 3 +++ sponsor/viewsets.py | 14 +++++++++++--- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/sponsor/serializers.py b/sponsor/serializers.py index 9e291ad..954f4b9 100644 --- a/sponsor/serializers.py +++ b/sponsor/serializers.py @@ -70,11 +70,7 @@ class Meta: "level", "id", ] - read_only_fields = [ - "name", - "level", - "id", - ] + read_only_fields = ["id"] class SponsorLevelSerializer(serializers.ModelSerializer): @@ -97,12 +93,20 @@ class Meta: read_only_fields = ["id"] +class SponsorSummariesSerializer(serializers.ModelSerializer): + class Meta: + model = Sponsor + fields = ["name", "desc", "url", "logo_image", "id"] + + class SponsorWithLevelSerializer(serializers.ModelSerializer): - sponsor = SponsorSerializer(read_only=True, many=True, source="sponsor_set") + sponsor = SponsorSummariesSerializer( + read_only=True, many=True, source="sponsor_set" + ) class Meta: model = SponsorLevel - fields = ["name", "order", "sponsor"] + fields = ["id", "name", "visible", "order", "sponsor"] class SponsorDetailSerializer(serializers.ModelSerializer): @@ -126,6 +130,8 @@ def get_creator_userid(obj: Sponsor): class SponsorListSerializer(serializers.ModelSerializer): + level = SponsorLevelSerializer(read_only=True) + class Meta: model = Sponsor fields = [ diff --git a/sponsor/urls.py b/sponsor/urls.py index fc24249..f7fe804 100644 --- a/sponsor/urls.py +++ b/sponsor/urls.py @@ -27,6 +27,9 @@ {"get": "retrieve", "delete": "destroy", "put": "update"} ), ), + path( + "levels/with-sponsor/", SponsorLevelViewSet.as_view({"get": "list_with_levels"}) + ), path( "levels/benefits/", SponsorLevelViewSet.as_view( diff --git a/sponsor/viewsets.py b/sponsor/viewsets.py index ffc7f31..542a6c4 100644 --- a/sponsor/viewsets.py +++ b/sponsor/viewsets.py @@ -14,12 +14,13 @@ from sponsor.serializers import ( PatronListSerializer, SponsorDetailSerializer, - SponsorWithLevelSerializer, + SponsorListSerializer, SponsorRemainingAccountSerializer, SponsorSerializer, SponsorLevelSerializer, SponsorBenefitSerializer, BenefitByLevelSerializer, + SponsorWithLevelSerializer, ) from sponsor.slack import send_new_sponsor_notification from sponsor.validators import SponsorValidater @@ -45,9 +46,16 @@ def get_serializer_class(self): match self.action: case "create_or_update_benefits" | "assign_benefits": return BenefitByLevelSerializer + case "list_with_levels": + return SponsorWithLevelSerializer case _: return SponsorLevelSerializer + @action(detail=False, methods=["GET"], url_path="with-sponsor") + def list_with_levels(self, request, version): + serializer = self.get_serializer(self.get_queryset(), many=True) + return Response(serializer.data) + @action(detail=False, methods=["POST"]) def assign_benefits(self, request, version): serializer = self.get_serializer(data=request.data) @@ -86,13 +94,13 @@ def get_queryset(self): return ( super() .get_queryset() - .filter(paid_at__isnull=False, level__year=self.request.version) + .filter(level__year=self.request.version) .order_by("level__order", "paid_at") ) def get_serializer_class(self): if self.action == "list": - return SponsorWithLevelSerializer + return SponsorListSerializer return SponsorSerializer @atomic