11from __future__ import annotations
22
3- from admin_api .serializers .event .sponsor import SponsorAdminSerializer , SponsorTierAdminSerializer
4- from core .const .regex import UUID_V4_PATTERN
3+ from admin_api .serializers .event .sponsor import (
4+ SponsorAdminSerializer ,
5+ SponsorTagAdminSerializer ,
6+ SponsorTierAdminSerializer ,
7+ )
58from core .const .tag import OpenAPITag
69from core .permissions import IsSuperUser
710from core .viewset .json_schema_viewset import JsonSchemaViewSet
811from django .db import models
912from drf_spectacular .utils import extend_schema , extend_schema_view
10- from event .sponsor .models import Sponsor , SponsorTier , SponsorTierSponsorRelation
11- from rest_framework import decorators , exceptions , response , status , viewsets
13+ from event .sponsor .models import Sponsor , SponsorTag , SponsorTier
14+ from rest_framework import viewsets
1215
1316ADMIN_METHODS = ["list" , "retrieve" , "create" , "update" , "partial_update" , "destroy" ]
1417
@@ -30,33 +33,13 @@ class SponsorTierAdminViewSet(JsonSchemaViewSet, viewsets.ModelViewSet):
3033 .select_related ("created_by" , "updated_by" , "deleted_by" )
3134 )
3235
33- @extend_schema (
34- tags = [OpenAPITag .ADMIN_EVENT_SPONSOR ],
35- responses = {status .HTTP_200_OK : SponsorAdminSerializer (many = True )},
36- )
37- @decorators .action (detail = True , methods = ["get" ], url_path = "sponsors" )
38- def list_sponsors (self , * args : tuple , ** kwargs : dict ) -> response .Response :
39- tier : SponsorTier = self .get_object ()
40- return response .Response (data = SponsorAdminSerializer (instance = tier .active_sponsors , many = True ).data )
41-
42- @extend_schema (tags = [OpenAPITag .ADMIN_EVENT_SPONSOR ], responses = {status .HTTP_201_CREATED : SponsorAdminSerializer })
43- @decorators .action (detail = True , methods = ["post" ], url_path = f"sponsors/(?P<sponsor_id>{ UUID_V4_PATTERN } )" )
44- def add_sponsor (self , sponsor_id : str , * args : tuple , ** kwargs : dict ) -> response .Response :
45- tier : SponsorTier = self .get_object ()
46- if not (sponsor := Sponsor .objects .filter_active ().filter (id = sponsor_id ).first ()):
47- raise exceptions .NotFound (detail = "Sponsor not found" )
48-
49- SponsorTierSponsorRelation .objects .get_or_create (tier = tier , sponsor = sponsor )
50- return response .Response (data = SponsorAdminSerializer (instance = sponsor ).data , status = status .HTTP_201_CREATED )
5136
52- @extend_schema (tags = [OpenAPITag .ADMIN_EVENT_SPONSOR ], responses = {status .HTTP_204_NO_CONTENT : None })
53- @decorators .action (detail = True , methods = ["delete" ], url_path = f"sponsors/(?P<sponsor_id>{ UUID_V4_PATTERN } )" )
54- def remove_sponsor (self , pk : str , sponsor_id : str , * args : tuple , ** kwargs : dict ) -> response .Response :
55- if not (relation := SponsorTierSponsorRelation .objects .filter (tier_id = pk , sponsor_id = sponsor_id ).first ()):
56- raise exceptions .NotFound (detail = "Sponsor is not associated with this tier" )
57-
58- relation .delete ()
59- return response .Response (status = status .HTTP_204_NO_CONTENT )
37+ @extend_schema_view (** {m : extend_schema (tags = [OpenAPITag .ADMIN_EVENT_SPONSOR ]) for m in ADMIN_METHODS })
38+ class SponsorTagAdminViewSet (JsonSchemaViewSet , viewsets .ModelViewSet ):
39+ http_method_names = ["get" , "post" , "patch" , "delete" ]
40+ serializer_class = SponsorTagAdminSerializer
41+ permission_classes = [IsSuperUser ]
42+ queryset = SponsorTag .objects .filter_active ().select_related ("created_by" , "updated_by" , "deleted_by" )
6043
6144
6245@extend_schema_view (** {m : extend_schema (tags = [OpenAPITag .ADMIN_EVENT_SPONSOR ]) for m in ADMIN_METHODS })
@@ -65,14 +48,3 @@ class SponsorAdminViewSet(JsonSchemaViewSet, viewsets.ModelViewSet):
6548 serializer_class = SponsorAdminSerializer
6649 permission_classes = [IsSuperUser ]
6750 queryset = Sponsor .objects .filter_active ().select_related ("created_by" , "updated_by" , "deleted_by" )
68-
69- @extend_schema (
70- tags = [OpenAPITag .ADMIN_EVENT_SPONSOR ],
71- responses = {status .HTTP_200_OK : SponsorTierAdminSerializer (many = True )},
72- )
73- @decorators .action (detail = True , methods = ["get" ], url_path = "tiers" )
74- def list_tiers (self , * args : tuple , ** kwargs : dict ) -> response .Response :
75- sponsor : Sponsor = self .get_object ()
76- tier_id_qs = SponsorTierSponsorRelation .objects .filter (sponsor = sponsor ).values_list ("tier_id" , flat = True )
77- tiers = SponsorTier .objects .filter_active ().filter (id__in = tier_id_qs )
78- return response .Response (data = SponsorTierAdminSerializer (instance = tiers , many = True ).data )
0 commit comments