From 61dd6a3f90cc2e88774281a530385a57cdff49f4 Mon Sep 17 00:00:00 2001 From: Mira Weller Date: Mon, 22 Jul 2024 12:18:28 +0200 Subject: [PATCH] add seats endpoint for subevents --- src/pretix/api/urls.py | 4 ++++ src/pretix/api/views/event.py | 16 ++++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/pretix/api/urls.py b/src/pretix/api/urls.py index 90dfd33a8b..d853fa1dc6 100644 --- a/src/pretix/api/urls.py +++ b/src/pretix/api/urls.py @@ -96,6 +96,9 @@ event_router.register(r'exporters', exporters.EventExportersViewSet, basename='e event_router.register(r'shredders', shredders.EventShreddersViewSet, basename='shredders') event_router.register(r'item_meta_properties', event.ItemMetaPropertiesViewSet) +subevent_router = routers.DefaultRouter() +subevent_router.register(r'seats', event.SeatViewSet) + checkinlist_router = routers.DefaultRouter() checkinlist_router.register(r'positions', checkin.CheckinListPositionViewSet, basename='checkinlistpos') @@ -133,6 +136,7 @@ urlpatterns = [ re_path(r'^organizers/(?P[^/]+)/events/(?P[^/]+)/settings/$', event.EventSettingsView.as_view(), name="event.settings"), re_path(r'^organizers/(?P[^/]+)/events/(?P[^/]+)/', include(event_router.urls)), + re_path(r'^organizers/(?P[^/]+)/events/(?P[^/]+)/subevents/(?P\d+)/', include(subevent_router.urls)), re_path(r'^organizers/(?P[^/]+)/teams/(?P[^/]+)/', include(team_router.urls)), re_path(r'^organizers/(?P[^/]+)/events/(?P[^/]+)/items/(?P[^/]+)/', include(item_router.urls)), re_path(r'^organizers/(?P[^/]+)/events/(?P[^/]+)/questions/(?P[^/]+)/', diff --git a/src/pretix/api/views/event.py b/src/pretix/api/views/event.py index dbbb27aa9f..f6d6668e24 100644 --- a/src/pretix/api/views/event.py +++ b/src/pretix/api/views/event.py @@ -40,7 +40,7 @@ from django.utils.timezone import now from django_filters.rest_framework import DjangoFilterBackend, FilterSet from django_scopes import scopes_disabled from rest_framework import serializers, views, viewsets -from rest_framework.exceptions import PermissionDenied, ValidationError +from rest_framework.exceptions import PermissionDenied, ValidationError, NotFound from rest_framework.generics import get_object_or_404 from rest_framework.response import Response @@ -674,16 +674,20 @@ class SeatViewSet(ConditionalListView, viewsets.ModelViewSet): queryset = Seat.objects.none() write_permission = 'can_change_event_settings' filter_backends = [DjangoFilterBackend] - filterset_fields = ['subevent', - 'zone_name', 'row_name', 'row_label', 'seat_number', 'seat_label', + filterset_fields = ['zone_name', 'row_name', 'row_label', 'seat_number', 'seat_label', 'seat_guid', 'blocked',] def get_queryset(self): - if self.request.event.has_subevents: - subevent = self.request.event.subevents.get(pk=self.request.GET.get('subevent')) + if self.request.event.has_subevents and 'subevent' in self.request.resolver_match.kwargs: + try: + subevent = self.request.event.subevents.get(pk=self.request.resolver_match.kwargs['subevent']) + except SubEvent.DoesNotExist: + raise NotFound('Subevent not found') return Seat.annotated(event_id=self.request.event.id, subevent=subevent, qs=subevent.seats.all()) - else: + elif not self.request.event.has_subevents and 'subevent' not in self.request.resolver_match.kwargs: return Seat.annotated(event_id=self.request.event.id, subevent=None, qs=self.request.event.seats.all()) + else: + raise NotFound def perform_update(self, serializer): super().perform_update(serializer)