Go to file
Stefan Mogeritsch 7d71ca9a48 docs: add 2026 Austrian tournament regulations and special provisions
Added updated documentation for the 2026 Austrian Tournament Regulations, including general rules, special provisions, fees, and technical details. Covers Dressage, Jumping, and Eventing classes, along with appendices for heights and requirements across disciplines.
2026-01-14 14:45:28 +01:00
.gemini tooling: make .junie/.gemini docs-first (remove legacy guidelines) 2026-01-13 14:32:49 +01:00
.github docs: align README/CI + refine AGENTS for new docs strategy 2026-01-13 14:33:10 +01:00
.junie tooling: make .junie/.gemini docs-first (remove legacy guidelines) 2026-01-13 14:32:49 +01:00
backend docs: expand ping-service documentation and add backend startup troubleshooting journal 2026-01-13 17:41:19 +01:00
config docs: expand ping-service documentation and add backend startup troubleshooting journal 2026-01-13 17:41:19 +01:00
contracts/ping-api refactor(frontend, build): update PingViewModel initialization, resolve view model via Koin, and clean yarn dependencies 2026-01-12 19:47:59 +01:00
core refactor(frontend, build): update PingViewModel initialization, resolve view model via Koin, and clean yarn dependencies 2026-01-12 19:47:59 +01:00
docs docs: add 2026 Austrian tournament regulations and special provisions 2026-01-14 14:45:28 +01:00
frontend refactor(frontend, build): update PingViewModel initialization, resolve view model via Koin, and clean yarn dependencies 2026-01-12 19:47:59 +01:00
GeminiBerichte chore(cleanup): remove unused FallbackController and outdated GatewayDependencies.txt 2026-01-04 22:47:11 +01:00
gradle refactor(build, dependencies): introduce SQLDelight WebWorker setup, update Spring Boot dependencies, and align versions 2026-01-12 17:05:44 +01:00
JunieBerichte chore(build): update JVM target to 25, enforce stable kotlinx-serialization-json, and add bundle size budget checks 2026-01-03 22:53:32 +01:00
kotlin-js-store refactor(frontend, build): update PingViewModel initialization, resolve view model via Koin, and clean yarn dependencies 2026-01-12 19:47:59 +01:00
platform chore(build, dependencies): add Room support with KSP integration and optimize testing dependencies 2026-01-08 23:45:35 +01:00
.dockerignore fix docker-compose.* + .env* 2025-12-04 18:13:54 +01:00
.editorconfig Fix: Test-Commit für VCS-Integration (MP-8) (#15) 2025-11-07 12:26:33 +01:00
.env refactor(build): remove docker-compose hardcoded file, update compose dependencies, and resolve library conflicts 2026-01-08 16:46:40 +01:00
.env.example Versuche 2025-12-31 00:20:29 +01:00
.gitignore upgrade build: Kotlin-JVM Toolchain auf 25 gesetzt, JVM Target korrigiert & Gitignore erweitert 2026-01-03 12:51:43 +01:00
AGENTS.md docs: add 2026 Austrian tournament regulations and special provisions 2026-01-14 14:45:28 +01:00
build.gradle.kts refactor(frontend, build): update PingViewModel initialization, resolve view model via Koin, and clean yarn dependencies 2026-01-12 19:47:59 +01:00
docker-compose.frontend.yaml fix docker-compose.* + .env* Dateien auf den root übersiedelt 2025-12-04 11:30:01 +01:00
docker-compose.services.yaml fix docker-compose.* + .env* Dateien auf den root übersiedelt 2025-12-04 11:30:01 +01:00
docker-compose.yaml refactor(build): remove docker-compose hardcoded file, update compose dependencies, and resolve library conflicts 2026-01-08 16:46:40 +01:00
gradle.properties refactor(frontend, build): update PingViewModel initialization, resolve view model via Koin, and clean yarn dependencies 2026-01-12 19:47:59 +01:00
gradlew refactor(build): remove unused files and adjust JVM toolchain to Java 24 2026-01-03 15:49:09 +01:00
gradlew.bat refactor(build): remove unused files and adjust JVM toolchain to Java 24 2026-01-03 15:49:09 +01:00
LICENSE Create LICENSE 2025-04-17 13:19:13 +02:00
README.md tooling: make .junie/.gemini docs-first (remove legacy guidelines) 2026-01-13 14:32:49 +01:00
settings.gradle.kts refactor(frontend, build): update PingViewModel initialization, resolve view model via Koin, and clean yarn dependencies 2026-01-12 19:47:59 +01:00

Meldestelle

Modulares System für Pferdesportveranstaltungen mit Domain-Driven Design

CI Pipeline Docker SSoT License: MIT


🚀 Quick Start

# 1) Repository klonen
git clone https://github.com/StefanMoCoAt/meldestelle.git
cd meldestelle

# 2) Runtime-Environment vorbereiten (Single Source of Truth)
#   Kopiere die Vorlage und passe sie bei Bedarf an.
cp -n .env.template config/env/.env 2>/dev/null || true
#   Optionale lokale Geheimnisse/Overrides (gitignored):
#   echo "POSTGRES_PASSWORD=meinlokalespasswort" >> config/env/.env.local

# 3) (Optional) Compose-Files generieren
#    (nur falls du die Generator-Pipeline nutzt)
# DOCKER_SSOT_MODE=envless bash scripts/generate-compose-files.sh all development

# 4) Infrastruktur starten
docker compose -f docker-compose.yaml up -d

# 5) Services starten (Beispiel)
./gradlew :backend:services:results:results-service:bootRun
# oder  falls zentral gewollt und unterstützt
# ./gradlew bootRun

Vollständige Anleitung: docs/02_Onboarding/Development/start-local.md


📚 Dokumentation

Single Source of Truth: YouTrack

Die Hauptdokumentation befindet sich in der YouTrack Wissensdatenbank:

👉 Meldestelle Command Center

In YouTrack

  • 🏗️ Bounded Context Dokumentation (Members, Horses, Events, Masterdata)
  • 📡 API-Referenz (automatisch aus KDoc generiert)
  • 🚀 Deployment-Guides (Proxmox, Cloudflare, Nginx)
  • 🔐 Infrastruktur-Konfigurationen (Netzwerk, Datenbanken, Keycloak)
  • 💡 Roadmap & Visionen

Im Repository


🏗️ Architektur

Bounded Contexts (DDD)

Das System ist in unabhängige Domänen aufgeteilt:

  • Members: Mitgliederverwaltung
  • Horses: Pferderegistrierung
  • Events: Veranstaltungsverwaltung
  • Masterdata: Stammdaten (Länder, Altersklassen, Turnierplätze)

Technische Architektur

  • Microservices: Unabhängige Services mit API Gateway
  • Event-Driven: Apache Kafka für asynchrone Kommunikation
  • Polyglot Persistence: PostgreSQL + Redis
  • Container-First: Docker & Docker Compose

Details: ADR-0002 Domain-Driven Design


⚙️ Konfigurationsstruktur (Build vs. Runtime)

Laufzeit (Runtime) Single Source of Truth:

  • config/env/.env globale Runtime-Werte (Ports, Hosts, Feature-Flags, Pfade, Profile)
  • config/env/.env.local lokale, geheime Overrides (gitignored)
  • Optionale DDD-Slice-Overrides (nur wenn nötig):
    • config/env/services/.env (z. B. ping-service.env)
    • config/env/infrastructure/.env (z. B. api-gateway.env)
    • config/env/clients/.env (z. B. web-app.env)

Build-Zeit (nur Versionen/Tags/Pfade):

  • docker/versions.toml zentrale Versionsquelle (SSoT)
  • docker/build-args/global.env aus versions.toml abgeleitet (kann via scripts/generate-build-env.sh erzeugt werden)
  • docker/build-args/{clients,infrastructure,services}.env nur Build-relevante Pfade/Namen; keine Runtime-Variablen

Compose-Anbindung:

  • Alle docker-compose*.yml laden config/env/.env und optional die per-Slice-Overrides via env_file
  • Laufzeitwerte werden nicht via build.args eingeschleust

Deprecations / Umbenennungen:

  • DOCKER_*_VERSION*_IMAGE_TAG (nur Build-Zeit)
  • APP_VERSION wurde vereinheitlicht als VERSION

Schnelltest / Smoke (lokal):

Sicherheits-Hinweise:

  • Keine echten Secrets im Repo; verwende config/env/.env.local für lokale Entwicklung
  • Die optimierten Compose-Dateien (*.optimized) nutzen Docker-Secrets im Profil "prod"

🛠️ Tech Stack

Komponente Technologie Version
Backend Kotlin + Spring Boot 3.x
JVM Java 25
Build Gradle 9.2.1
Datenbank PostgreSQL 16
Cache Redis 7
Messaging Apache Kafka 7.4.0
Auth Keycloak 26.4.2
Monitoring Prometheus + Grafana + Zipkin -
Container Docker + Docker Compose v2.0+

📦 Projektstruktur

Meldestelle/
├── backend/                          # Backend: Gateway, Infrastruktur, Services
│   ├── infrastructure/
│   │   ├── cache/
│   │   ├── event-store/
│   │   ├── gateway/
│   │   ├── messaging/
│   │   └── monitoring/
│   └── services/
│       ├── entries/
│       ├── results/
│       ├── scheduling/
│       ├── ping/
│       └── registry/
├── frontend/                         # Kotlin Multiplatform Frontend (Web/JVM)
│   ├── core/                         # Shared Foundation
│   │   ├── design-system/
│   │   ├── domain/
│   │   ├── network/
│   │   ├── local-db/
│   │   └── navigation/
│   ├── features/                     # Vertikale Slices
│   │   ├── auth-feature/
│   │   └── ping-feature/
│   ├── shared/
│   └── shells/
│       └── meldestelle-portal/
├── core/                             # Gemeinsame Core-Module (JVM/KMP-unabhängig)
│   ├── core-domain/
│   └── core-utils/
├── docs/                             # Repository-Dokumentation
│   ├── adr/                          # Architecture Decision Records (flach)
│   ├── c4/                           # C4-Diagramme (PlantUML)
│   ├── how-to/
│   └── reference/
├── platform/                         # Versionen, BOM und Abhängigkeitsbündel
└── config/                           # Runtime-/Tooling-Konfiguration

🔒 Docker Single Source of Truth (SSoT)

Alle Versionen zentral in docker/versions.toml:

SSoT Schnellstart (präzisiert)

# Versionen anzeigen
bash scripts/docker-build.sh --versions

# Compose-Files generieren (Kompatibilitätsmodus)
bash scripts/generate-compose-files.sh all development

# Konsistenz validieren (Kompatibilitätsmodus)
bash scripts/validate-docker-consistency.sh all

SSoT Zwei Betriebsmodi (konsistent)

# 1) Kompatibilitätsmodus (compat)
bash scripts/docker-versions-update.sh sync
bash scripts/generate-compose-files.sh all development
bash scripts/validate-docker-consistency.sh all

# 2) Env-less Modus (empfohlen)
DOCKER_SSOT_MODE=envless bash scripts/docker-build.sh --versions
DOCKER_SSOT_MODE=envless bash scripts/generate-compose-files.sh all development
DOCKER_SSOT_MODE=envless bash scripts/validate-docker-consistency.sh all

Alternative (persistente Shell-Variante):

export DOCKER_SSOT_MODE=envless
bash scripts/docker-build.sh --versions
bash scripts/generate-compose-files.sh all development
bash scripts/validate-docker-consistency.sh all

CI-Schutz lokal reproduzieren (getrennte/verkettete Befehle)

# Compat
bash scripts/docker-versions-update.sh sync && \
  bash scripts/generate-compose-files.sh all development && \
  bash scripts/validate-docker-consistency.sh all && \
  git diff --name-only  # sollte leer sein

# Env-less (Variante A: prefix)
DOCKER_SSOT_MODE=envless bash scripts/generate-compose-files.sh all development && \
  DOCKER_SSOT_MODE=envless bash scripts/validate-docker-consistency.sh all && \
  git diff --name-only  # sollte leer sein

# Env-less (Variante B: export)
export DOCKER_SSOT_MODE=envless
bash scripts/generate-compose-files.sh all development && \
  bash scripts/validate-docker-consistency.sh all && \
  git diff --name-only  # sollte leer sein

Deployment (klarstellen, falls SSoT vorausgeht)

# Nur Infrastruktur
# Wenn eine handgeschriebene docker-compose.yaml existiert:
docker compose -f docker-compose.yaml up -d
# Falls Compose-Files generiert werden:
docker compose -f docker-compose.services.yaml up -d

# Services via Gradle
a) Einzeldienst
./gradlew :backend:services:results:results-service:bootRun
b) Falls unterstützt: alle (oder Aggregator)
./gradlew bootRun

