Skip to content
Snippets Groups Projects
Verified Commit ddbc965e authored by Ernesto Rico Schmidt's avatar Ernesto Rico Schmidt
Browse files

feat: handle PATCH requests for schedules

parent 0c720c07
No related branches found
No related tags found
No related merge requests found
......@@ -593,12 +593,54 @@ class APIScheduleViewSet(viewsets.ModelViewSet):
if not request.user.is_superuser:
return Response(status=status.HTTP_401_UNAUTHORIZED)
if request.method == "PATCH":
# only these fields can be updated without generating conflicts
allowed = {"default_playlist_id", "is_repetition", "last_date"}
if set(request.data.keys()).issubset(allowed):
schedule = self.get_object()
if default_playlist_id := request.data.get("default_playlist_id"):
if default_playlist_id == "":
# "clear" the default_playlist_id if the field has no value
schedule.default_playlist_id = None
else:
schedule.default_playlist_id = int(default_playlist_id)
if is_repetition := request.data.get("is_repetition"):
if is_repetition == "true" or is_repetition == "1":
schedule.is_repetition = True
if is_repetition == "false" or is_repetition == "0":
schedule.is_repetition = False
if last_date := request.data.get("last_date"):
last_date = date.fromisoformat(last_date)
if schedule.last_date is None or schedule.last_date > last_date:
schedule.last_date = last_date
last_end = timezone.make_aware(
datetime.combine(last_date, schedule.end_time)
)
TimeSlot.objects.filter(schedule=schedule, start__gt=last_end).delete()
else:
return Response(status=status.HTTP_400_BAD_REQUEST)
schedule.save()
serializer = ScheduleSerializer(schedule)
return Response(serializer.data)
else:
return Response(status=status.HTTP_400_BAD_REQUEST)
# Only allow updating when with the `schedule` JSON object
if "schedule" not in request.data:
return Response(status=status.HTTP_400_BAD_REQUEST)
schedule = self.get_object()
# FIXME: this is redundant now and should be removed
# If default playlist id or repetition are given, just update
if default_playlist_id := request.data.get("schedule").get("default_playlist_id"):
schedule.default_playlist_id = int(default_playlist_id)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment