1- from core .const .regex import UUID_V4
1+ from core .const .regex import UUID_V4_REGEX
2+ from core .const .tag import OpenAPITag
23from django .db .models import QuerySet
4+ from django .utils .decorators import method_decorator
35from django_filters import rest_framework as filters
46from django_filters .constants import EMPTY_VALUES
7+ from drf_spectacular .utils import extend_schema
58from event .presentation .models import Presentation , PresentationCategory , PresentationCategoryRelation
69from event .presentation .serializers import PresentationSerializer
710from rest_framework import mixins , serializers , viewsets
@@ -14,18 +17,21 @@ class PresentationFilterSet(filters.FilterSet):
1417 def filter_by_category_ids (self , queryset : QuerySet , name : str , value : list [str ]) -> QuerySet :
1518 if not value or value in EMPTY_VALUES :
1619 return queryset
17- if not any (UUID_V4 .match (v ) for v in value ):
20+ if not any (UUID_V4_REGEX .match (v ) for v in value ):
1821 return serializers .ValidationError (f"Invalid UUID format in { name } filter: { value } ." )
1922
2023 target_ids = PresentationCategoryRelation .objects .filter (category__id__in = value ).values_list ("presentation_id" )
2124 return queryset .filter (id__in = target_ids )
2225
2326
27+ @method_decorator (name = "list" , decorator = extend_schema (tags = [OpenAPITag .EVENT_PRESENTATION ]))
2428class PresentationCategoryViewSet (mixins .ListModelMixin , viewsets .GenericViewSet ):
2529 queryset = PresentationCategory .objects .filter_active ()
2630
2731
28- class PresentationViewSet (mixins .ListModelMixin , viewsets .GenericViewSet ):
32+ @method_decorator (name = "list" , decorator = extend_schema (tags = [OpenAPITag .EVENT_PRESENTATION ]))
33+ @method_decorator (name = "retrieve" , decorator = extend_schema (tags = [OpenAPITag .EVENT_PRESENTATION ]))
34+ class PresentationViewSet (mixins .ListModelMixin , mixins .RetrieveModelMixin , viewsets .GenericViewSet ):
2935 queryset = Presentation .objects .get_all_nested_data ()
3036 serializer_class = PresentationSerializer
3137 filterset_class = PresentationFilterSet
0 commit comments