# Architektur-Überblick

Diese Übersicht beschreibt den Stand der D-DOK-Komponenten (Release 0.0.7, in Entwicklung 0.0.8). Quelle: [git.agrarforschung.at/ddok/ddok](https://git.agrarforschung.at/ddok/ddok).

### Architektur-Diagramm

```mermaid
flowchart LR
  subgraph Client["Browser-Client"]
    NG["Angular 21 SPA<br></br>(client/)"]
  end

  subgraph Server["D-DOK Server (Node.js)"]
    API["Express + Inversify<br></br>(server/)"]
    PDF["PDF-Parse Worker<br></br>(modules/pdfparse)"]
  end

  subgraph DBs["Datenbanken (lokal)"]
    MY[("MySQL<br></br>Projekte / Publikationen<br></br>Metadaten")]
    MO[("MongoDB 7.0<br></br>PDF-Dateien + Volltext")]
  end

  subgraph DESS["D-ESS"]
    DESSDB[("MySQL<br></br>Kostentraeger / Benutzer:innen")]
  end

  subgraph Auth["Authentifizierung"]
    AD["Active Directory<br></br>(LDAPS)"]
    KC["Keycloak OIDC<br></br>sso.agrarforschung.at"]
  end

  subgraph Web["BAB Website (0.0.8)"]
    WEBMY[("MySQL<br></br>WEB_DATABASE")]
    WEBMO[("MongoDB<br></br>WEB_MONGO")]
    SITE["bab.gv.at Public-Frontend"]
  end

  NG -- HTTPS --> API
  API --> MY
  API --> MO
  API -- Lookup --> DESSDB
  API -. optional .-> AD
  API -. optional .-> KC
  API -- "Sync (0.0.8)" --> WEBMY
  API -- "Sync (0.0.8)" --> WEBMO
  WEBMY --> SITE
  WEBMO --> SITE
  PDF --> MO

  classDef new fill:#e8f5e9,stroke:#388e3c
  class WEBMY,WEBMO,SITE,Web new

```

### Komponenten im Überblick

<table id="bkmrk-komponentestackquell" style="border-collapse:collapse;width:100%;"><thead><tr style="background:#f0f0f0;"><th>Komponente</th><th>Stack</th><th>Quelle</th></tr></thead><tbody><tr><td>Frontend (SPA)</td><td>Angular 21 (seit 0.0.8, vorher Angular 17) · Wijmo · Quill-Editor</td><td>`client/`</td></tr><tr><td>Backend-API</td><td>Node.js · Express · Inversify (DI) · TypeScript</td><td>`server/`</td></tr><tr><td>PDF-Parser</td><td>Worker für Volltext-Extraktion aus PDF-Dateien</td><td>`modules/pdfparse/`</td></tr><tr><td>Relationale DB</td><td>MySQL 3306 — Projekte, Publikationen, Stammdaten</td><td>D-DOK eigene DB</td></tr><tr><td>Dokumenten-DB</td><td>MongoDB 7.0 (Port 27017) — PDF-Binaries + Volltext-Index</td><td>D-DOK eigene DB</td></tr><tr><td>D-ESS-Anbindung</td><td>Read-only Zugriff auf D-ESS-Datenbank für Kostentraeger/KS/KT und Benutzer:innen-Stammdaten</td><td>`DESS_LINK_ENABLED=true`</td></tr><tr><td>Authentifizierung</td><td>Lokal · Active Directory (LDAPS) · Keycloak OIDC (Realm `ddok` auf sso.agrarforschung.at)</td><td>Konfiguration in `server/config/config.js`</td></tr><tr><td>Website-Sync (NEU 0.0.8)</td><td>Zusaetzliche MySQL- und MongoDB-Verbindung zur oeffentlichen BAB-Website — Export ausgewählter Publikationen</td><td>`WEB_DATABASE_*` + `WEB_MONGO_DATABASE_*`</td></tr></tbody></table>

### Deployment

- **Server:** Dedizierter Anwendungsserver (Debian) mit Node.js, lokaler MySQL- und MongoDB-Instanz.
- **SSO-Integration:** Keycloak-Realm `ddok` (vgl. Eintrag in der *SSO-Anwendungsliste* auf `sso.agrarforschung.at`).
- **Build:** `npm run build` — baut Client, Server (via esbuild) und PDF-Parser-Modul; Docker-Image via `Dockerfile` im Repo-Root.
- **CI/CD:** `.gitlab-ci.yml` im D-DOK-Repository.

### Datenfluesse

1. **Projekt-/Publikationsanlage:** Benutzer:innen erstellen Projekte und Publikationen im Angular-Frontend; Daten werden in der MySQL-DB persistiert.
2. **PDF-Upload:** Hochgeladene Dateien werden in MongoDB gespeichert; ein PDF-Parser-Worker extrahiert den Volltext für die Suche.
3. **D-ESS-Lookup:** Kostenstellen, Kostentraeger und Benutzer:innen-Stammdaten werden zur Laufzeit aus der D-ESS-Datenbank gelesen.
4. **Website-Export (0.0.8):** Freigegebene Publikationen werden in die separate Website-Datenbank synchronisiert und auf der oeffentlichen BAB-Website angezeigt.

---

*Letzte Aktualisierung: 2026-05-23 · Pflege: Roland Neissl · Quelle: [git.agrarforschung.at/ddok/ddok](https://git.agrarforschung.at/ddok/ddok)*