From e3aab096b9ca7f906b193f6b899d589694bcdf5e Mon Sep 17 00:00:00 2001
From: Ernesto Rico Schmidt <ernesto@helsinki.at>
Date: Fri, 13 Sep 2024 16:30:56 -0400
Subject: [PATCH] fix: handle missing schedule fields and provide data on bad
 requests

---
 program/views.py | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/program/views.py b/program/views.py
index 7ccb56b0..bb90583d 100644
--- a/program/views.py
+++ b/program/views.py
@@ -1186,12 +1186,25 @@ class APIScheduleViewSet(viewsets.ModelViewSet):
         them including notes.
         """
 
+        required_schedule_fields = {"end_time", "first_date", "rrule_id", "start_time"}
+
         if not self.request.user.has_perm("program.change_schedule"):
             return Response(status=status.HTTP_401_UNAUTHORIZED)
 
         if "schedule" not in self.request.data:
             return Response(status=status.HTTP_400_BAD_REQUEST)
 
+        schedule_fields = set(self.request.data["schedule"].keys())
+
+        if missing_fields := required_schedule_fields.difference(schedule_fields):
+            data = {
+                "schedule": {
+                    field: "This field is required in a PUT request" for field in missing_fields
+                }
+            }
+
+            return Response(data, status=status.HTTP_400_BAD_REQUEST)
+
         schedule = self.get_object()
 
         try:
-- 
GitLab