api: move post event api from add-event/ to event/ endpoint (#57547)

This commit is contained in:
Nicolas Roche 2021-10-06 10:40:53 +02:00
parent 030a355ebf
commit 3719bb7db4
3 changed files with 25 additions and 33 deletions

View File

@ -49,6 +49,11 @@ urlpatterns = [
views.recurring_fillslots,
name='api-recurring-fillslots',
),
url(
r'^agenda/(?P<agenda_identifier>[\w-]+)/event/$',
views.events,
name='api-event',
),
url(
r'^agenda/(?P<agenda_identifier>[\w-]+)/event/(?P<event_identifier>[\w:-]+)/$',
views.events,
@ -69,11 +74,6 @@ urlpatterns = [
views.event_check,
name='api-event-check',
),
url(
r'^agenda/(?P<agenda_identifier>[\w-]+)/add-event/$',
views.agenda_add_event,
name='api-agenda-add-event',
),
url(
r'^agenda/meetings/(?P<meeting_identifier>[\w-]+)/datetimes/$',
views.meeting_datetimes,

View File

@ -2216,6 +2216,23 @@ class Events(APIView):
except Event.DoesNotExist:
raise Http404()
def post(self, request, agenda_identifier):
agenda = get_object_or_404(Agenda, slug=agenda_identifier, kind='events')
serializer = self.serializer_class(data=request.data)
if not serializer.is_valid():
raise APIError(
_('invalid payload'),
err_class='invalid payload',
errors=serializer.errors,
http_status=status.HTTP_400_BAD_REQUEST,
)
payload = serializer.validated_data
event = Event.objects.create(agenda=agenda, **payload)
if event.recurrence_days and event.recurrence_end_date:
event.create_all_recurrences()
return Response({'err': 0, 'data': get_event_detail(request, event)})
def patch(self, request, agenda_identifier=None, event_identifier=None, format=None):
event = self.get_object(agenda_identifier, event_identifier)
serializer = self.serializer_class(event, data=request.data, partial=True)
@ -2534,28 +2551,3 @@ class BookingsStatistics(APIView):
bookings_statistics = BookingsStatistics.as_view()
class AgendaAddEventView(APIView):
permission_classes = (permissions.IsAuthenticated,)
serializer_class = serializers.EventSerializer
def post(self, request, agenda_identifier):
agenda = get_object_or_404(Agenda, slug=agenda_identifier, kind='events')
serializer = self.serializer_class(data=request.data)
if not serializer.is_valid():
raise APIError(
_('invalid payload'),
err_class='invalid payload',
errors=serializer.errors,
http_status=status.HTTP_400_BAD_REQUEST,
)
payload = serializer.validated_data
event = Event.objects.create(agenda=agenda, **payload)
if event.recurrence_days and event.recurrence_end_date:
event.create_all_recurrences()
return Response({'err': 0, 'data': get_event_detail(request, event)})
agenda_add_event = AgendaAddEventView.as_view()

View File

@ -161,7 +161,7 @@ def test_event_checked(app, user):
def test_add_event(app, user):
api_url = '/api/agenda/%s/add-event/' % ('999')
api_url = '/api/agenda/%s/event/' % ('999')
# no authentication
resp = app.post(api_url, status=401)
@ -181,14 +181,14 @@ def test_add_event(app, user):
# using meeting agenda
meeting_agenda = Agenda(label='Foo bar Meeting', kind='meetings')
meeting_agenda.save()
api_url = '/api/agenda/%s/add-event/' % (meeting_agenda.slug)
api_url = '/api/agenda/%s/event/' % (meeting_agenda.slug)
resp = app.post(api_url, status=404)
assert resp.json['detail'] == 'Not found.'
agenda = Agenda(label='Foo bar')
agenda.maximal_booking_delay = 0
agenda.save()
api_url = '/api/agenda/%s/add-event/' % (agenda.slug)
api_url = '/api/agenda/%s/event/' % (agenda.slug)
# missing fields
resp = app.post(api_url, status=400)