From 2d2f1aa025f774211b876b79b047a088bf46ecbd Mon Sep 17 00:00:00 2001
From: Jan Zickermann <jan.zickermann@dataport.de>
Date: Thu, 6 Mar 2025 15:40:08 +0100
Subject: [PATCH] OZG-4097 readme: Add sequence diagrams for send and receive

---
 README.md | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 98 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 9e2d81a..e985ee9 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,105 @@
 # OSIv2-Postfach-Anbindung für OZG-Cloud-Nachrichten
 
-Anbindung des OSIv2-Postfachs für die OZG-Cloud.
+Senden und Empfangen von Postfach-Nachrichten über die OSI-Postfach-Facade 2.0 (OPF).
 
+## Senden einer Postfach-Nachricht
 
+```mermaid
+%% Senden einer Nachricht
+  sequenceDiagram
+    participant N as nachrichten-manager
+    participant A as file-manager
+    participant B as Client
+    participant C as OPF
+    activate A
+    activate C
+    activate B
+    activate N
+    N->>B: OsiPostfachRemoteService::sendMessage
+    Note left of B: (1) Hochladen der Anhänge
+    B->>A: GRPC findBinaryFilesMetaData
+    A-->>B: {Liste an Anhang-Metadaten}
+    loop Für jeden Anhang
+      B->>A: GRPC GetBinaryFileContent
+      loop Für jeden Daten-Chunk
+        B->>C: POST /Quarantine/v1/Upload/Chunked (chunk) 
+        C-->>B: 
+      end
+      A-->>B: 
+      B->>C: POST /Quarantine/v1/Upload/Chunked (empty chunk)
+      C-->>B: 
+    end
+    deactivate A
+    Note left of B: (2) Warten auf Prüfung der hochgeladenen Anhänge
+    loop Regelmäßiges Polling bis alle Anhänge geprüft sind
+      loop Für alle Anhänge
+        B->>C: GET /Quarantine/v1/Upload/{guid}
+        C-->>B:  
+      end
+    end
+    Note left of B: (3) Nachricht senden
+    B->>C: POST /MessageExchange/v1/Send/{mailboxId}
+    C-->>B: 
+    deactivate C
+    B-->>N: 
+    deactivate B
+    deactivate N
+```
+
+## Empfangen von Postfach-Nachrichten
+
+```mermaid
+%% Empfangen einer Nachricht
+  sequenceDiagram
+    participant N as nachrichten-manager
+    participant A as file-manager
+    participant B as Client
+    participant C as OPF
+    activate A
+    activate C
+    activate B
+    activate N
+    N->>B: OsiPostfachRemoteService::receiveMessages
+    B->>C: GET /MessageExchange/v1/Receive
+    C-->>B: {Liste an Nachrichten-Kennungen (max 100)}
+    loop Für jede Nachrichten-Kennung (messageId)
+      Note left of B: (1) Nachricht abrufen
+      B->>C: GET /MessageExchange/v1/Receive/{messageId}
+      C-->>B: {Nachricht mit Anhang-Metadaten}
+      Note left of B: (2) Herunterladen der Anhänge
+      loop Für jeden Anhang
+        B->>C: GET /MessageExchange/v1/Receive/{messageId}/Attachment/{attachmentId}
+        B->>A: GRPC UploadBinaryFileAsStream
+        A-->>B: 
+        C-->>B: 
+      end
+    end
+    deactivate A
+    deactivate C
+    B->>N: {Stream an Postfach-Nachrichten}
+    deactivate B
+    deactivate N
+```
+
+Der nachrichten-manager erhält von osiv2-postfach einen Stream von Postfach-Nachrichten. Nach der erfolgreichen Verarbeitung einer Nachricht sollte er `OsiPostfachRemoteService::deleteMessage` aufrufen:
+
+```mermaid
+%% Empfangen einer Nachricht
+  sequenceDiagram
+    participant N as nachrichten-manager
+    participant B as Client
+    participant C as OPF
+    activate C
+    activate B
+    activate N
+    N->>B: OsiPostfachRemoteService::deleteMessage
+    B->>C: GET /MessageExchange/v1/Delete/{messageId}
+    C->>B: 
+    deactivate C
+    B-->>N: 
+    deactivate B
+    deactivate N
+```
 
 ## Client-Authentifizierung beim Servicekonto
 
-- 
GitLab