diff --git a/README.md b/README.md index 9e2d81a9d779ab9b7ea0397ce5850415a1ea9998..e985ee9b22ca218b162d77b737a426b0feb5acbd 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