From 8aada4d93736393a1a7539b1ee4912b62a2a271b Mon Sep 17 00:00:00 2001
From: Fabian Sudau <fabian.sudau@sinc.de>
Date: Tue, 21 Jan 2025 15:57:24 +0100
Subject: [PATCH] feat: Add endpoints `PUT /v1/cases/{caseId}/callback` and
 `DELETE /v1/cases/{caseId}/callback` (planning#1668)

---
 CHANGELOG.md                             |   4 +
 spec/endpoints/cases/callback/index.yaml | 103 +++++++++++++++++++++++
 spec/submission-api.yaml                 |   3 +
 3 files changed, 110 insertions(+)
 create mode 100644 spec/endpoints/cases/callback/index.yaml

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 241043cc..e5cfd85f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -19,6 +19,10 @@ Don’t forget to tag @ https://git.fitko.de/fit-connect/submission-api/-/tags
 
 ## Unreleased
 
+### Added
+
+* Fügt die neuen Endpunkte `PUT /v1/cases/{caseId}/callback` und `DELETE /v1/cases/{caseId}/callback` hinzu ([planning#1668](https://git.fitko.de/fit-connect/planning/-/issues/1668)).
+
 ## [1.13.0]
 
 ### Added
diff --git a/spec/endpoints/cases/callback/index.yaml b/spec/endpoints/cases/callback/index.yaml
new file mode 100644
index 00000000..0395cd65
--- /dev/null
+++ b/spec/endpoints/cases/callback/index.yaml
@@ -0,0 +1,103 @@
+parameters:
+  - $ref: '../../../parameters/caseId.yaml'
+
+put:
+  operationId: put-callback
+  summary: Callback-Adresse und Secret des Case überschreiben
+  description: >
+    Onlinedienste (`sender`) können am Case eine Callback-URL und ein Secret hinterlegen, um über Ereignisse vom
+    Case informiert zu werden (siehe [Callbacks](https://docs.fitko.de/fit-connect/docs/details/callbacks/)).
+    Die beiden Felder können auch in der initialen Submission, welche den Case anlegt, angegeben werden.
+    Dieser Endpunkt dient lediglich dazu, den Callback eines bestehenden Case zu aktualisieren.
+    Zugriff ist nur demjenigen Client gestattet, der den Case angelegt hat.
+  tags:
+    - Vorgangsverwaltung
+  security:
+    - OAuth2:
+      - 'https://schema.fitko.de/fit-connect/oauth/scopes/send-submissions'
+  requestBody:
+    required: true
+    content:
+      application/json:
+        schema:
+          $ref: '../../../schemas/create-callback.yaml'
+  responses:
+    '204':
+      description: No Content - Aktualisierung erfolgreich
+      headers:
+        Cache-Control:
+          $ref: '../../../headers/cache-control-no-cache.yaml'
+    '400':
+      description: Bad Request
+      content:
+        application/problem+json:
+          schema:
+            $ref: '../../../schemas/error.yaml'
+    '401':
+      description: Unauthorized
+      content:
+        application/problem+json:
+          schema:
+            $ref: '../../../schemas/error.yaml'
+    '403':
+      description: Forbidden
+      content:
+        application/problem+json:
+          schema:
+            $ref: '../../../schemas/error.yaml'
+    '404':
+      description: Case not found
+      content:
+        application/problem+json:
+          schema:
+            $ref: '../../../schemas/error.yaml'
+    '422':
+      description: Bad Request
+      content:
+        application/problem+json:
+          schema:
+            $ref: '../../../schemas/error.yaml'
+delete:
+  operationId: delete-callback
+  summary: Callback des Case entfernen
+  description: >
+    Onlinedienste (`sender`) können am Case eine Callback-URL und ein Secret hinterlegen, um über Ereignisse vom
+    Case informiert zu werden (siehe [Callbacks](https://docs.fitko.de/fit-connect/docs/details/callbacks/)).
+    Falls am angegeben Case ein Callback gesetzt ist, entfernt ihn ein Aufruf dieses Endpunktes und
+    stellt damit Benachrichtigungen ab.
+    Zugriff ist nur demjenigen Client gestattet, der den Case angelegt hat.
+  tags:
+    - Vorgangsverwaltung
+  security:
+    - OAuth2:
+        - 'https://schema.fitko.de/fit-connect/oauth/scopes/send-submissions'
+  responses:
+    '204':
+      description: No Content - Entfernen erfolgreich
+      headers:
+        Cache-Control:
+          $ref: '../../../headers/cache-control-no-cache.yaml'
+    '400':
+      description: Bad Request
+      content:
+        application/problem+json:
+          schema:
+            $ref: '../../../schemas/error.yaml'
+    '401':
+      description: Unauthorized
+      content:
+        application/problem+json:
+          schema:
+            $ref: '../../../schemas/error.yaml'
+    '403':
+      description: Forbidden
+      content:
+        application/problem+json:
+          schema:
+            $ref: '../../../schemas/error.yaml'
+    '404':
+      description: Case not found
+      content:
+        application/problem+json:
+          schema:
+            $ref: '../../../schemas/error.yaml'
diff --git a/spec/submission-api.yaml b/spec/submission-api.yaml
index a9be4c86..98f64cc9 100644
--- a/spec/submission-api.yaml
+++ b/spec/submission-api.yaml
@@ -58,6 +58,9 @@ paths:
   /v1/cases/{caseId}/limits:
     $ref: './endpoints/cases/limits/index.yaml'
 
+  /v1/cases/{caseId}/callback:
+    $ref: './endpoints/cases/callback/index.yaml'
+
   /v1/cases/{caseId}:
     $ref: './endpoints/cases/uuid.yaml'
 
-- 
GitLab