From 35f8b46e6c58113b4f35509309ee5591af032c22 Mon Sep 17 00:00:00 2001 From: StefanMoCoAt Date: Fri, 3 Apr 2026 21:48:32 +0200 Subject: [PATCH] Archive outdated journal logs and documents. Add Postman Runbook structure and centralize API testing documentation. Update Flyway configuration for ping-service with service-specific schema history. --- .../src/main/resources/application.yaml | 3 + .../Postman_Tests_Dokumentation.md | 111 +--------- .../Postman_Tests_Dokumentation_2026-04-03.md | 17 ++ .../05_Backend/Guides/Testing_with_Postman.md | 167 +------------- .../Services/PingService_Reference.md | 4 +- .../runbooks/POSTMAN_API_Tests_Runbook.md | 206 ++++++++++++++++++ docs/07_Infrastructure/runbooks/README.md | 20 ++ ...sion_Log_Postman_Runbook_Konsolidierung.md | 23 ++ .../2026-01-30_Refactoring_Exposed_Ktor.md | 0 ...6-01-31_Session_Log_E2E_Smoke_Migration.md | 0 ...6-02-03_Session_Log_Docker_Build_Issues.md | 0 ...6-02-03_Session_Log_Gradle_Optimization.md | 0 .../2026-02-04_Infrastructure_Setup_Plan.md | 0 .../2026-02-04_Ping_Service_Verification.md | 0 ...6-02-04_Session_Log_Docker_Hybrid_Build.md | 0 .../2026-02-06_Infrastructure_Planning.md | 0 docs/99_Journal/{ => _archive}/2026-02-13.md | 0 ...6-03-06_Session_Log_DevOps_und_AI_Stack.md | 0 ...3-06_Session_Log_Immich_Pangolin_Config.md | 0 .../2026-03-06_Session_Log_Keycloak_Fix.md | 0 ...2026-03-06_Session_Log_Pipeline_502_Fix.md | 0 .../2026-03-06_Session_Log_Pipeline_Fix_v2.md | 0 .../2026-03-06_Session_Log_Pipeline_Fix_v3.md | 0 .../2026-03-06_Session_Log_Pipeline_Gruen.md | 0 ...026-03-06_Session_Log_Proxmox_Korrektur.md | 0 ...-03-06_Session_Log_Uebersetzung_Deutsch.md | 0 ...26-03-06_Session_Log_Zora_Konfiguration.md | 0 ...7_Session_Log_TechStack_Zusammenfassung.md | 0 ...ssion_Log_Zora_Hardware_Zusammenfassung.md | 0 ...026-03-09_Session_Log_Keycloak_Haertung.md | 0 ...03-10_Session_Log_Keycloak_Hostname_Fix.md | 0 .../2026-03-11_Session_Log_Pangolin_Update.md | 0 ...03-15_Session_Log_Dokumentation_Cleanup.md | 0 ...6-03-16_Session_Log_Architect_Readiness.md | 0 ...026-03-16_Session_Log_Backend_Readiness.md | 0 ...026-03-16_Session_Log_Curator_Readiness.md | 0 ...026-03-16_Session_Log_Fix_SQLite_Worker.md | 0 ...26-03-16_Session_Log_Frontend_Readiness.md | 0 ...3-16_Session_Log_Infrastruktur_Freigabe.md | 0 .../2026-03-16_Session_Log_QA_Readiness.md | 0 .../2026-03-16_Session_Log_UIUX_Readiness.md | 0 ...Session_Log_Domain_und_Frontend_Kickoff.md | 0 ...9_Session_Log_Frontend_Transfer_Offline.md | 0 ...6-03-19_Session_Log_POC_Rollen_Keycloak.md | 0 .../2026-03-24_Session_Log_ADR_Context_Map.md | 0 .../2026-03-24_Session_Log_API_Design_ACL.md | 0 ...Session_Log_Actor_Context_Domain_Models.md | 0 ...-24_Session_Log_DDD_Ubiquitous_Language.md | 0 .../2026-03-24_Session_Log_Desktop_Shell.md | 0 ..._Event_Management_Context_Domain_Models.md | 0 ...2026-03-24_Session_Log_Nennung_REST_API.md | 0 ...n_Log_Persistenz_Repository_Migrationen.md | 0 ..._Log_Registration_Context_Domain_Models.md | 0 ...24_Session_Log_Warn-Logik-Spezifikation.md | 0 .../2026-03-25_Playbook_Audit.md | 0 ..._Session_Log_CAN_Starter-Schwellenwerte.md | 0 ...sion_Log_CVN_Abteilungs-Trennungsregeln.md | 0 ...on_Log_Frontend_Architektur_Bereinigung.md | 0 ...-03-26_Session_Log_Architektur_Refactor.md | 0 ...26-03-26_Session_Log_Figma_Konformitaet.md | 0 ...26_Session_Log_Figma_Konformitaet_Teil2.md | 0 ...3-26_Session_Log_Screens_Reorganisation.md | 0 .../2026-03-26_Session_Log_Struktur_Sprint.md | 0 ...-03-28_Session_Log_Masterdata_Build_Fix.md | 0 .../2026-03-28_Session_Log_Metaspace_Fix.md | 0 ...26-03-28_Session_Log_Ping_Migration_Fix.md | 0 ...2026-03-28_Session_Log_TabRow_Migration.md | 0 ...30_Session_Log_Masterdata_C-NEU_Classes.md | 0 ..._Masterdata_Funktionaer_Qualifikationen.md | 0 ...Session_Log_Masterdata_Gebuehrenordnung.md | 0 ...ssion_Log_Masterdata_OETO_Consolidation.md | 0 ...Session_Log_Masterdata_Pferdepruefungen.md | 0 ...g_Masterdata_Pferdepruefungen_Bewertung.md | 0 ...026-03-30_Session_Log_Masterdata_README.md | 0 ..._Session_Log_Masterdata_Reiter_Lizenzen.md | 0 ...ession_Log_Masterdata_Reiter_Pruefungen.md | 0 ...026-03-30_Session_Log_ZNS_Documentation.md | 0 ...-03-31_Session_Log_Event_First_Workflow.md | 0 78 files changed, 291 insertions(+), 260 deletions(-) create mode 100644 docs/04_Agents/_archive/Postman_Tests_Dokumentation_2026-04-03.md create mode 100644 docs/07_Infrastructure/runbooks/POSTMAN_API_Tests_Runbook.md create mode 100644 docs/07_Infrastructure/runbooks/README.md create mode 100644 docs/99_Journal/2026-04-03_Session_Log_Postman_Runbook_Konsolidierung.md rename docs/99_Journal/{ => _archive}/2026-01-30_Refactoring_Exposed_Ktor.md (100%) rename docs/99_Journal/{ => _archive}/2026-01-31_Session_Log_E2E_Smoke_Migration.md (100%) rename docs/99_Journal/{ => _archive}/2026-02-03_Session_Log_Docker_Build_Issues.md (100%) rename docs/99_Journal/{ => _archive}/2026-02-03_Session_Log_Gradle_Optimization.md (100%) rename docs/99_Journal/{ => _archive}/2026-02-04_Infrastructure_Setup_Plan.md (100%) rename docs/99_Journal/{ => _archive}/2026-02-04_Ping_Service_Verification.md (100%) rename docs/99_Journal/{ => _archive}/2026-02-04_Session_Log_Docker_Hybrid_Build.md (100%) rename docs/99_Journal/{ => _archive}/2026-02-06_Infrastructure_Planning.md (100%) rename docs/99_Journal/{ => _archive}/2026-02-13.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-06_Session_Log_DevOps_und_AI_Stack.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-06_Session_Log_Immich_Pangolin_Config.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-06_Session_Log_Keycloak_Fix.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-06_Session_Log_Pipeline_502_Fix.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-06_Session_Log_Pipeline_Fix_v2.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-06_Session_Log_Pipeline_Fix_v3.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-06_Session_Log_Pipeline_Gruen.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-06_Session_Log_Proxmox_Korrektur.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-06_Session_Log_Uebersetzung_Deutsch.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-06_Session_Log_Zora_Konfiguration.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-07_Session_Log_TechStack_Zusammenfassung.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-07_Session_Log_Zora_Hardware_Zusammenfassung.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-09_Session_Log_Keycloak_Haertung.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-10_Session_Log_Keycloak_Hostname_Fix.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-11_Session_Log_Pangolin_Update.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-15_Session_Log_Dokumentation_Cleanup.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-16_Session_Log_Architect_Readiness.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-16_Session_Log_Backend_Readiness.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-16_Session_Log_Curator_Readiness.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-16_Session_Log_Fix_SQLite_Worker.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-16_Session_Log_Frontend_Readiness.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-16_Session_Log_Infrastruktur_Freigabe.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-16_Session_Log_QA_Readiness.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-16_Session_Log_UIUX_Readiness.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-18_Session_Log_Domain_und_Frontend_Kickoff.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-19_Session_Log_Frontend_Transfer_Offline.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-19_Session_Log_POC_Rollen_Keycloak.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-24_Session_Log_ADR_Context_Map.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-24_Session_Log_API_Design_ACL.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-24_Session_Log_Actor_Context_Domain_Models.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-24_Session_Log_DDD_Ubiquitous_Language.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-24_Session_Log_Desktop_Shell.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-24_Session_Log_Event_Management_Context_Domain_Models.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-24_Session_Log_Nennung_REST_API.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-24_Session_Log_Persistenz_Repository_Migrationen.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-24_Session_Log_Registration_Context_Domain_Models.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-24_Session_Log_Warn-Logik-Spezifikation.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-25_Playbook_Audit.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-25_Session_Log_CAN_Starter-Schwellenwerte.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-25_Session_Log_CVN_Abteilungs-Trennungsregeln.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-25_Session_Log_Frontend_Architektur_Bereinigung.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-26_Session_Log_Architektur_Refactor.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-26_Session_Log_Figma_Konformitaet.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-26_Session_Log_Figma_Konformitaet_Teil2.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-26_Session_Log_Screens_Reorganisation.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-26_Session_Log_Struktur_Sprint.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-28_Session_Log_Masterdata_Build_Fix.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-28_Session_Log_Metaspace_Fix.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-28_Session_Log_Ping_Migration_Fix.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-28_Session_Log_TabRow_Migration.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-30_Session_Log_Masterdata_C-NEU_Classes.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-30_Session_Log_Masterdata_Funktionaer_Qualifikationen.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-30_Session_Log_Masterdata_Gebuehrenordnung.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-30_Session_Log_Masterdata_OETO_Consolidation.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-30_Session_Log_Masterdata_Pferdepruefungen.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-30_Session_Log_Masterdata_Pferdepruefungen_Bewertung.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-30_Session_Log_Masterdata_README.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-30_Session_Log_Masterdata_Reiter_Lizenzen.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-30_Session_Log_Masterdata_Reiter_Pruefungen.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-30_Session_Log_ZNS_Documentation.md (100%) rename docs/99_Journal/{ => _archive}/2026-03-31_Session_Log_Event_First_Workflow.md (100%) diff --git a/backend/services/ping/ping-service/src/main/resources/application.yaml b/backend/services/ping/ping-service/src/main/resources/application.yaml index b6cb4cca..f4c6e7d1 100644 --- a/backend/services/ping/ping-service/src/main/resources/application.yaml +++ b/backend/services/ping/ping-service/src/main/resources/application.yaml @@ -26,6 +26,9 @@ spring: enabled: true # Erlaubt die Migration, auch wenn DB nicht leer ist (wichtig für Dev) baseline-on-migrate: true + baseline-version: "0" + # Verwende eine eigene Historientabelle, da wir in einer geteilten DB arbeiten (Schema "public") + table: flyway_schema_history_ping # Sucht standardmäßig in classpath:db/migration security: diff --git a/docs/04_Agents/Besprechung_2026-04-03/Postman_Tests_Dokumentation.md b/docs/04_Agents/Besprechung_2026-04-03/Postman_Tests_Dokumentation.md index 53e28e20..c41e561d 100644 --- a/docs/04_Agents/Besprechung_2026-04-03/Postman_Tests_Dokumentation.md +++ b/docs/04_Agents/Besprechung_2026-04-03/Postman_Tests_Dokumentation.md @@ -1,109 +1,20 @@ -# 🧪 Postman Tests — Vollständige Dokumentation - -> **Stand:** 3. April 2026 -> **Erstellt von:** 👷 Backend Developer & 🧐 QA Specialist -> **Collection-Datei:** -`backend/infrastructure/gateway/src/main/resources/static/docs/postman/Meldestelle_API_Collection.json` - --- - -## Inhaltsverzeichnis - -1. [Setup & Variablen](#1-setup--variablen) -2. [Smoke-Tests: System & Health](#2-smoke-tests-system--health) -3. [Ping Service](#3-ping-service) -4. [Authentication Context](#4-authentication-context) -5. [Master Data: Countries](#5-master-data-countries) -6. [Horse Registry (Pferde)](#6-horse-registry-pferde) -7. [ZNS Import Service](#7-zns-import-service) -8. [Empfohlene Test-Reihenfolge](#8-empfohlene-test-reihenfolge) - +type: Note +status: REDIRECT +owner: Curator +last_update: 2026-04-03 --- +# 🧪 Postman Tests — Vollständige Dokumentation (verschoben) -## 1. Setup & Variablen +Diese ausführliche Arbeitsversion wurde konsolidiert und in das zentrale Runbook für Betriebsanleitungen überführt. -### Collection importieren +Aktuelle Fassung: +- `docs/07_Infrastructure/runbooks/POSTMAN_API_Tests_Runbook.md` -1. Postman öffnen → **Import** → Datei auswählen: - ``` - backend/infrastructure/gateway/src/main/resources/static/docs/postman/Meldestelle_API_Collection.json - ``` -2. Collection `Meldestelle API Collection` erscheint im linken Panel. +Archiv: +- Zusammenfassung im Archiv: `docs/04_Agents/_archive/Postman_Tests_Dokumentation_2026-04-03.md` -### Environment-Variablen anlegen - -In Postman ein **Environment** `Meldestelle Local` anlegen mit folgenden Variablen: - -| Variable | Initial Value | Beschreibung | -|-------------|-------------------------|------------------------------------| -| `baseUrl` | `http://localhost:8081` | API-Gateway (Haupt-Einstiegspunkt) | -| `pingUrl` | `http://localhost:8082` | Ping-Service direkt (ohne Gateway) | -| `znsUrl` | `http://localhost:8095` | ZNS-Import-Service direkt | -| `authToken` | *(leer, wird befüllt)* | JWT-Token nach Login | -| `horseId` | *(leer, wird befüllt)* | ID eines angelegten Pferdes | -| `countryId` | *(leer, wird befüllt)* | ID eines angelegten Landes | -| `horseId1` | *(leer)* | Für Batch-Delete Tests | -| `horseId2` | *(leer)* | Für Batch-Delete Tests | - -> ⚠️ **Wichtig:** Sicherstellen dass alle Services laufen bevor Tests gestartet werden (siehe Betriebsanleitung). - ---- - -## 2. Smoke-Tests: System & Health - -> **Zweck:** Schnell prüfen ob das API-Gateway und alle Services erreichbar sind. Immer zuerst ausführen! - ---- - -### 2.1 API Gateway Info - -| Feld | Wert | -|-------------|----------------| -| **Methode** | `GET` | -| **URL** | `{{baseUrl}}/` | -| **Auth** | Keine | - -**Erwartete Antwort:** `200 OK` - -```json -{ - "service": "Meldestelle API Gateway", - "version": "...", - "status": "running" -} -``` - -**Wozu:** Bestätigt dass das Gateway läuft und auf Anfragen antwortet. - ---- - -### 2.2 Health Check (Gateway) - -| Feld | Wert | -|-------------|----------------------| -| **Methode** | `GET` | -| **URL** | `{{baseUrl}}/health` | -| **Auth** | Keine | - -**Erwartete Antwort:** `200 OK` - -```json -{ - "status": "UP" -} -``` - ---- - -### 2.3 API Documentation - -| Feld | Wert | -|-------------|-------------------| -| **Methode** | `GET` | -| **URL** | `{{baseUrl}}/api` | -| **Auth** | Keine | - -**Erwartete Antwort:** `200 OK` — OpenAPI JSON-Dokumentation +Hinweis: Diese Datei bleibt als Weiterleitung bestehen, damit bestehende Links nicht brechen. --- diff --git a/docs/04_Agents/_archive/Postman_Tests_Dokumentation_2026-04-03.md b/docs/04_Agents/_archive/Postman_Tests_Dokumentation_2026-04-03.md new file mode 100644 index 00000000..d9bf7d91 --- /dev/null +++ b/docs/04_Agents/_archive/Postman_Tests_Dokumentation_2026-04-03.md @@ -0,0 +1,17 @@ +--- +type: Archive +status: ARCHIVED +owner: QA Specialist +last_update: 2026-04-03 +--- +# 🧪 Postman Tests — Vollständige Dokumentation (ARCHIV) + +Diese ausführliche Arbeitsversion wurde am 03.04.2026 im Rahmen einer QA/Backend‑Session erstellt. +Sie wurde inzwischen zu einem leicht verständlichen, zentralen Runbook konsolidiert. + +Aktuelle Fassung: +- `docs/07_Infrastructure/runbooks/POSTMAN_API_Tests_Runbook.md` + +Hinweis: +- Diese Archivdatei behält keinen Volltext der alten Fassung, um Duplikate zu vermeiden. +- Alle relevanten Inhalte sind im Runbook enthalten bzw. wurden aktualisiert. diff --git a/docs/05_Backend/Guides/Testing_with_Postman.md b/docs/05_Backend/Guides/Testing_with_Postman.md index 6ab5e334..949de52f 100644 --- a/docs/05_Backend/Guides/Testing_with_Postman.md +++ b/docs/05_Backend/Guides/Testing_with_Postman.md @@ -1,167 +1,18 @@ --- type: Guide -status: ACTIVE -owner: Backend Developer +status: REDIRECT +owner: Curator tags: [testing, postman, backend, api] -last_update: 2026-03-15 +last_update: 2026-04-03 --- -# 🧪 Testanleitung: Ping-Service & Gateway mit Postman +# 🧪 Testanleitung: Ping‑Service & Gateway mit Postman (Weiterleitung) -Diese Anleitung beschreibt, wie die Backend-Services (Gateway, Ping-Service) und die Infrastruktur (Keycloak, DB) isoliert vom Frontend getestet werden können. +Diese Seite wurde in ein zentrales Runbook für Betriebsanleitungen überführt. -**Voraussetzungen:** -1. **Infrastruktur läuft:** `docker compose --profile infra up -d` (Postgres, Keycloak, Redis, Consul). -2. **Backend läuft:** `docker compose --profile backend up -d` (Gateway, Ping-Service). -3. **Postman** ist installiert. +Bitte nutze ab sofort das konsolidierte Runbook: ---- +- Runbook: API‑Tests mit Postman + `docs/07_Infrastructure/runbooks/POSTMAN_API_Tests_Runbook.md` -## 1. Vorbereitung: Keycloak User & Client - -Damit wir testen können, brauchen wir einen User und einen Client in Keycloak, um uns ein Token zu holen. - -* **URL:** `http://localhost:8180` (oder Port aus `docker-compose logs keycloak`) -* **Admin Login:** `kc-admin` / `kc-password` -* **Realm:** Wähle oben links `meldestelle` aus (wurde beim Start importiert). - -**Check:** -* **User:** Der Standard-Admin User `admin` hat bereits die notwendige Rolle `MELD_USER`. -* **Client:** Es gibt einen dedizierten Test-Client `postman-client`. - * Client ID: `postman-client` - * Client Secret: `postman-secret-123` - * Access Type: `confidential` - * Direct Access Grants: `Enabled` - ---- - -## 2. Postman Collection einrichten - -Erstelle eine neue Collection "Meldestelle Ping Test". - -### A. Variablen (Environment) -Setze folgende Variablen in Postman (Environment "Local Docker"): -* `gateway_url`: `http://localhost:8081` -* `auth_url`: `http://localhost:8180/realms/meldestelle/protocol/openid-connect/token` -* `client_id`: `postman-client` -* `client_secret`: `postman-secret-123` -* `username`: `admin` -* `password`: `Admin#1234` - ---- - -## 3. Test-Szenarien - -Wir testen nun die verschiedenen Endpunkte und Sicherheitsstufen. - -### Szenario 1: Public Endpoints (Ohne Login) -*Diese Requests müssen **ohne** Token funktionieren.* - -**1.1 Simple Ping** -* **Method:** `GET` -* **URL:** `{{gateway_url}}/api/ping/simple` -* **Auth:** No Auth -* **Erwartetes Ergebnis:** - * Status: `200 OK` - * Body: `{"status": "pong", "service": "ping-service", ...}` - * *Bedeutung:* Gateway routet korrekt, Service ist erreichbar, DB-Schreibzugriff (Simple Ping speichert was) klappt. - -**1.2 Health Check** -* **Method:** `GET` -* **URL:** `{{gateway_url}}/api/ping/health` -* **Auth:** No Auth -* **Erwartetes Ergebnis:** - * Status: `200 OK` - * Body: `{"status": "up", "healthy": true, ...}` - -**1.3 Public Ping** -* **Method:** `GET` -* **URL:** `{{gateway_url}}/api/ping/public` -* **Auth:** No Auth -* **Erwartetes Ergebnis:** `200 OK` - ---- - -### Szenario 2: Security Check (Negativ-Test) -*Wir versuchen, auf geschützte Bereiche zuzugreifen, ohne eingeloggt zu sein.* - -**2.1 Secure Ping (Unauthenticated)** -* **Method:** `GET` -* **URL:** `{{gateway_url}}/api/ping/secure` -* **Auth:** No Auth -* **Erwartetes Ergebnis:** - * Status: `401 Unauthorized` - * *Bedeutung:* Gateway oder Service blockt den Request korrekt ab. - -**2.2 Sync Ping (Unauthenticated)** -* **Method:** `GET` -* **URL:** `{{gateway_url}}/api/ping/sync` -* **Auth:** No Auth -* **Erwartetes Ergebnis:** - * Status: `401 Unauthorized` (sofern Sync auch geschützt ist). - ---- - -### Szenario 3: Authenticated Endpoints (Mit Token) -*Jetzt holen wir uns ein Token und testen die geschützten Bereiche.* - -**3.1 Token holen (Login)** -* In Postman: Tab "Authorization" -> Type "OAuth 2.0". -* Grant Type: `Password Credentials` -* Access Token URL: `{{auth_url}}` -* Client ID: `{{client_id}}` -* Client Secret: `{{client_secret}}` -* Username: `{{username}}` -* Password: `{{password}}` -* Klick auf "Get New Access Token". -* Klick auf "Use Token". - -**3.2 Secure Ping (Authenticated)** -* **Method:** `GET` -* **URL:** `{{gateway_url}}/api/ping/secure` -* **Auth:** Inherit from parent (oder OAuth 2.0 mit dem Token). -* **Erwartetes Ergebnis:** - * Status: `200 OK` - * Body: `{"status": "secure-pong", ...}` - * *Bedeutung:* Token ist gültig, Signatur passt, Rolle `MELD_USER` wurde erkannt. - -**3.3 Sync Ping (Authenticated)** -* **Method:** `GET` -* **URL:** `{{gateway_url}}/api/ping/sync?lastSyncTimestamp=0` -* **Auth:** OAuth 2.0 (Token) -* **Erwartetes Ergebnis:** - * Status: `200 OK` - * Body: `[ ... Liste von Events ... ]` - * *Bedeutung:* Delta-Sync funktioniert. - ---- - -### Szenario 4: Resilience (Circuit Breaker) - -**4.1 Enhanced Ping (Normal)** -* **Method:** `GET` -* **URL:** `{{gateway_url}}/api/ping/enhanced` -* **Erwartetes Ergebnis:** `200 OK` - -**4.2 Enhanced Ping (Simulation Failure)** -* **Method:** `GET` -* **URL:** `{{gateway_url}}/api/ping/enhanced?simulate=true` -* **Wiederhole:** Sende den Request mehrmals schnell hintereinander. -* **Erwartetes Ergebnis:** - * Manchmal `500 Error` (Simulation). - * Nach einigen Fehlern: `200 OK` aber mit `status: "fallback"` und `circuitBreakerState: "OPEN"`. - * *Bedeutung:* Resilience4j hat den Fehler erkannt und den Circuit Breaker geöffnet -> Fallback-Methode greift. - ---- - -## Zusammenfassung der Checkliste - -| Test | URL | Auth | Erwartet | -| :--- | :--- | :--- | :--- | -| **Connectivity** | `/api/ping/simple` | Nein | 200 OK | -| **Health** | `/api/ping/health` | Nein | 200 OK | -| **Security Block** | `/api/ping/secure` | Nein | 401 Unauthorized | -| **Auth Login** | (Keycloak Token) | - | Token erhalten | -| **Security Access** | `/api/ping/secure` | Ja (Token) | 200 OK | -| **Sync** | `/api/ping/sync` | Ja (Token) | 200 OK (Liste) | -| **Resilience** | `/api/ping/enhanced?simulate=true` | Nein | Fallback Response | +Hinweis: Dieser Eintrag bleibt als Verweis bestehen, damit bestehende Links nicht brechen. diff --git a/docs/05_Backend/Services/PingService_Reference.md b/docs/05_Backend/Services/PingService_Reference.md index 6880e774..babb2e2d 100644 --- a/docs/05_Backend/Services/PingService_Reference.md +++ b/docs/05_Backend/Services/PingService_Reference.md @@ -3,7 +3,7 @@ type: Reference status: ACTIVE owner: Backend Developer tags: [backend, service, reference, ping] -last_update: 2026-03-15 +last_update: 2026-04-03 --- # 🎯 Ping Service Reference @@ -24,7 +24,7 @@ Der `ping-service` ist der **"Tracer Bullet"** (Leuchtspurgeschoss) der Meldeste * **Framework:** Spring Boot 3.5.x (Spring MVC, Tomcat). * **Sprache:** Kotlin 2.x (Coroutines für asynchrone Abläufe). * **Datenbank:** PostgreSQL (via Spring Data JPA). -* **Migration:** Flyway. +* **Migration:** Flyway (mit service-spezifischer Historientabelle `flyway_schema_history_ping`). * **Security:** OAuth2 Resource Server (JWT via Keycloak). * **Resilience:** Resilience4j (Circuit Breaker). * **API Contract:** KMP-Modul `:contracts:ping-api` (Shared Code mit Frontend). diff --git a/docs/07_Infrastructure/runbooks/POSTMAN_API_Tests_Runbook.md b/docs/07_Infrastructure/runbooks/POSTMAN_API_Tests_Runbook.md new file mode 100644 index 00000000..ac95abd2 --- /dev/null +++ b/docs/07_Infrastructure/runbooks/POSTMAN_API_Tests_Runbook.md @@ -0,0 +1,206 @@ +--- +type: Runbook +status: ACTIVE +owner: QA Specialist +tags: [postman, testing, api, backend] +last_update: 2026-04-03 +--- +# Runbook: API-Tests mit Postman (für Nicht‑Programmierer) + +> Ziel: Alle Kern-APIs der Meldestelle lokal prüfen – sicher, reproduzierbar und ohne Programmierkenntnisse. + +Inhalt: +1. Voraussetzungen (Docker-Profile starten) +2. Postman einrichten (Collection + Environment) +3. Login/Token beschaffen +4. Smoke‑Tests (System & Health) +5. Ping‑Service durchtesten (ohne/mit Login, Resilience) +6. Master‑Data & Pferde (Beispiele) +7. Empfohlene Test‑Reihenfolge +8. Troubleshooting & FAQ + +--- + +## 1. Voraussetzungen + +Bitte sicherstellen, dass die lokale Umgebung läuft: + +- Infrastruktur starten: `docker compose --profile infra up -d` +- Backend starten: `docker compose --profile backend up -d` + +Standard‑Ports (lokal): +- Gateway: `http://localhost:8081` +- Keycloak: `http://localhost:8180` +- Ping‑Service (direkt): `http://localhost:8082` +- ZNS‑Import (direkt): `http://localhost:8095` +- Consul: `http://localhost:8500` + +Hinweis: Warte 30–60 Sekunden nach dem Start, bis alle Dienste „UP“ sind. + +--- + +## 2. Postman einrichten + +### 2.1 Collection importieren +1. Postman öffnen → „Import“ → Datei wählen: +``` +backend/infrastructure/gateway/src/main/resources/static/docs/postman/Meldestelle_API_Collection.json +``` +2. Die Collection „Meldestelle API Collection“ erscheint links. + +### 2.2 Environment anlegen (z. B. „Meldestelle Local“) +Trage folgende Variablen ein: + +| Variable | Wert (Initial) | Beschreibung | +|---|---|---| +| `gateway_url` | `http://localhost:8081` | API‑Gateway Einstieg | +| `auth_url` | `http://localhost:8180/realms/meldestelle/protocol/openid-connect/token` | Token‑Endpoint | +| `client_id` | `postman-client` | Keycloak Client | +| `client_secret` | `postman-secret-123` | Secret zum Client | +| `username` | `admin` | Testuser | +| `password` | `Admin#1234` | Passwort | +| `ping_url` | `http://localhost:8082` | Direkter Ping‑Service | +| `zns_url` | `http://localhost:8095` | Direkter ZNS‑Import | +| `consul_url` | `http://localhost:8500` | Consul UI | +| `auth_token` | (leer) | Wird nach Login automatisch befüllt | +| `horse_id` | (leer) | Wird bei Pferde‑Tests befüllt | +| `country_id` | (leer) | Wird bei Länder‑Tests befüllt | + +--- + +## 3. Login/Token beschaffen + +In Postman im Reiter „Authorization“ (Request „Login“ in der Collection nutzen oder manuell): +- Type: „OAuth 2.0“ +- Grant Type: „Password Credentials“ +- Access Token URL: `{{auth_url}}` +- Client ID: `{{client_id}}` +- Client Secret: `{{client_secret}}` +- Username: `{{username}}` +- Password: `{{password}}` +- Button „Get New Access Token“ → „Use Token“ + +Das Token wird im Environment als `auth_token` gespeichert (Pre‑Request Scripts der Collection setzen es automatisch, sofern vorhanden). + +--- + +## 4. Smoke‑Tests (immer zuerst) + +Zweck: Schnell prüfen, ob das System erreichbar und „UP“ ist. + +1) API‑Gateway Info +- Methode: `GET` +- URL: `{{gateway_url}}/actuator/info` +- Auth: Keine +- Erwartet: `200 OK` (leerer JSON‑Body ist aktuell normal) + +2) API‑Gateway Health +- Methode: `GET` +- URL: `{{gateway_url}}/actuator/health` +- Auth: Keine +- Erwartet: `200 OK` mit `{ "status": "UP" }` + +3) OpenAPI (optional) +- Methode: `GET` +- URL: `{{gateway_url}}/v3/api-docs` +- Erwartet: `200 OK` (OpenAPI JSON) + +--- + +## 5. Ping‑Service Tests + +### 5.1 Öffentlich (ohne Login) +1) Simple Ping +- `GET {{gateway_url}}/api/ping/simple` +- Erwartet: `200 OK` mit `{"status":"pong", ...}` + +2) Health +- `GET {{gateway_url}}/api/ping/health` +- Erwartet: `200 OK` mit `{"status":"up", ...}` + +3) Public Ping +- `GET {{gateway_url}}/api/ping/public` +- Erwartet: `200 OK` + +### 5.2 Sicherheit (Negativ‑Test, ohne Login) +1) Secure Ping (unauthenticated) +- `GET {{gateway_url}}/api/ping/secure` +- Erwartet: `401 Unauthorized` + +2) Sync Ping (unauthenticated) +- `GET {{gateway_url}}/api/ping/sync` +- Erwartet: `401 Unauthorized` + +### 5.3 Authentifiziert (mit Token) +1) Secure Ping (authenticated) +- `GET {{gateway_url}}/api/ping/secure` +- Auth: OAuth 2.0 (Token) +- Erwartet: `200 OK` mit `{"status":"secure-pong", ...}` + +2) Sync Ping (authenticated) +- `GET {{gateway_url}}/api/ping/sync?lastSyncTimestamp=0` +- Erwartet: `200 OK` (Liste von Events) + +### 5.4 Resilience (Circuit Breaker Demo) +1) Enhanced Ping (normal) +- `GET {{gateway_url}}/api/ping/enhanced` → `200 OK` + +2) Enhanced Ping (Fehler provozieren) +- `GET {{gateway_url}}/api/ping/enhanced?simulate=true` mehrfach senden +- Erwartet: teils `500`, danach Fallback‑Antwort mit `circuitBreakerState: "OPEN"` + +--- + +## 6. Master‑Data & Pferde (Beispiele) + +Hinweis: Endpunkte können sich ändern. Maßgeblich ist die OpenAPI unter `{{gateway_url}}/v3/api-docs` sowie die importierte Postman‑Collection. + +### 6.1 Countries +- Create: `POST {{gateway_url}}/api/masterdata/countries` (Body siehe Collection) +- Read: `GET {{gateway_url}}/api/masterdata/countries/{{country_id}}` +- Erwartet: `201 Created` bei Anlage, `200 OK` beim Lesen. + +### 6.2 Horse Registry +- Create: `POST {{gateway_url}}/api/horses` → speichert `{{horse_id}}` +- Get: `GET {{gateway_url}}/api/horses/{{horse_id}}` +- Delete (optional): `DELETE {{gateway_url}}/api/horses/{{horse_id}}` + +--- + +## 7. Empfohlene Test‑Reihenfolge (Checkliste) + +1) Infrastruktur & Backend starten (Docker Profiles) +2) Collection importieren, Environment setzen +3) Smoke‑Tests (Info, Health, OpenAPI) +4) Ping öffentlich (simple, health, public) +5) Negativ‑Tests (secure/sync ohne Token → 401) +6) Login/Token holen +7) Ping authentifiziert (secure/sync) +8) Resilience testen (enhanced, simulate=true) +9) Optionale Domänen‑Tests (Countries, Horses) + +--- + +## 8. Troubleshooting & FAQ + +- 401 Unauthorized trotz Login: + - Token wirklich gesetzt? In Postman „Use Token“ klicken; im Request unter „Authorization“ prüfen. + - Uhrzeit/Zeitzone korrekt? Abgelaufene Tokens werden abgewiesen. +- 502/503 vom Gateway: + - Service wirklich „UP“? `{{gateway_url}}/actuator/health` und Container‑Logs prüfen: `docker compose ps` / `docker compose logs -f ` +- Keycloak nicht erreichbar: + - Warten Sie nach Start 30–60 Sekunden. Prüfen: `http://localhost:8180`. +- OpenAPI leer oder 404: + - Backend neu gestartet? Warten, bis Gateway die Routen geladen hat. + +Weitere Details und Hintergründe finden Sie in der ursprünglichen, technischen Langfassung der QA‑Dokumentation (siehe Archiv‑Hinweis unten). + +--- + +Quellen & Verweise: +- Postman‑Collection: `backend/infrastructure/gateway/src/main/resources/static/docs/postman/Meldestelle_API_Collection.json` +- Backend‑Referenz: `docs/05_Backend/Services/PingService_Reference.md` +- OpenAPI: `{{gateway_url}}/v3/api-docs` + +Archiv‑Hinweis: +- Die frühere, sehr detaillierte Arbeitsversion „Postman Tests — Vollständige Dokumentation“ aus dem Agents‑Besprechungsordner wurde in dieses Runbook konsolidiert und ins Archiv verschoben. diff --git a/docs/07_Infrastructure/runbooks/README.md b/docs/07_Infrastructure/runbooks/README.md new file mode 100644 index 00000000..ddd35a06 --- /dev/null +++ b/docs/07_Infrastructure/runbooks/README.md @@ -0,0 +1,20 @@ +--- +type: Index +status: ACTIVE +owner: Curator +last_update: 2026-04-03 +--- +# Runbooks & Betriebsanleitungen + +Dieser Ordner ist der zentrale Ablageort für alle Betriebsanleitungen (Runbooks) und Schritt-für-Schritt‑Guides, die auch von Nicht‑Programmierern genutzt werden können. + +- Zielgruppe: Operations, Tester, Fachexperten, Auditoren +- Prinzip: Docs‑as‑Code, offline‑fähig, reproduzierbar + +Struktur: +- Postman & API‑Tests: `POSTMAN_API_Tests_Runbook.md` +- Zora/Infra Setup: `zora-setup-runbook.md` +- Weitere Runbooks: jeweils als eigenständige Markdown‑Datei in diesem Verzeichnis + +Archivierung: +- Veraltete oder ersetzte Dokumente werden nach `docs/99_Journal/_archive/` oder in das jeweilige Themen‑`_archive/` verschoben und hier nicht mehr geführt. diff --git a/docs/99_Journal/2026-04-03_Session_Log_Postman_Runbook_Konsolidierung.md b/docs/99_Journal/2026-04-03_Session_Log_Postman_Runbook_Konsolidierung.md new file mode 100644 index 00000000..6a455ae3 --- /dev/null +++ b/docs/99_Journal/2026-04-03_Session_Log_Postman_Runbook_Konsolidierung.md @@ -0,0 +1,23 @@ +--- +type: Journal +status: FINAL +owner: Curator +last_update: 2026-04-03 +--- +# Session Log — Postman Doku konsolidiert und Runbook-Struktur geschaffen + +## Kontext +- Ziel: Postman-Dokumentationen zusammenführen, für Nicht‑Programmierer verständlich machen. +- Zusätzlich: Zentralen Ort für Betriebsanleitungen etablieren, Alt-Dokus ins Archiv. + +## Änderungen +- Neu: `docs/07_Infrastructure/runbooks/POSTMAN_API_Tests_Runbook.md` (konsolidiertes, einsteigerfreundliches Runbook) +- Neu: `docs/07_Infrastructure/runbooks/README.md` (Index und Regeln für Runbooks/Betriebsanleitungen) +- Backend-Guide umgestellt auf Redirect: `docs/05_Backend/Guides/Testing_with_Postman.md` +- Alte Arbeitsversion archiviert/verlinkt: + - Archiv: `docs/04_Agents/_archive/Postman_Tests_Dokumentation_2026-04-03.md` + - Originalpfad zeigt nun Redirect-Notiz: `docs/04_Agents/Besprechung_2026-04-03/Postman_Tests_Dokumentation.md` + +## Hinweise +- Bestehende Links bleiben funktionsfähig (Redirect-Stub). +- Weitere Betriebsanleitungen künftig hier ablegen: `docs/07_Infrastructure/runbooks/` diff --git a/docs/99_Journal/2026-01-30_Refactoring_Exposed_Ktor.md b/docs/99_Journal/_archive/2026-01-30_Refactoring_Exposed_Ktor.md similarity index 100% rename from docs/99_Journal/2026-01-30_Refactoring_Exposed_Ktor.md rename to docs/99_Journal/_archive/2026-01-30_Refactoring_Exposed_Ktor.md diff --git a/docs/99_Journal/2026-01-31_Session_Log_E2E_Smoke_Migration.md b/docs/99_Journal/_archive/2026-01-31_Session_Log_E2E_Smoke_Migration.md similarity index 100% rename from docs/99_Journal/2026-01-31_Session_Log_E2E_Smoke_Migration.md rename to docs/99_Journal/_archive/2026-01-31_Session_Log_E2E_Smoke_Migration.md diff --git a/docs/99_Journal/2026-02-03_Session_Log_Docker_Build_Issues.md b/docs/99_Journal/_archive/2026-02-03_Session_Log_Docker_Build_Issues.md similarity index 100% rename from docs/99_Journal/2026-02-03_Session_Log_Docker_Build_Issues.md rename to docs/99_Journal/_archive/2026-02-03_Session_Log_Docker_Build_Issues.md diff --git a/docs/99_Journal/2026-02-03_Session_Log_Gradle_Optimization.md b/docs/99_Journal/_archive/2026-02-03_Session_Log_Gradle_Optimization.md similarity index 100% rename from docs/99_Journal/2026-02-03_Session_Log_Gradle_Optimization.md rename to docs/99_Journal/_archive/2026-02-03_Session_Log_Gradle_Optimization.md diff --git a/docs/99_Journal/2026-02-04_Infrastructure_Setup_Plan.md b/docs/99_Journal/_archive/2026-02-04_Infrastructure_Setup_Plan.md similarity index 100% rename from docs/99_Journal/2026-02-04_Infrastructure_Setup_Plan.md rename to docs/99_Journal/_archive/2026-02-04_Infrastructure_Setup_Plan.md diff --git a/docs/99_Journal/2026-02-04_Ping_Service_Verification.md b/docs/99_Journal/_archive/2026-02-04_Ping_Service_Verification.md similarity index 100% rename from docs/99_Journal/2026-02-04_Ping_Service_Verification.md rename to docs/99_Journal/_archive/2026-02-04_Ping_Service_Verification.md diff --git a/docs/99_Journal/2026-02-04_Session_Log_Docker_Hybrid_Build.md b/docs/99_Journal/_archive/2026-02-04_Session_Log_Docker_Hybrid_Build.md similarity index 100% rename from docs/99_Journal/2026-02-04_Session_Log_Docker_Hybrid_Build.md rename to docs/99_Journal/_archive/2026-02-04_Session_Log_Docker_Hybrid_Build.md diff --git a/docs/99_Journal/2026-02-06_Infrastructure_Planning.md b/docs/99_Journal/_archive/2026-02-06_Infrastructure_Planning.md similarity index 100% rename from docs/99_Journal/2026-02-06_Infrastructure_Planning.md rename to docs/99_Journal/_archive/2026-02-06_Infrastructure_Planning.md diff --git a/docs/99_Journal/2026-02-13.md b/docs/99_Journal/_archive/2026-02-13.md similarity index 100% rename from docs/99_Journal/2026-02-13.md rename to docs/99_Journal/_archive/2026-02-13.md diff --git a/docs/99_Journal/2026-03-06_Session_Log_DevOps_und_AI_Stack.md b/docs/99_Journal/_archive/2026-03-06_Session_Log_DevOps_und_AI_Stack.md similarity index 100% rename from docs/99_Journal/2026-03-06_Session_Log_DevOps_und_AI_Stack.md rename to docs/99_Journal/_archive/2026-03-06_Session_Log_DevOps_und_AI_Stack.md diff --git a/docs/99_Journal/2026-03-06_Session_Log_Immich_Pangolin_Config.md b/docs/99_Journal/_archive/2026-03-06_Session_Log_Immich_Pangolin_Config.md similarity index 100% rename from docs/99_Journal/2026-03-06_Session_Log_Immich_Pangolin_Config.md rename to docs/99_Journal/_archive/2026-03-06_Session_Log_Immich_Pangolin_Config.md diff --git a/docs/99_Journal/2026-03-06_Session_Log_Keycloak_Fix.md b/docs/99_Journal/_archive/2026-03-06_Session_Log_Keycloak_Fix.md similarity index 100% rename from docs/99_Journal/2026-03-06_Session_Log_Keycloak_Fix.md rename to docs/99_Journal/_archive/2026-03-06_Session_Log_Keycloak_Fix.md diff --git a/docs/99_Journal/2026-03-06_Session_Log_Pipeline_502_Fix.md b/docs/99_Journal/_archive/2026-03-06_Session_Log_Pipeline_502_Fix.md similarity index 100% rename from docs/99_Journal/2026-03-06_Session_Log_Pipeline_502_Fix.md rename to docs/99_Journal/_archive/2026-03-06_Session_Log_Pipeline_502_Fix.md diff --git a/docs/99_Journal/2026-03-06_Session_Log_Pipeline_Fix_v2.md b/docs/99_Journal/_archive/2026-03-06_Session_Log_Pipeline_Fix_v2.md similarity index 100% rename from docs/99_Journal/2026-03-06_Session_Log_Pipeline_Fix_v2.md rename to docs/99_Journal/_archive/2026-03-06_Session_Log_Pipeline_Fix_v2.md diff --git a/docs/99_Journal/2026-03-06_Session_Log_Pipeline_Fix_v3.md b/docs/99_Journal/_archive/2026-03-06_Session_Log_Pipeline_Fix_v3.md similarity index 100% rename from docs/99_Journal/2026-03-06_Session_Log_Pipeline_Fix_v3.md rename to docs/99_Journal/_archive/2026-03-06_Session_Log_Pipeline_Fix_v3.md diff --git a/docs/99_Journal/2026-03-06_Session_Log_Pipeline_Gruen.md b/docs/99_Journal/_archive/2026-03-06_Session_Log_Pipeline_Gruen.md similarity index 100% rename from docs/99_Journal/2026-03-06_Session_Log_Pipeline_Gruen.md rename to docs/99_Journal/_archive/2026-03-06_Session_Log_Pipeline_Gruen.md diff --git a/docs/99_Journal/2026-03-06_Session_Log_Proxmox_Korrektur.md b/docs/99_Journal/_archive/2026-03-06_Session_Log_Proxmox_Korrektur.md similarity index 100% rename from docs/99_Journal/2026-03-06_Session_Log_Proxmox_Korrektur.md rename to docs/99_Journal/_archive/2026-03-06_Session_Log_Proxmox_Korrektur.md diff --git a/docs/99_Journal/2026-03-06_Session_Log_Uebersetzung_Deutsch.md b/docs/99_Journal/_archive/2026-03-06_Session_Log_Uebersetzung_Deutsch.md similarity index 100% rename from docs/99_Journal/2026-03-06_Session_Log_Uebersetzung_Deutsch.md rename to docs/99_Journal/_archive/2026-03-06_Session_Log_Uebersetzung_Deutsch.md diff --git a/docs/99_Journal/2026-03-06_Session_Log_Zora_Konfiguration.md b/docs/99_Journal/_archive/2026-03-06_Session_Log_Zora_Konfiguration.md similarity index 100% rename from docs/99_Journal/2026-03-06_Session_Log_Zora_Konfiguration.md rename to docs/99_Journal/_archive/2026-03-06_Session_Log_Zora_Konfiguration.md diff --git a/docs/99_Journal/2026-03-07_Session_Log_TechStack_Zusammenfassung.md b/docs/99_Journal/_archive/2026-03-07_Session_Log_TechStack_Zusammenfassung.md similarity index 100% rename from docs/99_Journal/2026-03-07_Session_Log_TechStack_Zusammenfassung.md rename to docs/99_Journal/_archive/2026-03-07_Session_Log_TechStack_Zusammenfassung.md diff --git a/docs/99_Journal/2026-03-07_Session_Log_Zora_Hardware_Zusammenfassung.md b/docs/99_Journal/_archive/2026-03-07_Session_Log_Zora_Hardware_Zusammenfassung.md similarity index 100% rename from docs/99_Journal/2026-03-07_Session_Log_Zora_Hardware_Zusammenfassung.md rename to docs/99_Journal/_archive/2026-03-07_Session_Log_Zora_Hardware_Zusammenfassung.md diff --git a/docs/99_Journal/2026-03-09_Session_Log_Keycloak_Haertung.md b/docs/99_Journal/_archive/2026-03-09_Session_Log_Keycloak_Haertung.md similarity index 100% rename from docs/99_Journal/2026-03-09_Session_Log_Keycloak_Haertung.md rename to docs/99_Journal/_archive/2026-03-09_Session_Log_Keycloak_Haertung.md diff --git a/docs/99_Journal/2026-03-10_Session_Log_Keycloak_Hostname_Fix.md b/docs/99_Journal/_archive/2026-03-10_Session_Log_Keycloak_Hostname_Fix.md similarity index 100% rename from docs/99_Journal/2026-03-10_Session_Log_Keycloak_Hostname_Fix.md rename to docs/99_Journal/_archive/2026-03-10_Session_Log_Keycloak_Hostname_Fix.md diff --git a/docs/99_Journal/2026-03-11_Session_Log_Pangolin_Update.md b/docs/99_Journal/_archive/2026-03-11_Session_Log_Pangolin_Update.md similarity index 100% rename from docs/99_Journal/2026-03-11_Session_Log_Pangolin_Update.md rename to docs/99_Journal/_archive/2026-03-11_Session_Log_Pangolin_Update.md diff --git a/docs/99_Journal/2026-03-15_Session_Log_Dokumentation_Cleanup.md b/docs/99_Journal/_archive/2026-03-15_Session_Log_Dokumentation_Cleanup.md similarity index 100% rename from docs/99_Journal/2026-03-15_Session_Log_Dokumentation_Cleanup.md rename to docs/99_Journal/_archive/2026-03-15_Session_Log_Dokumentation_Cleanup.md diff --git a/docs/99_Journal/2026-03-16_Session_Log_Architect_Readiness.md b/docs/99_Journal/_archive/2026-03-16_Session_Log_Architect_Readiness.md similarity index 100% rename from docs/99_Journal/2026-03-16_Session_Log_Architect_Readiness.md rename to docs/99_Journal/_archive/2026-03-16_Session_Log_Architect_Readiness.md diff --git a/docs/99_Journal/2026-03-16_Session_Log_Backend_Readiness.md b/docs/99_Journal/_archive/2026-03-16_Session_Log_Backend_Readiness.md similarity index 100% rename from docs/99_Journal/2026-03-16_Session_Log_Backend_Readiness.md rename to docs/99_Journal/_archive/2026-03-16_Session_Log_Backend_Readiness.md diff --git a/docs/99_Journal/2026-03-16_Session_Log_Curator_Readiness.md b/docs/99_Journal/_archive/2026-03-16_Session_Log_Curator_Readiness.md similarity index 100% rename from docs/99_Journal/2026-03-16_Session_Log_Curator_Readiness.md rename to docs/99_Journal/_archive/2026-03-16_Session_Log_Curator_Readiness.md diff --git a/docs/99_Journal/2026-03-16_Session_Log_Fix_SQLite_Worker.md b/docs/99_Journal/_archive/2026-03-16_Session_Log_Fix_SQLite_Worker.md similarity index 100% rename from docs/99_Journal/2026-03-16_Session_Log_Fix_SQLite_Worker.md rename to docs/99_Journal/_archive/2026-03-16_Session_Log_Fix_SQLite_Worker.md diff --git a/docs/99_Journal/2026-03-16_Session_Log_Frontend_Readiness.md b/docs/99_Journal/_archive/2026-03-16_Session_Log_Frontend_Readiness.md similarity index 100% rename from docs/99_Journal/2026-03-16_Session_Log_Frontend_Readiness.md rename to docs/99_Journal/_archive/2026-03-16_Session_Log_Frontend_Readiness.md diff --git a/docs/99_Journal/2026-03-16_Session_Log_Infrastruktur_Freigabe.md b/docs/99_Journal/_archive/2026-03-16_Session_Log_Infrastruktur_Freigabe.md similarity index 100% rename from docs/99_Journal/2026-03-16_Session_Log_Infrastruktur_Freigabe.md rename to docs/99_Journal/_archive/2026-03-16_Session_Log_Infrastruktur_Freigabe.md diff --git a/docs/99_Journal/2026-03-16_Session_Log_QA_Readiness.md b/docs/99_Journal/_archive/2026-03-16_Session_Log_QA_Readiness.md similarity index 100% rename from docs/99_Journal/2026-03-16_Session_Log_QA_Readiness.md rename to docs/99_Journal/_archive/2026-03-16_Session_Log_QA_Readiness.md diff --git a/docs/99_Journal/2026-03-16_Session_Log_UIUX_Readiness.md b/docs/99_Journal/_archive/2026-03-16_Session_Log_UIUX_Readiness.md similarity index 100% rename from docs/99_Journal/2026-03-16_Session_Log_UIUX_Readiness.md rename to docs/99_Journal/_archive/2026-03-16_Session_Log_UIUX_Readiness.md diff --git a/docs/99_Journal/2026-03-18_Session_Log_Domain_und_Frontend_Kickoff.md b/docs/99_Journal/_archive/2026-03-18_Session_Log_Domain_und_Frontend_Kickoff.md similarity index 100% rename from docs/99_Journal/2026-03-18_Session_Log_Domain_und_Frontend_Kickoff.md rename to docs/99_Journal/_archive/2026-03-18_Session_Log_Domain_und_Frontend_Kickoff.md diff --git a/docs/99_Journal/2026-03-19_Session_Log_Frontend_Transfer_Offline.md b/docs/99_Journal/_archive/2026-03-19_Session_Log_Frontend_Transfer_Offline.md similarity index 100% rename from docs/99_Journal/2026-03-19_Session_Log_Frontend_Transfer_Offline.md rename to docs/99_Journal/_archive/2026-03-19_Session_Log_Frontend_Transfer_Offline.md diff --git a/docs/99_Journal/2026-03-19_Session_Log_POC_Rollen_Keycloak.md b/docs/99_Journal/_archive/2026-03-19_Session_Log_POC_Rollen_Keycloak.md similarity index 100% rename from docs/99_Journal/2026-03-19_Session_Log_POC_Rollen_Keycloak.md rename to docs/99_Journal/_archive/2026-03-19_Session_Log_POC_Rollen_Keycloak.md diff --git a/docs/99_Journal/2026-03-24_Session_Log_ADR_Context_Map.md b/docs/99_Journal/_archive/2026-03-24_Session_Log_ADR_Context_Map.md similarity index 100% rename from docs/99_Journal/2026-03-24_Session_Log_ADR_Context_Map.md rename to docs/99_Journal/_archive/2026-03-24_Session_Log_ADR_Context_Map.md diff --git a/docs/99_Journal/2026-03-24_Session_Log_API_Design_ACL.md b/docs/99_Journal/_archive/2026-03-24_Session_Log_API_Design_ACL.md similarity index 100% rename from docs/99_Journal/2026-03-24_Session_Log_API_Design_ACL.md rename to docs/99_Journal/_archive/2026-03-24_Session_Log_API_Design_ACL.md diff --git a/docs/99_Journal/2026-03-24_Session_Log_Actor_Context_Domain_Models.md b/docs/99_Journal/_archive/2026-03-24_Session_Log_Actor_Context_Domain_Models.md similarity index 100% rename from docs/99_Journal/2026-03-24_Session_Log_Actor_Context_Domain_Models.md rename to docs/99_Journal/_archive/2026-03-24_Session_Log_Actor_Context_Domain_Models.md diff --git a/docs/99_Journal/2026-03-24_Session_Log_DDD_Ubiquitous_Language.md b/docs/99_Journal/_archive/2026-03-24_Session_Log_DDD_Ubiquitous_Language.md similarity index 100% rename from docs/99_Journal/2026-03-24_Session_Log_DDD_Ubiquitous_Language.md rename to docs/99_Journal/_archive/2026-03-24_Session_Log_DDD_Ubiquitous_Language.md diff --git a/docs/99_Journal/2026-03-24_Session_Log_Desktop_Shell.md b/docs/99_Journal/_archive/2026-03-24_Session_Log_Desktop_Shell.md similarity index 100% rename from docs/99_Journal/2026-03-24_Session_Log_Desktop_Shell.md rename to docs/99_Journal/_archive/2026-03-24_Session_Log_Desktop_Shell.md diff --git a/docs/99_Journal/2026-03-24_Session_Log_Event_Management_Context_Domain_Models.md b/docs/99_Journal/_archive/2026-03-24_Session_Log_Event_Management_Context_Domain_Models.md similarity index 100% rename from docs/99_Journal/2026-03-24_Session_Log_Event_Management_Context_Domain_Models.md rename to docs/99_Journal/_archive/2026-03-24_Session_Log_Event_Management_Context_Domain_Models.md diff --git a/docs/99_Journal/2026-03-24_Session_Log_Nennung_REST_API.md b/docs/99_Journal/_archive/2026-03-24_Session_Log_Nennung_REST_API.md similarity index 100% rename from docs/99_Journal/2026-03-24_Session_Log_Nennung_REST_API.md rename to docs/99_Journal/_archive/2026-03-24_Session_Log_Nennung_REST_API.md diff --git a/docs/99_Journal/2026-03-24_Session_Log_Persistenz_Repository_Migrationen.md b/docs/99_Journal/_archive/2026-03-24_Session_Log_Persistenz_Repository_Migrationen.md similarity index 100% rename from docs/99_Journal/2026-03-24_Session_Log_Persistenz_Repository_Migrationen.md rename to docs/99_Journal/_archive/2026-03-24_Session_Log_Persistenz_Repository_Migrationen.md diff --git a/docs/99_Journal/2026-03-24_Session_Log_Registration_Context_Domain_Models.md b/docs/99_Journal/_archive/2026-03-24_Session_Log_Registration_Context_Domain_Models.md similarity index 100% rename from docs/99_Journal/2026-03-24_Session_Log_Registration_Context_Domain_Models.md rename to docs/99_Journal/_archive/2026-03-24_Session_Log_Registration_Context_Domain_Models.md diff --git a/docs/99_Journal/2026-03-24_Session_Log_Warn-Logik-Spezifikation.md b/docs/99_Journal/_archive/2026-03-24_Session_Log_Warn-Logik-Spezifikation.md similarity index 100% rename from docs/99_Journal/2026-03-24_Session_Log_Warn-Logik-Spezifikation.md rename to docs/99_Journal/_archive/2026-03-24_Session_Log_Warn-Logik-Spezifikation.md diff --git a/docs/99_Journal/2026-03-25_Playbook_Audit.md b/docs/99_Journal/_archive/2026-03-25_Playbook_Audit.md similarity index 100% rename from docs/99_Journal/2026-03-25_Playbook_Audit.md rename to docs/99_Journal/_archive/2026-03-25_Playbook_Audit.md diff --git a/docs/99_Journal/2026-03-25_Session_Log_CAN_Starter-Schwellenwerte.md b/docs/99_Journal/_archive/2026-03-25_Session_Log_CAN_Starter-Schwellenwerte.md similarity index 100% rename from docs/99_Journal/2026-03-25_Session_Log_CAN_Starter-Schwellenwerte.md rename to docs/99_Journal/_archive/2026-03-25_Session_Log_CAN_Starter-Schwellenwerte.md diff --git a/docs/99_Journal/2026-03-25_Session_Log_CVN_Abteilungs-Trennungsregeln.md b/docs/99_Journal/_archive/2026-03-25_Session_Log_CVN_Abteilungs-Trennungsregeln.md similarity index 100% rename from docs/99_Journal/2026-03-25_Session_Log_CVN_Abteilungs-Trennungsregeln.md rename to docs/99_Journal/_archive/2026-03-25_Session_Log_CVN_Abteilungs-Trennungsregeln.md diff --git a/docs/99_Journal/2026-03-25_Session_Log_Frontend_Architektur_Bereinigung.md b/docs/99_Journal/_archive/2026-03-25_Session_Log_Frontend_Architektur_Bereinigung.md similarity index 100% rename from docs/99_Journal/2026-03-25_Session_Log_Frontend_Architektur_Bereinigung.md rename to docs/99_Journal/_archive/2026-03-25_Session_Log_Frontend_Architektur_Bereinigung.md diff --git a/docs/99_Journal/2026-03-26_Session_Log_Architektur_Refactor.md b/docs/99_Journal/_archive/2026-03-26_Session_Log_Architektur_Refactor.md similarity index 100% rename from docs/99_Journal/2026-03-26_Session_Log_Architektur_Refactor.md rename to docs/99_Journal/_archive/2026-03-26_Session_Log_Architektur_Refactor.md diff --git a/docs/99_Journal/2026-03-26_Session_Log_Figma_Konformitaet.md b/docs/99_Journal/_archive/2026-03-26_Session_Log_Figma_Konformitaet.md similarity index 100% rename from docs/99_Journal/2026-03-26_Session_Log_Figma_Konformitaet.md rename to docs/99_Journal/_archive/2026-03-26_Session_Log_Figma_Konformitaet.md diff --git a/docs/99_Journal/2026-03-26_Session_Log_Figma_Konformitaet_Teil2.md b/docs/99_Journal/_archive/2026-03-26_Session_Log_Figma_Konformitaet_Teil2.md similarity index 100% rename from docs/99_Journal/2026-03-26_Session_Log_Figma_Konformitaet_Teil2.md rename to docs/99_Journal/_archive/2026-03-26_Session_Log_Figma_Konformitaet_Teil2.md diff --git a/docs/99_Journal/2026-03-26_Session_Log_Screens_Reorganisation.md b/docs/99_Journal/_archive/2026-03-26_Session_Log_Screens_Reorganisation.md similarity index 100% rename from docs/99_Journal/2026-03-26_Session_Log_Screens_Reorganisation.md rename to docs/99_Journal/_archive/2026-03-26_Session_Log_Screens_Reorganisation.md diff --git a/docs/99_Journal/2026-03-26_Session_Log_Struktur_Sprint.md b/docs/99_Journal/_archive/2026-03-26_Session_Log_Struktur_Sprint.md similarity index 100% rename from docs/99_Journal/2026-03-26_Session_Log_Struktur_Sprint.md rename to docs/99_Journal/_archive/2026-03-26_Session_Log_Struktur_Sprint.md diff --git a/docs/99_Journal/2026-03-28_Session_Log_Masterdata_Build_Fix.md b/docs/99_Journal/_archive/2026-03-28_Session_Log_Masterdata_Build_Fix.md similarity index 100% rename from docs/99_Journal/2026-03-28_Session_Log_Masterdata_Build_Fix.md rename to docs/99_Journal/_archive/2026-03-28_Session_Log_Masterdata_Build_Fix.md diff --git a/docs/99_Journal/2026-03-28_Session_Log_Metaspace_Fix.md b/docs/99_Journal/_archive/2026-03-28_Session_Log_Metaspace_Fix.md similarity index 100% rename from docs/99_Journal/2026-03-28_Session_Log_Metaspace_Fix.md rename to docs/99_Journal/_archive/2026-03-28_Session_Log_Metaspace_Fix.md diff --git a/docs/99_Journal/2026-03-28_Session_Log_Ping_Migration_Fix.md b/docs/99_Journal/_archive/2026-03-28_Session_Log_Ping_Migration_Fix.md similarity index 100% rename from docs/99_Journal/2026-03-28_Session_Log_Ping_Migration_Fix.md rename to docs/99_Journal/_archive/2026-03-28_Session_Log_Ping_Migration_Fix.md diff --git a/docs/99_Journal/2026-03-28_Session_Log_TabRow_Migration.md b/docs/99_Journal/_archive/2026-03-28_Session_Log_TabRow_Migration.md similarity index 100% rename from docs/99_Journal/2026-03-28_Session_Log_TabRow_Migration.md rename to docs/99_Journal/_archive/2026-03-28_Session_Log_TabRow_Migration.md diff --git a/docs/99_Journal/2026-03-30_Session_Log_Masterdata_C-NEU_Classes.md b/docs/99_Journal/_archive/2026-03-30_Session_Log_Masterdata_C-NEU_Classes.md similarity index 100% rename from docs/99_Journal/2026-03-30_Session_Log_Masterdata_C-NEU_Classes.md rename to docs/99_Journal/_archive/2026-03-30_Session_Log_Masterdata_C-NEU_Classes.md diff --git a/docs/99_Journal/2026-03-30_Session_Log_Masterdata_Funktionaer_Qualifikationen.md b/docs/99_Journal/_archive/2026-03-30_Session_Log_Masterdata_Funktionaer_Qualifikationen.md similarity index 100% rename from docs/99_Journal/2026-03-30_Session_Log_Masterdata_Funktionaer_Qualifikationen.md rename to docs/99_Journal/_archive/2026-03-30_Session_Log_Masterdata_Funktionaer_Qualifikationen.md diff --git a/docs/99_Journal/2026-03-30_Session_Log_Masterdata_Gebuehrenordnung.md b/docs/99_Journal/_archive/2026-03-30_Session_Log_Masterdata_Gebuehrenordnung.md similarity index 100% rename from docs/99_Journal/2026-03-30_Session_Log_Masterdata_Gebuehrenordnung.md rename to docs/99_Journal/_archive/2026-03-30_Session_Log_Masterdata_Gebuehrenordnung.md diff --git a/docs/99_Journal/2026-03-30_Session_Log_Masterdata_OETO_Consolidation.md b/docs/99_Journal/_archive/2026-03-30_Session_Log_Masterdata_OETO_Consolidation.md similarity index 100% rename from docs/99_Journal/2026-03-30_Session_Log_Masterdata_OETO_Consolidation.md rename to docs/99_Journal/_archive/2026-03-30_Session_Log_Masterdata_OETO_Consolidation.md diff --git a/docs/99_Journal/2026-03-30_Session_Log_Masterdata_Pferdepruefungen.md b/docs/99_Journal/_archive/2026-03-30_Session_Log_Masterdata_Pferdepruefungen.md similarity index 100% rename from docs/99_Journal/2026-03-30_Session_Log_Masterdata_Pferdepruefungen.md rename to docs/99_Journal/_archive/2026-03-30_Session_Log_Masterdata_Pferdepruefungen.md diff --git a/docs/99_Journal/2026-03-30_Session_Log_Masterdata_Pferdepruefungen_Bewertung.md b/docs/99_Journal/_archive/2026-03-30_Session_Log_Masterdata_Pferdepruefungen_Bewertung.md similarity index 100% rename from docs/99_Journal/2026-03-30_Session_Log_Masterdata_Pferdepruefungen_Bewertung.md rename to docs/99_Journal/_archive/2026-03-30_Session_Log_Masterdata_Pferdepruefungen_Bewertung.md diff --git a/docs/99_Journal/2026-03-30_Session_Log_Masterdata_README.md b/docs/99_Journal/_archive/2026-03-30_Session_Log_Masterdata_README.md similarity index 100% rename from docs/99_Journal/2026-03-30_Session_Log_Masterdata_README.md rename to docs/99_Journal/_archive/2026-03-30_Session_Log_Masterdata_README.md diff --git a/docs/99_Journal/2026-03-30_Session_Log_Masterdata_Reiter_Lizenzen.md b/docs/99_Journal/_archive/2026-03-30_Session_Log_Masterdata_Reiter_Lizenzen.md similarity index 100% rename from docs/99_Journal/2026-03-30_Session_Log_Masterdata_Reiter_Lizenzen.md rename to docs/99_Journal/_archive/2026-03-30_Session_Log_Masterdata_Reiter_Lizenzen.md diff --git a/docs/99_Journal/2026-03-30_Session_Log_Masterdata_Reiter_Pruefungen.md b/docs/99_Journal/_archive/2026-03-30_Session_Log_Masterdata_Reiter_Pruefungen.md similarity index 100% rename from docs/99_Journal/2026-03-30_Session_Log_Masterdata_Reiter_Pruefungen.md rename to docs/99_Journal/_archive/2026-03-30_Session_Log_Masterdata_Reiter_Pruefungen.md diff --git a/docs/99_Journal/2026-03-30_Session_Log_ZNS_Documentation.md b/docs/99_Journal/_archive/2026-03-30_Session_Log_ZNS_Documentation.md similarity index 100% rename from docs/99_Journal/2026-03-30_Session_Log_ZNS_Documentation.md rename to docs/99_Journal/_archive/2026-03-30_Session_Log_ZNS_Documentation.md diff --git a/docs/99_Journal/2026-03-31_Session_Log_Event_First_Workflow.md b/docs/99_Journal/_archive/2026-03-31_Session_Log_Event_First_Workflow.md similarity index 100% rename from docs/99_Journal/2026-03-31_Session_Log_Event_First_Workflow.md rename to docs/99_Journal/_archive/2026-03-31_Session_Log_Event_First_Workflow.md