meldestelle/docs/01_Architecture/c4/container_diagram.drawio
Stefan Mogeritsch 276e3cc3dd docs(c4): migrate architecture diagrams to draw.io and refine container/workflow visualizations
- Replaced outdated `.puml` and `.mermaid` diagrams with modernized `.drawio` versions for enhanced clarity.
- Added `container_diagram.drawio` to depict offline-first architecture and backend synchronization workflow.
- Introduced `workflow_turnieranlage.drawio` to visualize the tournament creation process (3-step wizard).
- Archived legacy diagrams under `docs/01_Architecture/_archive` for reference.
2026-04-09 11:32:06 +02:00

67 lines
5.1 KiB
Plaintext

<mxfile host="Electron" modified="2026-04-07T12:00:00.000Z" agent="Lead Architect" version="21.0.0" type="device">
<diagram id="c4-container" name="C4 Container Diagram">
<mxGraphModel dx="1200" dy="800" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="user" value="Veranstalter /&#10;Meldestelle" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" vertex="1" parent="1">
<mxGeometry x="40" y="240" width="30" height="60" as="geometry" />
</mxCell>
<!-- KMP Desktop App Container -->
<mxCell id="container_app" value="&lt;b&gt;Desktop-Anwendung (Offline-First)&lt;/b&gt;&lt;br&gt;&lt;i&gt;Kotlin, Compose Multiplatform&lt;/i&gt;&lt;br&gt;&lt;br&gt;Bietet die gesamte Meldestellen-Oberfläche, offline-fähig." style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;verticalAlign=top;align=left;spacingTop=4;spacingLeft=8;" vertex="1" parent="1">
<mxGeometry x="160" y="200" width="280" height="120" as="geometry" />
</mxCell>
<!-- Local DB -->
<mxCell id="db_local" value="&lt;b&gt;Lokale Datenbank&lt;/b&gt;&lt;br&gt;&lt;i&gt;SQLite / Room&lt;/i&gt;&lt;br&gt;&lt;br&gt;Speichert alle Turniere, Nennungen lokal für den Offline-Betrieb." style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#ffe6cc;strokeColor=#d79b00;align=left;spacingTop=4;spacingLeft=8;" vertex="1" parent="1">
<mxGeometry x="200" y="400" width="200" height="100" as="geometry" />
</mxCell>
<!-- Backend System Boundary -->
<mxCell id="system_backend" value="Cloud Backend / API" style="swimlane;whiteSpace=wrap;html=1;startSize=30;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" vertex="1" parent="1">
<mxGeometry x="600" y="80" width="360" height="460" as="geometry" />
</mxCell>
<!-- Backend Containers -->
<mxCell id="container_api" value="&lt;b&gt;REST API Services&lt;/b&gt;&lt;br&gt;&lt;i&gt;Ktor / Spring Boot&lt;/i&gt;&lt;br&gt;&lt;br&gt;Bietet die Synchronisations-Schnittstellen für die Desktop-App." style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;verticalAlign=top;align=left;spacingTop=4;spacingLeft=8;" vertex="1" parent="system_backend">
<mxGeometry x="40" y="60" width="280" height="120" as="geometry" />
</mxCell>
<!-- Remote DB -->
<mxCell id="db_remote" value="&lt;b&gt;Zentrale Datenbank&lt;/b&gt;&lt;br&gt;&lt;i&gt;PostgreSQL&lt;/i&gt;&lt;br&gt;&lt;br&gt;Speichert alle Mandanten und Stammdaten." style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#ffe6cc;strokeColor=#d79b00;align=left;spacingTop=4;spacingLeft=8;" vertex="1" parent="system_backend">
<mxGeometry x="80" y="260" width="200" height="100" as="geometry" />
</mxCell>
<!-- External -->
<mxCell id="ext_zns" value="&lt;b&gt;ZNS (OEPS)&lt;/b&gt;&lt;br&gt;&lt;br&gt;Externe Stammdaten (ZIP) und Nennungen (DAT)." style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;verticalAlign=top;align=left;spacingTop=4;spacingLeft=8;" vertex="1" parent="1">
<mxGeometry x="1040" y="140" width="200" height="100" as="geometry" />
</mxCell>
<!-- Edges -->
<mxCell id="e_user_app" value="nutzt" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=0.5;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="user" target="container_app">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e_app_local" value="liest/schreibt" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="container_app" target="db_local">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e_app_api" value="synchronisiert via HTTPS" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="container_app" target="container_api">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e_api_db" value="liest/schreibt" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="system_backend" source="container_api" target="db_remote">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e_zns_app" value="Upload (ZIP/DAT)" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;entryX=1;entryY=0.25;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="ext_zns" target="container_app">
<mxGeometry relative="1" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>