# Containerdiagramm

Deploybare Einheiten und ihre Laufzeit-Abhängigkeiten (C4-Ebene 2). „Container“ im C4-Sinn, nicht
zwingend ein Docker-Container — `procurex-app` läuft z. B. sowohl als lokal gestarteter JVM-Prozess
als auch als Docker-Image.

```mermaid
graph TB
    User["Browser<br/>(Einkäufer/Genehmiger/…)"]

    subgraph Deploy["Deploybare PROCUREX-Artefakte"]
        FE["procurex-frontend<br/>Angular-22-SPA, Nginx-Image<br/>Port 80 (intern)"]
        App["procurex-app<br/>Spring-Boot-Fat-JAR, Java 17<br/>bindet alle Bounded-Context-Module<br/>Port 8080 (intern)"]
    end

    subgraph Ext["Externe Bausteine (enterprise-infrastructure)"]
        Traefik["Traefik<br/>procurex.localhost / procurex-api.localhost"]
        KC["Keycloak<br/>Realm procurex"]
        PG[("PostgreSQL 16<br/>DB procurex, ein Schema je Modul")]
        KF["Kafka<br/>procurex.*.v1 Topics"]
    end

    User -->|"https://procurex.localhost"| Traefik
    Traefik -->|Routing nach Host-Label| FE
    Traefik -->|"https://procurex-api.localhost/api/v1"| App
    FE -->|"fetch() /api/v1/..."| Traefik
    FE -->|OIDC Redirect| KC
    App -->|Bearer-Token-Validierung| KC
    App -->|JDBC| PG
    App -->|Outbox-Relay publiziert| KF
    KF -->|konsumiert 6 Topics| App

    note1["procurex-audit und procurex-notification<br/>sind Module INNERHALB von procurex-app,<br/>keine eigenen Deployments (Monolith, siehe ADR-0001)"]
```

**Anmerkung Kafka-Pfeil:** Der Pfeil „KF → App“ bildet ab, dass `procurex-app` (genauer: die
darin gebündelten Module `procurex-audit` und `procurex-notification`) dieselben Topics auch
konsumiert, die es selbst über den Outbox-Relay publiziert — es gibt keinen zweiten Prozess.

## Deploy-Artefakte im Detail

| Artefakt | Woraus gebaut | Wie deploybar |
|---|---|---|
| `procurex-app` | Maven-Reactor, Module siehe [bounded-context-map.md](bounded-context-map.md) | `procurex-app/Dockerfile` (Multi-Stage) oder `mvn spring-boot:run` |
| `procurex-frontend` | Angular-CLI-Build (`ng build`) | `procurex-frontend/Dockerfile` (Multi-Stage, Nginx) |

Quelle: `docker-compose.yml`, `procurex-app/Dockerfile`, `procurex-frontend/Dockerfile`.
