From dc35e3d83059bb4251b92f4350d7ecf21fcb7e18 Mon Sep 17 00:00:00 2001
From: Ernesto Rico Schmidt <ernesto@helsinki.at>
Date: Fri, 9 Aug 2024 20:35:20 -0400
Subject: [PATCH] feat: add example requests & responses for create schedule
 view

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

diff --git a/program/views.py b/program/views.py
index 9a16798b..5257e209 100644
--- a/program/views.py
+++ b/program/views.py
@@ -771,10 +771,74 @@ class APIRRuleViewSet(viewsets.ModelViewSet):
 
 @extend_schema_view(
     create=extend_schema(
+        examples=[
+            OpenApiExample(
+                "Request to create a new schedule",
+                request_only=True,
+                value={
+                    "schedule": {
+                        "endTime": "09:00:00",
+                        "startTime": "08:00:00",
+                        "rruleId": 1,
+                        "showId": 10,
+                        "firstDate": "2024-08-12",
+                    }
+                },
+            ),
+            OpenApiExample(
+                "Request to simulate the creation of a new schedule",
+                request_only=True,
+                value={
+                    "schedule": {
+                        "endTime": "09:00:00",
+                        "dryrun": True,
+                        "startTime": "08:00:00",
+                        "rruleId": 1,
+                        "showId": 10,
+                        "firstDate": "2024-08-12",
+                    }
+                },
+            ),
+            OpenApiExample(
+                "Request to create a new schedule and solve a collision",
+                request_only=True,
+                value={
+                    "schedule": {
+                        "endTime": "09:00:00",
+                        "dryrun": True,
+                        "startTime": "08:00:00",
+                        "rruleId": 1,
+                        "showId": 10,
+                        "firstDate": "2024-08-12",
+                    },
+                    "solutions": {"2024081211000004002024081212000004001": "ours"},
+                },
+            ),
+        ],
         summary="Create a new schedule.",
         request=ScheduleCreateUpdateRequestSerializer,
         responses={
             status.HTTP_201_CREATED: OpenApiResponse(
+                examples=[
+                    OpenApiExample(
+                        "Successful creation if a new schedule",
+                        response_only=True,
+                        value={
+                            "addBusinessDaysOnly": False,
+                            "addDaysNo": None,
+                            "byWeekday": None,
+                            "defaultPlaylistId": None,
+                            "endTime": "09:00:00",
+                            "firstDate": "2024-08-12",
+                            "id": 11,
+                            "isRepetition": False,
+                            "lastDate": None,
+                            "rruleId": 1,
+                            "showId": 10,
+                            "startTime": "08:00:00",
+                        },
+                    )
+                ],
                 response=ScheduleResponseSerializer,
                 description=(
                     "Signals the successful creation of the schedule and of the projected "
@@ -782,6 +846,29 @@ class APIRRuleViewSet(viewsets.ModelViewSet):
                 ),
             ),
             status.HTTP_202_ACCEPTED: OpenApiResponse(
+                examples=[
+                    OpenApiExample(
+                        "Simulated creation of a new schedule",
+                        response_only=True,
+                        value={
+                            "create": [
+                                {
+                                    "end": "2024-08-12T09:00:00-04:00",
+                                    "id": None,
+                                    "memo": "",
+                                    "noteId": None,
+                                    "playlistId": None,
+                                    "repetitionOfId": None,
+                                    "scheduleId": None,
+                                    "showId": 10,
+                                    "start": "2024-08-12T08:00:00-04:00",
+                                }
+                            ],
+                            "delete": [],
+                            "update": [],
+                        },
+                    )
+                ],
                 response=ScheduleDryRunResponseSerializer,
                 description=(
                     "Returns the list of timeslots that would be created, updated and deleted if "
@@ -817,6 +904,59 @@ class APIRRuleViewSet(viewsets.ModelViewSet):
                 ),
             ),
             status.HTTP_409_CONFLICT: OpenApiResponse(
+                examples=[
+                    OpenApiExample(
+                        "Creation of a new schedule would create in a collision",
+                        response_only=True,
+                        value={
+                            "notes": {},
+                            "playlists": {},
+                            "projected": [
+                                {
+                                    "collisions": [
+                                        {
+                                            "end": "2024-08-12 17:00:00+00:00",
+                                            "memo": "",
+                                            "noteId": 694,
+                                            "playlistId": None,
+                                            "scheduleId": 7,
+                                            "showId": 6,
+                                            "showName": "EINS",
+                                            "start": "2024-08-12 14:00:00+00:00",
+                                            "timeslotId": 694,
+                                        }
+                                    ],
+                                    "end": "2024-08-12 12:00:00-04:00",
+                                    "error": None,
+                                    "hash": "2024081211000004002024081212000004001",
+                                    "solutionChoices": [
+                                        "ours-end",
+                                        "theirs",
+                                        "ours-start",
+                                        "ours",
+                                        "ours-both",
+                                    ],
+                                    "start": "2024-08-12 11:00:00-04:00",
+                                }
+                            ],
+                            "schedule": {
+                                "addBusinessDaysOnly": False,
+                                "addDaysNo": None,
+                                "byWeekday": None,
+                                "defaultPlaylistId": None,
+                                "endTime": "12:00:00",
+                                "firstDate": "2024-08-12",
+                                "id": None,
+                                "isRepetition": False,
+                                "lastDate": None,
+                                "rruleId": 1,
+                                "showId": 10,
+                                "startTime": "11:00:00",
+                            },
+                            "solutions": {"2024081211000004002024081212000004001": ""},
+                        },
+                    )
+                ],
                 response=ScheduleConflictResponseSerializer,
                 description=dedent(
                     """
-- 
GitLab