Details: Siehe Abschnitt "Docker Single Source of Truth (SSoT)" weiter unten


🧪 Testing

Unit Tests

 ./gradlew test

Integration Tests

 ./gradlew integrationTest

Spezifisches Modul testen

 ./gradlew :backend:services:results:results-service:test

🚢 Deployment

Lokale Entwicklung

Nur Infrastruktur (Postgres, Redis, Kafka, Keycloak)

 docker compose -f docker-compose.yaml up -d

Services über Gradle

 ./gradlew bootRun

Docker Single Source of Truth (SSoT)—Details

Dieser Abschnitt beschreibt den lokalen Workflow für die zentrale Docker-Versionsverwaltung.

TL;DR Zwei Betriebsmodi

  • Kompatibilitätsmodus (Standard): build-args/*.env werden aus versions.toml generiert

    bash scripts/docker-versions-update.sh sync
    bash scripts/generate-compose-files.sh all development
    bash scripts/validate-docker-consistency.sh all
    
  • Env-less Modus (Empfohlen): Keine build-args/*.env nötig direkter Export aus versions.toml

    DOCKER_SSOT_MODE=envless bash scripts/docker-build.sh --versions
    DOCKER_SSOT_MODE=envless bash scripts/generate-compose-files.sh all development
    DOCKER_SSOT_MODE=envless bash scripts/validate-docker-consistency.sh all
    

Makefile-Befehle

Das Projekt verwendet ein umfassendes Makefile mit ~50 Befehlen für alle Development-Workflows:

make help  # Zeigt alle verfügbaren Befehle

Wichtigste Befehle:

make full-up         # Startet komplettes System (Infra + Services + Clients)
make services-up     # Startet Backend (Infra + Microservices)
make dev-up          # Startet Development-Environment
make test            # Führt Integration-Tests aus
make health-check    # Prüft System-Health

SSoT-Befehle:

make docker-sync         # Synchronisiert versions.toml -> build-args/*.env
make docker-compose-gen  # Generiert Docker Compose Files
make docker-validate     # Validiert Docker SSoT Konsistenz

Vollständige Referenz: Siehe Makefile (make help) und docs/02_Onboarding/Development/start-local.md.

Was ist die Single Source of Truth?

  • docker/versions.toml enthält alle Versionsangaben (Gradle, Java, Node, Nginx, Postgres, Redis, etc.)
  • Env-less: docker/build-args/*.env sind optional; Variablen zur Laufzeit aus versions.toml
  • docker-compose.yml* werden generiert und referenzieren nur zentrale DOCKER_*-Variablen
  • Dockerfiles deklarieren ARGs ohne Default-Werte

Versionen ändern

 bash scripts/docker-versions-update.sh update gradle 9.2.1
 bash scripts/docker-versions-update.sh update node 22.21.0 
 bash scripts/docker-versions-update.sh update postgres 16-alpine

Danach: generate + validate ausführen!

CI-Schutz

Die CI validiert Docker SSoT in beiden Modi (Matrix: compat + envless).

Lokal reproduzieren:

Compat

bash scripts/docker-versions-update.sh sync && \
  bash scripts/generate-compose-files.sh all development && \
  bash scripts/validate-docker-consistency.sh all && \
  git diff --name-only  # sollte leer sein

Env-less

DOCKER_SSOT_MODE=envless bash scripts/generate-compose-files.sh all development && \
  DOCKER_SSOT_MODE=envless bash scripts/validate-docker-consistency.sh all && \
  git diff --name-only  # sollte leer sein

🔄 Automatisierte Workflows

Workflow Zweck Trigger
ci-main.yml Build, Test, OpenAPI-Lint, Docs-Lint Push/PR
ssot-guard.yml Docker SSoT Validierung Push/PR
docs-kdoc-sync.yml KDoc → YouTrack Sync workflow_dispatch
integration-tests.yml Integration Tests Push/PR
deploy-proxmox.yml Deployment zu Proxmox workflow_dispatch

📜 Lizenz

MIT License


🤝 Contributing

Bitte lies docs/02_Onboarding/Development/branchschutz-und-pr-workflow.md für den PR-Workflow.


📞 Support & Kontakt


Version: 2.0.0 (nach Dokumentations-Refactoring)
letzte Aktualisierung: 31. Oktober 2025