Compare commits
145 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1690da3fab | |||
| cb6e0103e7 | |||
| 98d0bf0c7b | |||
| 0a90b57c2a | |||
| 0ab62a2752 | |||
| 6070709bf2 | |||
| 763c2a9157 | |||
| 4f715d10bb | |||
| 0b830eb675 | |||
| 4c37ecb952 | |||
| c25ef17a4a | |||
| e5e3b4cfec | |||
| 7d064853e5 | |||
| 387180c12c | |||
| 49393d3eac | |||
| e389fe9bce | |||
| 1a4753cd73 | |||
| ece3f8bf78 | |||
| 8d176ce955 | |||
| 280db663c7 | |||
| 74ef6424b7 | |||
| 3959168695 | |||
| 04a435df1d | |||
| 3aaf5cc59c | |||
| a2d94bbc7e | |||
| 95a130c72e | |||
| 223bf77776 | |||
| 99cbfeef11 | |||
| ed1cb507cf | |||
| f4fab93a6c | |||
| 9b9f60a071 | |||
| d219176609 | |||
| 7411038b3b | |||
| 77ee608094 | |||
| 9bee2f233e | |||
| c317147ca4 | |||
| 15222b5453 | |||
| 6f15ada447 | |||
| 8b294d947d | |||
| 66c8838379 | |||
| 022ffccccd | |||
| 8ab6ab1c2a | |||
| 46d993e47f | |||
| 62f9472695 | |||
| b94984043c | |||
| fd78404d72 | |||
| 884ccc0db5 | |||
| 8ecc9fbe52 | |||
| d0edfa2538 | |||
| e1bf4d8454 | |||
| 5a08361f83 | |||
| 5d6d9efd27 | |||
| d493734660 | |||
| 0aaa160b95 | |||
| 03184aa951 | |||
| 34bd42a009 | |||
| 897394e27e | |||
| 9ab914dbfb | |||
| 9659fe3f8a | |||
| 5cbf4fdfc0 | |||
| bd06efe05d | |||
| 23c3e40390 | |||
| 1201755077 | |||
| 162e2ef414 | |||
| 3f291c907c | |||
| 251647a6ab | |||
| 277254ebbd | |||
| f97bfeff47 | |||
| 02a778751a | |||
| af0ece8ded | |||
| 03fa74abba | |||
| 71aea3f41d | |||
| 16c8674eff | |||
| df5276abf2 | |||
| 636ecc9883 | |||
| 92950dbbe6 | |||
| 5c51664e6c | |||
| 3244efd5e0 | |||
| af02e14f2d | |||
| 8730ffa7db | |||
| f7d11ccf97 | |||
| 76e6cebd90 | |||
| dbbca96c69 | |||
| eea022b862 | |||
| 6de5b55810 | |||
| 07bd114df1 | |||
| 84d38f5eb5 | |||
| 9db85236ec | |||
| f2a6078421 | |||
| 568d9dbb32 | |||
| f620f46d15 | |||
| 46d3d7cf35 | |||
| cb22b1bb96 | |||
| 5544b04b07 | |||
| 49d8b205d7 | |||
| f296a076dc | |||
| 1caefe6603 | |||
| 6b690232ff | |||
| 309834d90c | |||
| 8b44edda90 | |||
| 255343145d | |||
| 5baa971b46 | |||
| e65384768f | |||
| beb20e0cf7 | |||
| 98c241fc64 | |||
| d4cc0eb77d | |||
| e0b1ce8836 | |||
| f18b002f4e | |||
| f8913f81b8 | |||
| 9195cdb14d | |||
| 3f4ba9eea9 | |||
| 92028d9e02 | |||
| bdb45eefe4 | |||
| 148b71db48 | |||
| c54ad3830d | |||
| d66bd63cc9 | |||
| 3b4e3db51d | |||
| 2d7046d0e3 | |||
| d9b5c6bfea | |||
| 91a8c38b25 | |||
| 19ba044ec0 | |||
| 9556e0ac67 | |||
| 4692bd186c | |||
| b11432df16 | |||
| 319cb52160 | |||
| a35dfa1434 | |||
| 237c71e5a0 | |||
| ec124e9acd | |||
| 0ab1807235 | |||
| 7cfdd06d1e | |||
| 544fbf792c | |||
| 18e619abfc | |||
| 5eeff24b3a | |||
| f13c2eb35b | |||
| 2662d4e82e | |||
| 574f8c470c | |||
| 9b4af2bb56 | |||
| 1a295c18c8 | |||
| 01bf440f21 | |||
| 7acd9ea4c2 | |||
| 30b53584f8 | |||
| c1327f3186 | |||
| 7a2c5700f9 | |||
| 5b8ef5ea2d | |||
| db58c24613 |
@@ -0,0 +1,50 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd -- "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
|
||||
# shellcheck disable=SC1091
|
||||
source "$SCRIPT_DIR/lib/common.sh"
|
||||
|
||||
REPO_ROOT="$(resolve_repo_root)"
|
||||
cd "$REPO_ROOT"
|
||||
|
||||
# check-docs-drift.sh
|
||||
# Zweck: sehr schlanke Drift-Checks gegen die neue Doku-Struktur.
|
||||
# - Kein Guidelines-System mehr.
|
||||
# - Single Source of Truth: `docs/`
|
||||
|
||||
err=0
|
||||
|
||||
has() { grep -q "$2" "$1" || { echo "[DRIFT] '$2' fehlt in $1"; err=1; }; }
|
||||
miss() { grep -q "$2" "$1" && { echo "[DRIFT] Veralteter Begriff '$2' in $1"; err=1; }; }
|
||||
|
||||
# Harte Altlast-Pfade dürfen nicht mehr vorkommen
|
||||
if git grep -n "docs/00_Domain/" -- docs >/dev/null 2>&1; then
|
||||
echo "[DRIFT] Veralteter Pfad 'docs/00_Domain/' in docs/* gefunden"
|
||||
err=1
|
||||
fi
|
||||
if git grep -n "docs/adr/" -- docs >/dev/null 2>&1; then
|
||||
echo "[DRIFT] Veralteter Pfad 'docs/adr/' in docs/* gefunden"
|
||||
err=1
|
||||
fi
|
||||
if git grep -n "docs/c4/" -- docs >/dev/null 2>&1; then
|
||||
echo "[DRIFT] Veralteter Pfad 'docs/c4/' in docs/* gefunden"
|
||||
err=1
|
||||
fi
|
||||
if git grep -n "docs/how-to/" -- docs >/dev/null 2>&1; then
|
||||
echo "[DRIFT] Veralteter Pfad 'docs/how-to/' in docs/* gefunden"
|
||||
err=1
|
||||
fi
|
||||
if git grep -n "docs/reference/" -- docs >/dev/null 2>&1; then
|
||||
echo "[DRIFT] Veralteter Pfad 'docs/reference/' in docs/* gefunden"
|
||||
err=1
|
||||
fi
|
||||
|
||||
# Quelle der Wahrheit: Gateway-Technologie (sollte in Architektur/ADRs/C4 konsistent sein)
|
||||
has docs/01_Architecture/ARCHITECTURE.md "Spring Cloud Gateway"
|
||||
has docs/01_Architecture/adr/0007-api-gateway-pattern-de.md "Spring Cloud Gateway"
|
||||
miss docs/01_Architecture/adr/0007-api-gateway-pattern-de.md "Ktor"
|
||||
has docs/01_Architecture/c4/02-container-de.puml "Spring Cloud Gateway"
|
||||
miss docs/01_Architecture/c4/02-container-de.puml "Ktor"
|
||||
|
||||
exit $err
|
||||
@@ -0,0 +1,27 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Common helpers for AI guardrail scripts
|
||||
|
||||
# Robustly resolve the repository root directory.
|
||||
# Strategy: prefer Git; fallback to marker search upwards; last resort: current dir.
|
||||
resolve_repo_root() {
|
||||
local start
|
||||
start="${1:-$(cd -- "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)}"
|
||||
if command -v git >/dev/null 2>&1; then
|
||||
if git -C "$start" rev-parse --show-toplevel >/dev/null 2>&1; then
|
||||
git -C "$start" rev-parse --show-toplevel
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
local dir
|
||||
dir="$(cd "$start" && pwd)"
|
||||
while [ "$dir" != "/" ]; do
|
||||
if [ -f "$dir/gradlew" ] || [ -f "$dir/settings.gradle.kts" ] || [ -d "$dir/.git" ]; then
|
||||
echo "$dir"
|
||||
return 0
|
||||
fi
|
||||
dir="$(dirname "$dir")"
|
||||
done
|
||||
pwd
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd -- "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
|
||||
# shellcheck disable=SC1091
|
||||
source "$SCRIPT_DIR/lib/common.sh"
|
||||
|
||||
REPO_ROOT="$(resolve_repo_root)"
|
||||
cd "$REPO_ROOT"
|
||||
|
||||
mkdir -p build/diagrams
|
||||
shopt -s nullglob
|
||||
for f in docs/architecture/c4/*.puml; do
|
||||
docker run --rm -v "$PWD":/data plantuml/plantuml -tsvg "/data/$f" -o "/data/build/diagrams"
|
||||
echo "Rendered build/diagrams/$(basename "${f%.puml}").svg"
|
||||
done
|
||||
@@ -0,0 +1,127 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd -- "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
|
||||
# shellcheck disable=SC1091
|
||||
source "$SCRIPT_DIR/lib/common.sh"
|
||||
|
||||
REPO_ROOT="$(resolve_repo_root)"
|
||||
cd "$REPO_ROOT"
|
||||
|
||||
QUICK_MODE=false
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
--quick)
|
||||
QUICK_MODE=true
|
||||
shift
|
||||
;;
|
||||
--help|-h)
|
||||
cat << 'EOF'
|
||||
Docs Link-Validierung
|
||||
|
||||
USAGE:
|
||||
./.ai/scripts/validate-links.sh [--quick]
|
||||
|
||||
BESCHREIBUNG:
|
||||
Prüft Markdown-Links in `docs/**/*.md` auf gebrochene relative Pfade.
|
||||
Ignoriert externe Links (http/https/mailto) sowie reine Anchors (#...).
|
||||
|
||||
OPTIONEN:
|
||||
--quick Führt nur eine Teilmenge der Prüfungen durch (aktuell nicht implementiert).
|
||||
EOF
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo "[ERROR] Unbekannter Parameter: $1" >&2
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
python3 - <<'PY'
|
||||
import re
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from urllib.parse import unquote
|
||||
|
||||
root = Path.cwd()
|
||||
docs_dir = root / "docs"
|
||||
|
||||
if not docs_dir.is_dir():
|
||||
print(f"[ERROR] docs-Verzeichnis nicht gefunden: {docs_dir}", file=sys.stderr)
|
||||
sys.exit(2)
|
||||
|
||||
# Veraltete Pfad-Prüfungen wurden entfernt; Fokus auf Link-Integrität.
|
||||
FORBIDDEN_SUBSTRINGS = []
|
||||
|
||||
md_files = sorted(docs_dir.rglob("*.md"))
|
||||
|
||||
link_pattern = re.compile(r"\]\(([^)]+)\)")
|
||||
|
||||
errors = 0
|
||||
|
||||
def is_external(target: str) -> bool:
|
||||
t = target.lower()
|
||||
return t.startswith("http://") or t.startswith("https://") or t.startswith("mailto:")
|
||||
|
||||
def strip_fragment_and_query(target: str) -> str:
|
||||
target = target.split("#", 1)[0]
|
||||
target = target.split("?", 1)[0]
|
||||
return target
|
||||
|
||||
for f in md_files:
|
||||
text = f.read_text(encoding="utf-8", errors="replace")
|
||||
|
||||
for forbidden in FORBIDDEN_SUBSTRINGS:
|
||||
if forbidden in text:
|
||||
print(f"[ERROR] Veralteter Pfad '{forbidden}' in {f}")
|
||||
errors += 1
|
||||
|
||||
for match in link_pattern.finditer(text):
|
||||
target = match.group(1).strip()
|
||||
|
||||
if not target:
|
||||
continue
|
||||
if is_external(target):
|
||||
continue
|
||||
if target.startswith("#"):
|
||||
continue
|
||||
|
||||
if target.startswith("<") and target.endswith(">"):
|
||||
target = target[1:-1]
|
||||
|
||||
target = unquote(strip_fragment_and_query(target))
|
||||
|
||||
if target.startswith("/"):
|
||||
continue
|
||||
|
||||
if ":" in target.split("/", 1)[0]:
|
||||
# z.B. "vscode:..."
|
||||
continue
|
||||
|
||||
resolved = (f.parent / target).resolve()
|
||||
|
||||
try:
|
||||
resolved.relative_to(root.resolve())
|
||||
except ValueError:
|
||||
print(f"[ERROR] Link zeigt außerhalb des Repos: {f} -> {target}")
|
||||
errors += 1
|
||||
continue
|
||||
|
||||
if resolved.is_dir():
|
||||
if not (resolved / "README.md").is_file():
|
||||
print(f"[ERROR] Verlinktes Verzeichnis ohne README.md: {f} -> {target}")
|
||||
errors += 1
|
||||
continue
|
||||
|
||||
if not resolved.exists():
|
||||
print(f"[ERROR] Broken link: {f} -> {target}")
|
||||
errors += 1
|
||||
|
||||
if errors:
|
||||
print(f"[ERROR] Link-Validierung fehlgeschlagen: {errors} Fehler")
|
||||
sys.exit(1)
|
||||
|
||||
print(f"[OK] Link-Validierung erfolgreich: {len(md_files)} Markdown-Dateien geprüft")
|
||||
PY
|
||||
+1
-1
@@ -193,7 +193,7 @@ secrets/
|
||||
# ===================================================================
|
||||
TODO*.md
|
||||
NOTES*.md
|
||||
**/.junie/
|
||||
.junie/
|
||||
|
||||
# ===================================================================
|
||||
# Keep essential files (override exclusions)
|
||||
|
||||
@@ -20,6 +20,7 @@ DOCKER_GRADLE_VERSION=9.3.1
|
||||
DOCKER_JAVA_VERSION=25
|
||||
DOCKER_NODE_VERSION=24.12.0
|
||||
DOCKER_NGINX_VERSION=1.28.0-alpine
|
||||
DOCKER_CADDY_VERSION=2.11-alpine
|
||||
|
||||
# JVM Power Flags (Lokal leer lassen, da Intel/AMD Architektur)
|
||||
JVM_OPTS_ARM64=
|
||||
@@ -96,6 +97,7 @@ CONSUL_IMAGE=hashicorp/consul:1.22.1
|
||||
CONSUL_PORT=8500:8500
|
||||
CONSUL_UDP_PORT=8600:8600/udp
|
||||
CONSUL_HOST=consul
|
||||
CONSUL_HTTP_PORT=8500
|
||||
SPRING_CLOUD_CONSUL_HOST=consul
|
||||
SPRING_CLOUD_CONSUL_PORT=8500
|
||||
SPRING_CLOUD_CONSUL_DISCOVERY_SERVICE_NAME=api-gateway
|
||||
@@ -159,6 +161,8 @@ PING_CONSUL_PREFER_IP=true
|
||||
MAIL_PORT=8083:8083
|
||||
MAIL_DEBUG_PORT=5014:5014
|
||||
MAIL_SERVER_PORT=8083
|
||||
MAIL_SERVICE_URL=http://10.0.0.50:8092
|
||||
|
||||
MAIL_SPRING_PROFILES_ACTIVE=docker
|
||||
MAIL_DEBUG=true
|
||||
MAIL_SERVICE_NAME=mail-service
|
||||
@@ -166,18 +170,31 @@ MAIL_CONSUL_PREFER_IP=true
|
||||
MAIL_SMTP_HOST=smtp.world4you.com
|
||||
MAIL_SMTP_PORT=587
|
||||
MAIL_SMTP_USER=online-nennen@mo-code.at
|
||||
MAIL_SMTP_PASSWORD=secret
|
||||
MAIL_SMTP_PASSWORD=Mogi#2reiten
|
||||
MAIL_SMTP_AUTH=true
|
||||
MAIL_SMTP_STARTTLS=true
|
||||
|
||||
SPRING_MAIL_HOST=smtp.world4you.com
|
||||
SPRING_MAIL_PORT=587
|
||||
SPRING_MAIL_USERNAME=online-nennen@mo-code.at
|
||||
SPRING_MAIL_PASSWORD=Mogi#2reiten
|
||||
SPRING_MAIL_PROPERTIES_MAIL_SMTP_AUTH=false
|
||||
SPRING_MAIL_PROPERTIES_MAIL_SMTP_STARTTLS_ENABLE=false
|
||||
SPRING_CLOUD_CONSUL_DISCOVERY_ENABLED=false
|
||||
SPRING_CLOUD_CONSUL_ENABLED=false
|
||||
MAIL_POLLING_ENABLED=false
|
||||
|
||||
|
||||
# --- MASTERDATA-SERVICE ---
|
||||
MASTERDATA_PORT=8086:8086
|
||||
MASTERDATA_DEBUG_PORT=5007:5007
|
||||
MASTERDATA_SERVER_PORT=8086
|
||||
MASTERDATA_KTOR_PORT=8091
|
||||
MASTERDATA_SPRING_PROFILES_ACTIVE=docker
|
||||
MASTERDATA_DEBUG=true
|
||||
MASTERDATA_SERVICE_NAME=masterdata-service
|
||||
MASTERDATA_CONSUL_PREFER_IP=true
|
||||
MASTERDATA_SERVICE_HOSTNAME=masterdata-service
|
||||
|
||||
# --- EVENTS-SERVICE ---
|
||||
EVENTS_PORT=8085:8085
|
||||
@@ -235,7 +252,7 @@ SERIES_CONSUL_PREFER_IP=true
|
||||
|
||||
# --- WEB-APP ---
|
||||
CADDY_VERSION=2.11-alpine
|
||||
WEB_APP_PORT=4000:4000
|
||||
WEB_APP_PORT=8080:80
|
||||
WEB_BUILD_PROFILE=dev
|
||||
# Lokal: http://localhost:8081 | Produktion: http://10.0.0.50:8081
|
||||
WEB_APP_API_URL=http://localhost:8081
|
||||
|
||||
@@ -1,13 +1,24 @@
|
||||
name: Desktop CI — Headless Tests & Build
|
||||
|
||||
on:
|
||||
# Nur ausführen, wenn explizit das Desktop-Shell-Modul geändert wurde
|
||||
push:
|
||||
branches: [ main, master ]
|
||||
paths:
|
||||
- 'frontend/shells/meldestelle-desktop/**'
|
||||
- '.gitea/workflows/desktop-tests.yml'
|
||||
pull_request:
|
||||
branches: [ main, master ]
|
||||
paths:
|
||||
- 'frontend/shells/meldestelle-desktop/**'
|
||||
# Manuell startbar, falls benötigt
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
desktop-tests:
|
||||
# Komplett deaktivierbar über Repo-Variable: Settings → Variables → DESKTOP_CI_ENABLED=true
|
||||
# Zusätzlich: Für Plan‑B‑Builds überspringen, wenn Commit-Message [planb] enthält
|
||||
if: ${{ vars.DESKTOP_CI_ENABLED == 'true' && !contains(gitea.event.head_commit.message, '[planb]') }}
|
||||
name: Compose Desktop — Tests (headless) & Build
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
@@ -38,12 +49,12 @@ jobs:
|
||||
- name: Show Gradle version
|
||||
run: ./gradlew --version
|
||||
|
||||
- name: Run Desktop tests headless (Xvfb)
|
||||
- name: Run Desktop tests headless (xvfb)
|
||||
env:
|
||||
_JAVA_OPTIONS: -Djava.awt.headless=true
|
||||
run: |
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y Xvfb
|
||||
sudo apt-get install -y xvfb xauth
|
||||
xvfb-run --auto-servernum --server-args="-screen 0 1920x1080x24" \
|
||||
./gradlew :frontend:shells:meldestelle-desktop:jvmTest --stacktrace --no-daemon
|
||||
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
name: Build and Publish Docker Images
|
||||
run-name: Build & Publish by @${{ github.actor }}
|
||||
run-name: Build & Publish by @${{ gitea.actor }}
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "main" ]
|
||||
tags:
|
||||
- 'v*'
|
||||
paths:
|
||||
- 'backend/**'
|
||||
- 'platform/**'
|
||||
@@ -33,18 +35,11 @@ jobs:
|
||||
max-parallel: 1
|
||||
matrix:
|
||||
include:
|
||||
- service: keycloak
|
||||
# Plan-B fokussiert: Nur Mail-Service + Web-App bauen/pushen (beschleunigt CI deutlich)
|
||||
- service: mail-service
|
||||
context: .
|
||||
dockerfile: config/docker/keycloak/Dockerfile
|
||||
image: keycloak
|
||||
- service: api-gateway
|
||||
context: .
|
||||
dockerfile: backend/infrastructure/gateway/Dockerfile
|
||||
image: api-gateway
|
||||
- service: ping-service
|
||||
context: .
|
||||
dockerfile: backend/services/ping/Dockerfile
|
||||
image: ping-service
|
||||
dockerfile: backend/services/mail/Dockerfile
|
||||
image: mail-service
|
||||
- service: web-app
|
||||
context: .
|
||||
dockerfile: config/docker/caddy/web-app/Dockerfile
|
||||
@@ -61,43 +56,42 @@ jobs:
|
||||
distribution: "temurin"
|
||||
cache: gradle
|
||||
|
||||
- name: Setup Gradle Cache
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
~/.gradle/caches
|
||||
~/.gradle/wrapper
|
||||
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-gradle-
|
||||
|
||||
# Verhindert mysteriöse Build-Fehler durch korrupte Node/Kotlin-Caches (nur web-app relevant)
|
||||
- name: Cleanup stale build caches
|
||||
if: matrix.service == 'web-app'
|
||||
run: |
|
||||
rm -rf frontend/shells/meldestelle-portal/build/js/node_modules/.cache || true
|
||||
rm -rf frontend/shells/meldestelle-portal/build/js/.yarn/cache || true
|
||||
rm -rf ~/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-compiler-embeddable || true
|
||||
|
||||
- name: Build Frontend (Kotlin JS)
|
||||
# --- SCHRITT 1: Build mit radikalem Clean (gegen die März-Leichen) ---
|
||||
- name: Build Frontend (Wasm JS)
|
||||
if: matrix.service == 'web-app'
|
||||
run: |
|
||||
chmod +x gradlew
|
||||
./gradlew :frontend:shells:meldestelle-portal:jsBrowserDistribution \
|
||||
# Löscht alte Build-Stände komplett
|
||||
./gradlew :frontend:shells:meldestelle-web:clean
|
||||
|
||||
./gradlew :frontend:shells:meldestelle-web:wasmJsBrowserDistribution \
|
||||
-Pproduction=true \
|
||||
--max-workers=4 \
|
||||
-Dkotlin.daemon.jvm.options="-Xmx4g"
|
||||
|
||||
# Pangolin-Bypass: Credentials direkt in config.json schreiben.
|
||||
# Kein "docker login" → kein Daemon-Ping → kein HTTPS-Fehler.
|
||||
# BuildKit liest ~/.docker/config.json und verwendet diese Credentials beim Push.
|
||||
# - name: Registry-Credentials konfigurieren (kein Daemon-Kontakt)
|
||||
# run: |
|
||||
# mkdir -p ~/.docker
|
||||
# AUTH=$(echo -n "${{ secrets.REGISTRY_USER }}:${{ secrets.REGISTRY_TOKEN }}" | base64 -w 0)
|
||||
# printf '{"auths":{"%s":{"auth":"%s"}}}\n' "${{ env.REGISTRY_INTERNAL }}" "${AUTH}" > ~/.docker/config.json
|
||||
# echo "✓ Credentials für ${{ env.REGISTRY_INTERNAL }} gespeichert"
|
||||
# --- SCHRITT 2: Staging ohne rsync (Fix für dein Log-Fehler) ---
|
||||
- name: Stage Web Assets for Docker build
|
||||
if: matrix.service == 'web-app'
|
||||
run: |
|
||||
set -e
|
||||
DIST_DIR="frontend/shells/meldestelle-web/build/dist/wasmJs/productionExecutable"
|
||||
TARGET_DIR="config/docker/caddy/web-app/_site"
|
||||
|
||||
if [ ! -d "$DIST_DIR" ]; then
|
||||
echo "❌ Fehler: Build-Verzeichnis nicht gefunden!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Ersetzt rsync durch sicheres Löschen & Kopieren
|
||||
rm -rf "$TARGET_DIR"
|
||||
mkdir -p "$TARGET_DIR"
|
||||
cp -r "$DIST_DIR"/. "$TARGET_DIR/"
|
||||
# Kopiere Turnier-Ausschreibungen (PDFs) für Plan-B
|
||||
cp docs/Neumarkt2026/*.pdf "$TARGET_DIR/" || true
|
||||
|
||||
echo "✓ Assets für Docker vorbereitet (Stand: $(date))"
|
||||
|
||||
# --- SCHRITT 3: Login & BuildX ---
|
||||
# NEU (sauber, nach daemon.json-Fix):
|
||||
- name: Login to Gitea Registry
|
||||
uses: docker/login-action@v3
|
||||
@@ -122,8 +116,9 @@ jobs:
|
||||
with:
|
||||
images: ${{ env.REGISTRY_INTERNAL }}/${{ env.IMAGE_PREFIX }}/${{ matrix.image }}
|
||||
tags: |
|
||||
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }}
|
||||
type=sha,format=long
|
||||
type=ref,event=tag
|
||||
type=raw,value=latest,enable=${{ gitea.ref == 'refs/heads/main' }}
|
||||
type=sha,format=long,enable=${{ gitea.ref == 'refs/heads/main' }}
|
||||
|
||||
- name: Build and push Docker image
|
||||
uses: docker/build-push-action@v6
|
||||
@@ -137,9 +132,5 @@ jobs:
|
||||
provenance: false
|
||||
sbom: false
|
||||
build-args: |
|
||||
DOCKER_BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')
|
||||
VERSION=${{ github.sha }}
|
||||
GRADLE_VERSION=${{ env.GRADLE_VERSION }}
|
||||
JAVA_VERSION=${{ env.JAVA_VERSION }}
|
||||
KEYCLOAK_IMAGE_TAG=${{ env.KEYCLOAK_IMAGE_TAG }}
|
||||
JVM_OPTS_APPEND=${{ env.JVM_OPTS_ARM64 }}
|
||||
BUILD_DATE=${{ gitea.event.head_commit.timestamp || 'unknown' }}
|
||||
VERSION=${{ gitea.sha }}
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
name: Feature Build — Windows MSI (via Conveyor)
|
||||
on:
|
||||
workflow_dispatch: # Nur noch manueller Start möglich, da ARM64-Runner inkompatibel
|
||||
# push:
|
||||
# branches: [ "feature/*" ] # Deaktiviert wegen ARM64 Exec Format Error
|
||||
|
||||
jobs:
|
||||
package-windows:
|
||||
name: 📦 Windows .msi Packaging
|
||||
# Desktop-CI ist nun via Conveyor auf Linux möglich
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup JDK 21 (Temurin)
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: '21'
|
||||
cache: gradle
|
||||
|
||||
- name: Gradle Build (Uber-JAR)
|
||||
run: |
|
||||
./gradlew :frontend:shells:meldestelle-desktop:jvmJar --no-daemon
|
||||
ls -lh frontend/shells/meldestelle-desktop/build/libs/
|
||||
|
||||
- name: Setup Conveyor
|
||||
run: |
|
||||
# Conveyor-Installation via Debian-Paket (stabiler in CI)
|
||||
sudo apt-get update && sudo apt-get install -y curl
|
||||
# Wir nutzen die offizielle Empfehlung für Debian-basierte Systeme
|
||||
curl -L https://conveyor.hydraulic.dev/install.sh -o install-conveyor.sh
|
||||
# Validierung: Wenn es kein Shell-Skript ist (sondern HTML), abbrechen
|
||||
if grep -q "<!DOCTYPE HTML" install-conveyor.sh; then
|
||||
echo "Fehler: Download-URL lieferte HTML statt Skript. Nutze npm-Fallback."
|
||||
npm install -g @hydraulic/conveyor
|
||||
else
|
||||
chmod +x install-conveyor.sh
|
||||
./install-conveyor.sh
|
||||
fi
|
||||
echo "$HOME/.conveyor/bin" >> $GITEA_PATH
|
||||
|
||||
- name: Windows .msi mit Conveyor bauen
|
||||
run: |
|
||||
# HINWEIS: Erfordert aktuell einen x64-Linux-Runner.
|
||||
# Schlägt auf ARM64 (Zora) mit 'Exec format error' fehl.
|
||||
CONVEYOR_BIN=$(which conveyor || echo "$HOME/.conveyor/bin/conveyor")
|
||||
$CONVEYOR_BIN make windows-msi
|
||||
|
||||
- name: .msi Artefakt hochladen
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: meldestelle-windows-feature-build
|
||||
path: output/*.msi
|
||||
if-no-files-found: error
|
||||
@@ -4,6 +4,8 @@ on:
|
||||
branches: [ "**" ]
|
||||
jobs:
|
||||
no-hardcoded-versions:
|
||||
# Für Plan-B-Builds überspringen: Commit-Message enthält [planb]
|
||||
if: ${{ !contains(gitea.event.head_commit.message, '[planb]') }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
@@ -22,6 +22,8 @@ jobs:
|
||||
# =============================================================
|
||||
tag-release:
|
||||
name: 🏷️ Git-Tag setzen
|
||||
# Für Plan-B-Builds überspringen: Commit-Message enthält [planb]
|
||||
if: ${{ !contains(gitea.event.head_commit.message, '[planb]') }}
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
version: ${{ steps.read-version.outputs.version }}
|
||||
@@ -62,7 +64,7 @@ jobs:
|
||||
fi
|
||||
|
||||
- name: Git-Tag erstellen & pushen
|
||||
if: steps.check-tag.outputs.already_tagged == 'false' && github.event.inputs.dry_run != 'true'
|
||||
if: steps.check-tag.outputs.already_tagged == 'false' && gitea.event.inputs.dry_run != 'true'
|
||||
run: |
|
||||
TAG="${{ steps.read-version.outputs.tag }}"
|
||||
VERSION="${{ steps.read-version.outputs.version }}"
|
||||
@@ -77,6 +79,8 @@ jobs:
|
||||
# =============================================================
|
||||
package-linux:
|
||||
name: 📦 Linux .deb Packaging
|
||||
# Nur ausführen, wenn Desktop-CI explizit aktiviert ist UND kein Plan‑B Commit
|
||||
if: ${{ vars.DESKTOP_CI_ENABLED == 'true' && !contains(gitea.event.head_commit.message, '[planb]') }}
|
||||
runs-on: ubuntu-latest
|
||||
needs: tag-release
|
||||
|
||||
@@ -84,11 +88,11 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup JDK 21 (Temurin)
|
||||
- name: Setup JDK 25 (Temurin)
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: temurin
|
||||
java-version: '21'
|
||||
java-version: '25'
|
||||
|
||||
- name: Gradle cache
|
||||
uses: actions/cache@v4
|
||||
@@ -123,6 +127,8 @@ jobs:
|
||||
# =============================================================
|
||||
package-windows:
|
||||
name: 📦 Windows .msi Packaging
|
||||
# Nur ausführen, wenn Desktop-CI explizit aktiviert ist UND kein Plan‑B Commit
|
||||
if: ${{ vars.DESKTOP_CI_ENABLED == 'true' && !contains(gitea.event.head_commit.message, '[planb]') }}
|
||||
runs-on: windows-latest
|
||||
needs: tag-release
|
||||
|
||||
@@ -130,11 +136,11 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup JDK 21 (Temurin)
|
||||
- name: Setup JDK 25 (Temurin)
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: temurin
|
||||
java-version: '21'
|
||||
java-version: '25'
|
||||
|
||||
- name: Gradle cache
|
||||
uses: actions/cache@v4
|
||||
@@ -173,11 +179,11 @@ jobs:
|
||||
steps:
|
||||
- name: Summary ausgeben
|
||||
run: |
|
||||
echo "## 🚀 Release ${{ needs.tag-release.outputs.version }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Artefakt | Status |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "|----------|--------|" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Linux .deb | ${{ needs.package-linux.result }} |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Windows .msi | ${{ needs.package-windows.result }} |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "**Git-Tag:** \`${{ needs.tag-release.outputs.tag }}\`" >> $GITHUB_STEP_SUMMARY
|
||||
echo "## 🚀 Release ${{ needs.tag-release.outputs.version }}" >> $GITEA_STEP_SUMMARY
|
||||
echo "" >> $GITEA_STEP_SUMMARY
|
||||
echo "| Artefakt | Status |" >> $GITEA_STEP_SUMMARY
|
||||
echo "|----------|--------|" >> $GITEA_STEP_SUMMARY
|
||||
echo "| Linux .deb | ${{ needs.package-linux.result }} |" >> $GITEA_STEP_SUMMARY
|
||||
echo "| Windows .msi | ${{ needs.package-windows.result }} |" >> $GITEA_STEP_SUMMARY
|
||||
echo "" >> $GITEA_STEP_SUMMARY
|
||||
echo "**Git-Tag:** \`${{ needs.tag-release.outputs.tag }}\`" >> $GITEA_STEP_SUMMARY
|
||||
|
||||
+62
-1
@@ -1 +1,62 @@
|
||||
/.idea/
|
||||
# 🐧 [DevOps Engineer] Optimierte .gitignore für Meldestelle (KMP / Gradle / Docker)
|
||||
|
||||
# --- IDE & Editor ---
|
||||
.idea/
|
||||
*.iml
|
||||
*.iws
|
||||
*.ipr
|
||||
out/
|
||||
.vscode/
|
||||
.history/
|
||||
.shelf/
|
||||
|
||||
# --- Gradle ---
|
||||
.gradle/
|
||||
build/
|
||||
!**/src/**/build/
|
||||
gradle-app.setting
|
||||
!gradle-wrapper.jar
|
||||
.gradletasknamecache
|
||||
bin/
|
||||
|
||||
# --- Kotlin / KMP ---
|
||||
.kotlin/
|
||||
kotlin-js-store/
|
||||
.jetbrains/
|
||||
|
||||
# --- Android (falls relevant) ---
|
||||
*.ap_
|
||||
*.apk
|
||||
*.dex
|
||||
local.properties
|
||||
|
||||
# --- Node / JS (Compose Web / KMP JS) ---
|
||||
node_modules/
|
||||
package-lock.json
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
.npm/
|
||||
|
||||
# --- Docker & Infrastructure ---
|
||||
.docker/
|
||||
*.log
|
||||
logs/
|
||||
.env
|
||||
!.env.example
|
||||
.data/
|
||||
postgres-data/
|
||||
|
||||
# --- OS Specific ---
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
desktop.ini
|
||||
|
||||
# --- Project Specific ---
|
||||
docs/temp/
|
||||
docs/Bin/
|
||||
docs/_archive/
|
||||
|
||||
# Conveyor
|
||||
conveyor.rootkey
|
||||
output/
|
||||
|
||||
Generated
-1
@@ -1 +0,0 @@
|
||||
Meldestelle
|
||||
Generated
-6
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="AndroidProjectSystem">
|
||||
<option name="providerId" value="com.android.tools.idea.GradleProjectSystem" />
|
||||
</component>
|
||||
</project>
|
||||
Generated
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="auth-jvm-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/core/auth/build/libs</output-path>
|
||||
<root id="archive" name="auth-jvm-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.core.auth.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
Generated
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="auth-wasm-js-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/core/auth/build/libs</output-path>
|
||||
<root id="archive" name="auth-wasm-js-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.core.auth.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="billing-domain-jvm-1.0.0-SNAPSHOT">
|
||||
<output-path>$PROJECT_DIR$/backend/services/billing/billing-domain/build/libs</output-path>
|
||||
<root id="archive" name="billing-domain-jvm-1.0.0-SNAPSHOT.jar">
|
||||
<element id="module-output" name="Meldestelle.backend.services.billing.billing-domain.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="billing-domain-wasm-js-1.0.0-SNAPSHOT">
|
||||
<output-path>$PROJECT_DIR$/backend/services/billing/billing-domain/build/libs</output-path>
|
||||
<root id="archive" name="billing-domain-wasm-js-1.0.0-SNAPSHOT.jar">
|
||||
<element id="module-output" name="Meldestelle.backend.services.billing.billing-domain.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="billing-feature-jvm-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/features/billing-feature/build/libs</output-path>
|
||||
<root id="archive" name="billing-feature-jvm-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.features.billing-feature.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="billing-feature-wasm-js-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/features/billing-feature/build/libs</output-path>
|
||||
<root id="archive" name="billing-feature-wasm-js-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.features.billing-feature.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="core-domain-jvm-1.0.0-SNAPSHOT">
|
||||
<output-path>$PROJECT_DIR$/core/core-domain/build/libs</output-path>
|
||||
<root id="archive" name="core-domain-jvm-1.0.0-SNAPSHOT.jar">
|
||||
<element id="module-output" name="Meldestelle.core.core-domain.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="core-domain-wasm-js-1.0.0-SNAPSHOT">
|
||||
<output-path>$PROJECT_DIR$/core/core-domain/build/libs</output-path>
|
||||
<root id="archive" name="core-domain-wasm-js-1.0.0-SNAPSHOT.jar">
|
||||
<element id="module-output" name="Meldestelle.core.core-domain.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="core-utils-jvm-1.0.0-SNAPSHOT">
|
||||
<output-path>$PROJECT_DIR$/core/core-utils/build/libs</output-path>
|
||||
<root id="archive" name="core-utils-jvm-1.0.0-SNAPSHOT.jar">
|
||||
<element id="module-output" name="Meldestelle.core.core-utils.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="core-utils-wasm-js-1.0.0-SNAPSHOT">
|
||||
<output-path>$PROJECT_DIR$/core/core-utils/build/libs</output-path>
|
||||
<root id="archive" name="core-utils-wasm-js-1.0.0-SNAPSHOT.jar">
|
||||
<element id="module-output" name="Meldestelle.core.core-utils.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="design-system-jvm-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/core/design-system/build/libs</output-path>
|
||||
<root id="archive" name="design-system-jvm-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.core.design-system.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,6 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="design-system-jvm-1.0.0-SNAPSHOT">
|
||||
<output-path>$PROJECT_DIR$/frontend/core/design-system/build/libs</output-path>
|
||||
<root id="archive" name="design-system-jvm-1.0.0-SNAPSHOT.jar" />
|
||||
</artifact>
|
||||
</component>
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="design-system-wasm-js-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/core/design-system/build/libs</output-path>
|
||||
<root id="archive" name="design-system-wasm-js-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.core.design-system.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,6 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="design-system-wasm-js-1.0.0-SNAPSHOT">
|
||||
<output-path>$PROJECT_DIR$/frontend/core/design-system/build/libs</output-path>
|
||||
<root id="archive" name="design-system-wasm-js-1.0.0-SNAPSHOT.jar" />
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="device-initialization-jvm-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/features/device-initialization/build/libs</output-path>
|
||||
<root id="archive" name="device-initialization-jvm-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.features.device-initialization.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="device-initialization-wasm-js-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/features/device-initialization/build/libs</output-path>
|
||||
<root id="archive" name="device-initialization-wasm-js-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.features.device-initialization.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
Generated
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="domain-jvm-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/core/domain/build/libs</output-path>
|
||||
<root id="archive" name="domain-jvm-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.core.domain.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="domain-jvm-1.0.0-SNAPSHOT">
|
||||
<output-path>$PROJECT_DIR$/frontend/core/domain/build/libs</output-path>
|
||||
<root id="archive" name="domain-jvm-1.0.0-SNAPSHOT.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.core.domain.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
Generated
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="domain-wasm-js-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/core/domain/build/libs</output-path>
|
||||
<root id="archive" name="domain-wasm-js-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.core.domain.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="domain-wasm-js-1.0.0-SNAPSHOT">
|
||||
<output-path>$PROJECT_DIR$/frontend/core/domain/build/libs</output-path>
|
||||
<root id="archive" name="domain-wasm-js-1.0.0-SNAPSHOT.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.core.domain.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="entries-api-jvm-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/backend/services/entries/entries-api/build/libs</output-path>
|
||||
<root id="archive" name="entries-api-jvm-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.backend.services.entries.entries-api.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="entries-api-wasm-js-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/backend/services/entries/entries-api/build/libs</output-path>
|
||||
<root id="archive" name="entries-api-wasm-js-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.backend.services.entries.entries-api.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="entries-domain-jvm-1.0.0-SNAPSHOT">
|
||||
<output-path>$PROJECT_DIR$/backend/services/entries/entries-domain/build/libs</output-path>
|
||||
<root id="archive" name="entries-domain-jvm-1.0.0-SNAPSHOT.jar">
|
||||
<element id="module-output" name="Meldestelle.backend.services.entries.entries-domain.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="entries-domain-wasm-js-1.0.0-SNAPSHOT">
|
||||
<output-path>$PROJECT_DIR$/backend/services/entries/entries-domain/build/libs</output-path>
|
||||
<root id="archive" name="entries-domain-wasm-js-1.0.0-SNAPSHOT.jar">
|
||||
<element id="module-output" name="Meldestelle.backend.services.entries.entries-domain.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="events-common-jvm-1.0.0-SNAPSHOT">
|
||||
<output-path>$PROJECT_DIR$/backend/services/events/events-common/build/libs</output-path>
|
||||
<root id="archive" name="events-common-jvm-1.0.0-SNAPSHOT.jar">
|
||||
<element id="module-output" name="Meldestelle.backend.services.events.events-common.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="events-common-wasm-js-1.0.0-SNAPSHOT">
|
||||
<output-path>$PROJECT_DIR$/backend/services/events/events-common/build/libs</output-path>
|
||||
<root id="archive" name="events-common-wasm-js-1.0.0-SNAPSHOT.jar">
|
||||
<element id="module-output" name="Meldestelle.backend.services.events.events-common.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="funktionaer-feature-jvm-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/features/funktionaer-feature/build/libs</output-path>
|
||||
<root id="archive" name="funktionaer-feature-jvm-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.features.funktionaer-feature.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="funktionaer-feature-wasm-js-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/features/funktionaer-feature/build/libs</output-path>
|
||||
<root id="archive" name="funktionaer-feature-wasm-js-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.features.funktionaer-feature.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
Generated
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="local-db-jvm-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/core/local-db/build/libs</output-path>
|
||||
<root id="archive" name="local-db-jvm-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.core.local-db.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="local-db-jvm-1.0.0-SNAPSHOT">
|
||||
<output-path>$PROJECT_DIR$/frontend/core/local-db/build/libs</output-path>
|
||||
<root id="archive" name="local-db-jvm-1.0.0-SNAPSHOT.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.core.local-db.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="local-db-wasm-js-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/core/local-db/build/libs</output-path>
|
||||
<root id="archive" name="local-db-wasm-js-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.core.local-db.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="local-db-wasm-js-1.0.0-SNAPSHOT">
|
||||
<output-path>$PROJECT_DIR$/frontend/core/local-db/build/libs</output-path>
|
||||
<root id="archive" name="local-db-wasm-js-1.0.0-SNAPSHOT.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.core.local-db.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="masterdata-domain-jvm-1.0.0-SNAPSHOT">
|
||||
<output-path>$PROJECT_DIR$/backend/services/masterdata/masterdata-domain/build/libs</output-path>
|
||||
<root id="archive" name="masterdata-domain-jvm-1.0.0-SNAPSHOT.jar">
|
||||
<element id="module-output" name="Meldestelle.backend.services.masterdata.masterdata-domain.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="masterdata-domain-wasm-js-1.0.0-SNAPSHOT">
|
||||
<output-path>$PROJECT_DIR$/backend/services/masterdata/masterdata-domain/build/libs</output-path>
|
||||
<root id="archive" name="masterdata-domain-wasm-js-1.0.0-SNAPSHOT.jar">
|
||||
<element id="module-output" name="Meldestelle.backend.services.masterdata.masterdata-domain.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="meldestelle-desktop-jvm-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/shells/meldestelle-desktop/build/libs</output-path>
|
||||
<root id="archive" name="meldestelle-desktop-jvm-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.shells.meldestelle-desktop.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="meldestelle-desktop-jvm-1.0.0-SNAPSHOT">
|
||||
<output-path>$PROJECT_DIR$/frontend/shells/meldestelle-desktop/build/libs</output-path>
|
||||
<root id="archive" name="meldestelle-desktop-jvm-1.0.0-SNAPSHOT.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.shells.meldestelle-desktop.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="meldestelle-web-wasm-js-1.0.0-SNAPSHOT">
|
||||
<output-path>$PROJECT_DIR$/frontend/shells/meldestelle-web/build/libs</output-path>
|
||||
<root id="archive" name="meldestelle-web-wasm-js-1.0.0-SNAPSHOT.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.shells.meldestelle-web.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
Generated
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="navigation-jvm-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/core/navigation/build/libs</output-path>
|
||||
<root id="archive" name="navigation-jvm-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.core.navigation.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="navigation-wasm-js-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/core/navigation/build/libs</output-path>
|
||||
<root id="archive" name="navigation-wasm-js-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.core.navigation.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="nennung-feature-jvm-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/features/nennung-feature/build/libs</output-path>
|
||||
<root id="archive" name="nennung-feature-jvm-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.features.nennung-feature.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="nennung-feature-wasm-js-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/features/nennung-feature/build/libs</output-path>
|
||||
<root id="archive" name="nennung-feature-wasm-js-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.features.nennung-feature.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
Generated
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="network-jvm-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/core/network/build/libs</output-path>
|
||||
<root id="archive" name="network-jvm-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.core.network.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="network-jvm-1.0.0-SNAPSHOT">
|
||||
<output-path>$PROJECT_DIR$/frontend/core/network/build/libs</output-path>
|
||||
<root id="archive" name="network-jvm-1.0.0-SNAPSHOT.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.core.network.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="network-wasm-js-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/core/network/build/libs</output-path>
|
||||
<root id="archive" name="network-wasm-js-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.core.network.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="network-wasm-js-1.0.0-SNAPSHOT">
|
||||
<output-path>$PROJECT_DIR$/frontend/core/network/build/libs</output-path>
|
||||
<root id="archive" name="network-wasm-js-1.0.0-SNAPSHOT.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.core.network.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="pferde-feature-jvm-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/features/pferde-feature/build/libs</output-path>
|
||||
<root id="archive" name="pferde-feature-jvm-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.features.pferde-feature.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="pferde-feature-wasm-js-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/features/pferde-feature/build/libs</output-path>
|
||||
<root id="archive" name="pferde-feature-wasm-js-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.features.pferde-feature.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
Generated
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="ping-api-jvm-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/contracts/ping-api/build/libs</output-path>
|
||||
<root id="archive" name="ping-api-jvm-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.contracts.ping-api.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="ping-api-wasm-js-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/contracts/ping-api/build/libs</output-path>
|
||||
<root id="archive" name="ping-api-wasm-js-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.contracts.ping-api.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="ping-feature-jvm-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/features/ping-feature/build/libs</output-path>
|
||||
<root id="archive" name="ping-feature-jvm-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.features.ping-feature.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="ping-feature-wasm-js-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/features/ping-feature/build/libs</output-path>
|
||||
<root id="archive" name="ping-feature-wasm-js-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.features.ping-feature.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="profile-feature-jvm-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/features/profile-feature/build/libs</output-path>
|
||||
<root id="archive" name="profile-feature-jvm-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.features.profile-feature.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="profile-feature-wasm-js-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/features/profile-feature/build/libs</output-path>
|
||||
<root id="archive" name="profile-feature-wasm-js-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.features.profile-feature.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="reiter-feature-jvm-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/features/reiter-feature/build/libs</output-path>
|
||||
<root id="archive" name="reiter-feature-jvm-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.features.reiter-feature.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="reiter-feature-wasm-js-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/features/reiter-feature/build/libs</output-path>
|
||||
<root id="archive" name="reiter-feature-wasm-js-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.features.reiter-feature.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
Generated
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="sync-jvm-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/core/sync/build/libs</output-path>
|
||||
<root id="archive" name="sync-jvm-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.core.sync.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="sync-jvm-1.0.0-SNAPSHOT">
|
||||
<output-path>$PROJECT_DIR$/frontend/core/sync/build/libs</output-path>
|
||||
<root id="archive" name="sync-jvm-1.0.0-SNAPSHOT.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.core.sync.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
Generated
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="sync-wasm-js-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/core/sync/build/libs</output-path>
|
||||
<root id="archive" name="sync-wasm-js-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.core.sync.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="sync-wasm-js-1.0.0-SNAPSHOT">
|
||||
<output-path>$PROJECT_DIR$/frontend/core/sync/build/libs</output-path>
|
||||
<root id="archive" name="sync-wasm-js-1.0.0-SNAPSHOT.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.core.sync.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="turnier-feature-jvm-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/features/turnier-feature/build/libs</output-path>
|
||||
<root id="archive" name="turnier-feature-jvm-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.features.turnier-feature.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="turnier-feature-wasm-js-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/features/turnier-feature/build/libs</output-path>
|
||||
<root id="archive" name="turnier-feature-wasm-js-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.features.turnier-feature.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="veranstalter-feature-jvm-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/features/veranstalter-feature/build/libs</output-path>
|
||||
<root id="archive" name="veranstalter-feature-jvm-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.features.veranstalter-feature.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="veranstalter-feature-wasm-js-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/features/veranstalter-feature/build/libs</output-path>
|
||||
<root id="archive" name="veranstalter-feature-wasm-js-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.features.veranstalter-feature.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="veranstaltung-feature-jvm-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/features/veranstaltung-feature/build/libs</output-path>
|
||||
<root id="archive" name="veranstaltung-feature-jvm-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.features.veranstaltung-feature.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="veranstaltung-feature-wasm-js-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/features/veranstaltung-feature/build/libs</output-path>
|
||||
<root id="archive" name="veranstaltung-feature-wasm-js-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.features.veranstaltung-feature.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="verein-feature-jvm-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/features/verein-feature/build/libs</output-path>
|
||||
<root id="archive" name="verein-feature-jvm-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.features.verein-feature.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="verein-feature-wasm-js-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/features/verein-feature/build/libs</output-path>
|
||||
<root id="archive" name="verein-feature-wasm-js-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.features.verein-feature.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="zns-import-feature-jvm-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/features/zns-import-feature/build/libs</output-path>
|
||||
<root id="archive" name="zns-import-feature-jvm-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.features.zns-import-feature.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="zns-import-feature-wasm-js-1.0.0">
|
||||
<output-path>$PROJECT_DIR$/frontend/features/zns-import-feature/build/libs</output-path>
|
||||
<root id="archive" name="zns-import-feature-wasm-js-1.0.0.jar">
|
||||
<element id="module-output" name="Meldestelle.frontend.features.zns-import-feature.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="zns-parser-jvm-1.0.0-SNAPSHOT">
|
||||
<output-path>$PROJECT_DIR$/core/zns-parser/build/libs</output-path>
|
||||
<root id="archive" name="zns-parser-jvm-1.0.0-SNAPSHOT.jar">
|
||||
<element id="module-output" name="Meldestelle.core.zns-parser.jvmMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,8 +0,0 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="zns-parser-wasm-js-1.0.0-SNAPSHOT">
|
||||
<output-path>$PROJECT_DIR$/core/zns-parser/build/libs</output-path>
|
||||
<root id="archive" name="zns-parser-wasm-js-1.0.0-SNAPSHOT.jar">
|
||||
<element id="module-output" name="Meldestelle.core.zns-parser.wasmJsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
Generated
-65
@@ -1,65 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CompilerConfiguration">
|
||||
<bytecodeTargetLevel target="25" />
|
||||
</component>
|
||||
<component name="JavacSettings">
|
||||
<option name="ADDITIONAL_OPTIONS_OVERRIDE">
|
||||
<module name="Meldestelle.backend.infrastructure.event-store.valkey-event-store" options="-parameters" />
|
||||
<module name="Meldestelle.backend.infrastructure.event-store.valkey-event-store.main" options="-parameters" />
|
||||
<module name="Meldestelle.backend.infrastructure.event-store.valkey-event-store.test" options="-parameters" />
|
||||
<module name="Meldestelle.backend.infrastructure.gateway" options="-parameters" />
|
||||
<module name="Meldestelle.backend.infrastructure.gateway.integrationTest" options="-parameters" />
|
||||
<module name="Meldestelle.backend.infrastructure.gateway.main" options="-parameters" />
|
||||
<module name="Meldestelle.backend.infrastructure.gateway.test" options="-parameters" />
|
||||
<module name="Meldestelle.backend.infrastructure.messaging.messaging-client" options="-parameters" />
|
||||
<module name="Meldestelle.backend.infrastructure.messaging.messaging-client.main" options="-parameters" />
|
||||
<module name="Meldestelle.backend.infrastructure.messaging.messaging-client.test" options="-parameters" />
|
||||
<module name="Meldestelle.backend.infrastructure.messaging.messaging-config" options="-parameters" />
|
||||
<module name="Meldestelle.backend.infrastructure.messaging.messaging-config.main" options="-parameters" />
|
||||
<module name="Meldestelle.backend.infrastructure.messaging.messaging-config.test" options="-parameters" />
|
||||
<module name="Meldestelle.backend.infrastructure.monitoring.monitoring-server" options="-parameters" />
|
||||
<module name="Meldestelle.backend.infrastructure.monitoring.monitoring-server.main" options="-parameters" />
|
||||
<module name="Meldestelle.backend.infrastructure.monitoring.monitoring-server.test" options="-parameters" />
|
||||
<module name="Meldestelle.backend.infrastructure.persistence" options="-parameters" />
|
||||
<module name="Meldestelle.backend.infrastructure.persistence.main" options="-parameters" />
|
||||
<module name="Meldestelle.backend.infrastructure.persistence.test" options="-parameters" />
|
||||
<module name="Meldestelle.backend.infrastructure.security" options="-parameters" />
|
||||
<module name="Meldestelle.backend.infrastructure.security.main" options="-parameters" />
|
||||
<module name="Meldestelle.backend.infrastructure.security.test" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.billing.billing-service" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.billing.billing-service.main" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.billing.billing-service.test" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.entries.entries-service" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.entries.entries-service.main" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.entries.entries-service.test" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.events.events-service" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.events.events-service.main" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.events.events-service.test" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.identity.identity-service" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.identity.identity-service.main" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.identity.identity-service.test" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.mail.mail-service" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.mail.mail-service.main" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.mail.mail-service.test" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.masterdata.masterdata-service" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.masterdata.masterdata-service.main" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.masterdata.masterdata-service.test" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.ping.ping-service" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.ping.ping-service.main" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.ping.ping-service.test" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.results.results-service" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.results.results-service.main" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.results.results-service.test" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.scheduling.scheduling-service" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.scheduling.scheduling-service.main" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.scheduling.scheduling-service.test" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.series.series-service" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.series.series-service.main" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.series.series-service.test" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.zns-import.zns-import-service" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.zns-import.zns-import-service.main" options="-parameters" />
|
||||
<module name="Meldestelle.backend.services.zns-import.zns-import-service.test" options="-parameters" />
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
||||
Generated
-18
@@ -1,18 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
|
||||
<data-source source="LOCAL" name="pg-meldestelle-db@localhost" uuid="8835ccb7-a903-4b56-97aa-a6359a2f5d4e">
|
||||
<driver-ref>postgresql</driver-ref>
|
||||
<synchronize>true</synchronize>
|
||||
<imported>true</imported>
|
||||
<jdbc-driver>org.postgresql.Driver</jdbc-driver>
|
||||
<jdbc-url>jdbc:postgresql://localhost:5432/pg-meldestelle-db</jdbc-url>
|
||||
<jdbc-additional-properties>
|
||||
<property name="com.intellij.clouds.kubernetes.db.host.port" />
|
||||
<property name="com.intellij.clouds.kubernetes.db.enabled" value="false" />
|
||||
<property name="com.intellij.clouds.kubernetes.db.container.port" />
|
||||
</jdbc-additional-properties>
|
||||
<working-dir>$ProjectFileDir$</working-dir>
|
||||
</data-source>
|
||||
</component>
|
||||
</project>
|
||||
Generated
-109
@@ -1,109 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="GradleMigrationSettings" migrationVersion="1" />
|
||||
<component name="GradleSettings">
|
||||
<option name="linkedExternalProjectsSettings">
|
||||
<GradleProjectSettings>
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
<option name="gradleJvm" value="openjdk-25" />
|
||||
<option name="modules">
|
||||
<set>
|
||||
<option value="$PROJECT_DIR$" />
|
||||
<option value="$PROJECT_DIR$/backend" />
|
||||
<option value="$PROJECT_DIR$/backend/infrastructure" />
|
||||
<option value="$PROJECT_DIR$/backend/infrastructure/cache" />
|
||||
<option value="$PROJECT_DIR$/backend/infrastructure/cache/cache-api" />
|
||||
<option value="$PROJECT_DIR$/backend/infrastructure/cache/valkey-cache" />
|
||||
<option value="$PROJECT_DIR$/backend/infrastructure/event-store" />
|
||||
<option value="$PROJECT_DIR$/backend/infrastructure/event-store/event-store-api" />
|
||||
<option value="$PROJECT_DIR$/backend/infrastructure/event-store/valkey-event-store" />
|
||||
<option value="$PROJECT_DIR$/backend/infrastructure/gateway" />
|
||||
<option value="$PROJECT_DIR$/backend/infrastructure/messaging" />
|
||||
<option value="$PROJECT_DIR$/backend/infrastructure/messaging/messaging-client" />
|
||||
<option value="$PROJECT_DIR$/backend/infrastructure/messaging/messaging-config" />
|
||||
<option value="$PROJECT_DIR$/backend/infrastructure/monitoring" />
|
||||
<option value="$PROJECT_DIR$/backend/infrastructure/monitoring/monitoring-client" />
|
||||
<option value="$PROJECT_DIR$/backend/infrastructure/monitoring/monitoring-server" />
|
||||
<option value="$PROJECT_DIR$/backend/infrastructure/persistence" />
|
||||
<option value="$PROJECT_DIR$/backend/infrastructure/security" />
|
||||
<option value="$PROJECT_DIR$/backend/infrastructure/zns-importer" />
|
||||
<option value="$PROJECT_DIR$/backend/services" />
|
||||
<option value="$PROJECT_DIR$/backend/services/billing" />
|
||||
<option value="$PROJECT_DIR$/backend/services/billing/billing-domain" />
|
||||
<option value="$PROJECT_DIR$/backend/services/billing/billing-service" />
|
||||
<option value="$PROJECT_DIR$/backend/services/entries" />
|
||||
<option value="$PROJECT_DIR$/backend/services/entries/entries-api" />
|
||||
<option value="$PROJECT_DIR$/backend/services/entries/entries-domain" />
|
||||
<option value="$PROJECT_DIR$/backend/services/entries/entries-service" />
|
||||
<option value="$PROJECT_DIR$/backend/services/events" />
|
||||
<option value="$PROJECT_DIR$/backend/services/events/events-api" />
|
||||
<option value="$PROJECT_DIR$/backend/services/events/events-common" />
|
||||
<option value="$PROJECT_DIR$/backend/services/events/events-domain" />
|
||||
<option value="$PROJECT_DIR$/backend/services/events/events-infrastructure" />
|
||||
<option value="$PROJECT_DIR$/backend/services/events/events-service" />
|
||||
<option value="$PROJECT_DIR$/backend/services/identity" />
|
||||
<option value="$PROJECT_DIR$/backend/services/identity/identity-domain" />
|
||||
<option value="$PROJECT_DIR$/backend/services/identity/identity-infrastructure" />
|
||||
<option value="$PROJECT_DIR$/backend/services/identity/identity-service" />
|
||||
<option value="$PROJECT_DIR$/backend/services/mail" />
|
||||
<option value="$PROJECT_DIR$/backend/services/mail/mail-service" />
|
||||
<option value="$PROJECT_DIR$/backend/services/masterdata" />
|
||||
<option value="$PROJECT_DIR$/backend/services/masterdata/masterdata-api" />
|
||||
<option value="$PROJECT_DIR$/backend/services/masterdata/masterdata-common" />
|
||||
<option value="$PROJECT_DIR$/backend/services/masterdata/masterdata-domain" />
|
||||
<option value="$PROJECT_DIR$/backend/services/masterdata/masterdata-infrastructure" />
|
||||
<option value="$PROJECT_DIR$/backend/services/masterdata/masterdata-service" />
|
||||
<option value="$PROJECT_DIR$/backend/services/ping" />
|
||||
<option value="$PROJECT_DIR$/backend/services/ping/ping-service" />
|
||||
<option value="$PROJECT_DIR$/backend/services/results" />
|
||||
<option value="$PROJECT_DIR$/backend/services/results/results-service" />
|
||||
<option value="$PROJECT_DIR$/backend/services/scheduling" />
|
||||
<option value="$PROJECT_DIR$/backend/services/scheduling/scheduling-service" />
|
||||
<option value="$PROJECT_DIR$/backend/services/series" />
|
||||
<option value="$PROJECT_DIR$/backend/services/series/series-service" />
|
||||
<option value="$PROJECT_DIR$/backend/services/zns-import" />
|
||||
<option value="$PROJECT_DIR$/backend/services/zns-import/zns-import-service" />
|
||||
<option value="$PROJECT_DIR$/contracts" />
|
||||
<option value="$PROJECT_DIR$/contracts/ping-api" />
|
||||
<option value="$PROJECT_DIR$/core" />
|
||||
<option value="$PROJECT_DIR$/core/core-domain" />
|
||||
<option value="$PROJECT_DIR$/core/core-utils" />
|
||||
<option value="$PROJECT_DIR$/core/zns-parser" />
|
||||
<option value="$PROJECT_DIR$/docs" />
|
||||
<option value="$PROJECT_DIR$/frontend" />
|
||||
<option value="$PROJECT_DIR$/frontend/core" />
|
||||
<option value="$PROJECT_DIR$/frontend/core/auth" />
|
||||
<option value="$PROJECT_DIR$/frontend/core/design-system" />
|
||||
<option value="$PROJECT_DIR$/frontend/core/domain" />
|
||||
<option value="$PROJECT_DIR$/frontend/core/local-db" />
|
||||
<option value="$PROJECT_DIR$/frontend/core/navigation" />
|
||||
<option value="$PROJECT_DIR$/frontend/core/network" />
|
||||
<option value="$PROJECT_DIR$/frontend/core/sync" />
|
||||
<option value="$PROJECT_DIR$/frontend/features" />
|
||||
<option value="$PROJECT_DIR$/frontend/features/billing-feature" />
|
||||
<option value="$PROJECT_DIR$/frontend/features/device-initialization" />
|
||||
<option value="$PROJECT_DIR$/frontend/features/funktionaer-feature" />
|
||||
<option value="$PROJECT_DIR$/frontend/features/nennung-feature" />
|
||||
<option value="$PROJECT_DIR$/frontend/features/pferde-feature" />
|
||||
<option value="$PROJECT_DIR$/frontend/features/ping-feature" />
|
||||
<option value="$PROJECT_DIR$/frontend/features/profile-feature" />
|
||||
<option value="$PROJECT_DIR$/frontend/features/reiter-feature" />
|
||||
<option value="$PROJECT_DIR$/frontend/features/turnier-feature" />
|
||||
<option value="$PROJECT_DIR$/frontend/features/veranstalter-feature" />
|
||||
<option value="$PROJECT_DIR$/frontend/features/veranstaltung-feature" />
|
||||
<option value="$PROJECT_DIR$/frontend/features/verein-feature" />
|
||||
<option value="$PROJECT_DIR$/frontend/features/zns-import-feature" />
|
||||
<option value="$PROJECT_DIR$/frontend/shells" />
|
||||
<option value="$PROJECT_DIR$/frontend/shells/meldestelle-desktop" />
|
||||
<option value="$PROJECT_DIR$/frontend/shells/meldestelle-web" />
|
||||
<option value="$PROJECT_DIR$/platform" />
|
||||
<option value="$PROJECT_DIR$/platform/architecture-tests" />
|
||||
<option value="$PROJECT_DIR$/platform/platform-bom" />
|
||||
<option value="$PROJECT_DIR$/platform/platform-dependencies" />
|
||||
<option value="$PROJECT_DIR$/platform/platform-testing" />
|
||||
</set>
|
||||
</option>
|
||||
</GradleProjectSettings>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
||||
Generated
-7
@@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="KotlinJpsPluginSettings">
|
||||
<option name="externalSystemId" value="Gradle" />
|
||||
<option name="version" value="2.3.20" />
|
||||
</component>
|
||||
</project>
|
||||
Generated
-7
@@ -1,7 +0,0 @@
|
||||
<project version="4">
|
||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||
<component name="FrameworkDetectionExcludesConfiguration">
|
||||
<file type="web" url="file://$PROJECT_DIR$" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_25" default="true" project-jdk-name="openjdk-25" project-jdk-type="JavaSDK" />
|
||||
</project>
|
||||
Generated
-6
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
@@ -1,43 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# check-docs-drift.sh
|
||||
# Zweck: sehr schlanke Drift-Checks gegen die neue Doku-Struktur.
|
||||
# - Kein Guidelines-System mehr.
|
||||
# - Single Source of Truth: `docs/`
|
||||
|
||||
err=0
|
||||
|
||||
has() { grep -q "$2" "$1" || { echo "[DRIFT] '$2' fehlt in $1"; err=1; }; }
|
||||
miss() { grep -q "$2" "$1" && { echo "[DRIFT] Veralteter Begriff '$2' in $1"; err=1; }; }
|
||||
|
||||
# Harte Altlast-Pfade dürfen nicht mehr vorkommen
|
||||
if git grep -n "docs/00_Domain/" -- docs >/dev/null 2>&1; then
|
||||
echo "[DRIFT] Veralteter Pfad 'docs/00_Domain/' in docs/* gefunden"
|
||||
err=1
|
||||
fi
|
||||
if git grep -n "docs/adr/" -- docs >/dev/null 2>&1; then
|
||||
echo "[DRIFT] Veralteter Pfad 'docs/adr/' in docs/* gefunden"
|
||||
err=1
|
||||
fi
|
||||
if git grep -n "docs/c4/" -- docs >/dev/null 2>&1; then
|
||||
echo "[DRIFT] Veralteter Pfad 'docs/c4/' in docs/* gefunden"
|
||||
err=1
|
||||
fi
|
||||
if git grep -n "docs/how-to/" -- docs >/dev/null 2>&1; then
|
||||
echo "[DRIFT] Veralteter Pfad 'docs/how-to/' in docs/* gefunden"
|
||||
err=1
|
||||
fi
|
||||
if git grep -n "docs/reference/" -- docs >/dev/null 2>&1; then
|
||||
echo "[DRIFT] Veralteter Pfad 'docs/reference/' in docs/* gefunden"
|
||||
err=1
|
||||
fi
|
||||
|
||||
# Quelle der Wahrheit: Gateway-Technologie (sollte in Architektur/ADRs/C4 konsistent sein)
|
||||
has docs/01_Architecture/ARCHITECTURE.md "Spring Cloud Gateway"
|
||||
has docs/01_Architecture/adr/0007-api-gateway-pattern-de.md "Spring Cloud Gateway"
|
||||
miss docs/01_Architecture/adr/0007-api-gateway-pattern-de.md "Ktor"
|
||||
has docs/01_Architecture/c4/02-container-de.puml "Spring Cloud Gateway"
|
||||
miss docs/01_Architecture/c4/02-container-de.puml "Ktor"
|
||||
|
||||
exit $err
|
||||
# Shim: Weiterleitung auf zentrale Guardrail in .ai/
|
||||
SCRIPT_DIR="$(cd -- "$(dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd)"
|
||||
ROOT_DIR="$(git -C "$SCRIPT_DIR" rev-parse --show-toplevel 2>/dev/null || echo "$SCRIPT_DIR")"
|
||||
exec "$ROOT_DIR/.ai/scripts/check-docs-drift.sh" "$@"
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
mkdir -p build/diagrams
|
||||
shopt -s nullglob
|
||||
for f in docs/architecture/c4/*.puml; do
|
||||
docker run --rm -v "$PWD":/data plantuml/plantuml -tsvg "/data/$f" -o "/data/build/diagrams"
|
||||
echo "Rendered build/diagrams/$(basename "${f%.puml}").svg"
|
||||
done
|
||||
# Shim: Weiterleitung auf zentrale Guardrail in .ai/
|
||||
SCRIPT_DIR="$(cd -- "$(dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd)"
|
||||
ROOT_DIR="$(git -C "$SCRIPT_DIR" rev-parse --show-toplevel 2>/dev/null || echo "$SCRIPT_DIR")"
|
||||
exec "$ROOT_DIR/.ai/scripts/render-plantuml.sh" "$@"
|
||||
|
||||
@@ -1,136 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# validate-links.sh - Link-Validierung für Projektdokumentation (`docs/**`).
|
||||
# Zweck: Guardrail für die "Docs-as-Code"-Strategie.
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
cd "$PROJECT_ROOT"
|
||||
|
||||
QUICK_MODE=false
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
--quick)
|
||||
QUICK_MODE=true
|
||||
shift
|
||||
;;
|
||||
--help|-h)
|
||||
cat << 'EOF'
|
||||
Docs Link-Validierung
|
||||
|
||||
USAGE:
|
||||
./.junie/scripts/validate-links.sh [--quick]
|
||||
|
||||
BESCHREIBUNG:
|
||||
Prüft Markdown-Links in `docs/**/*.md` auf gebrochene relative Pfade.
|
||||
Ignoriert externe Links (http/https/mailto) sowie reine Anchors (#...).
|
||||
|
||||
OPTIONEN:
|
||||
--quick Führt nur eine Teilmenge der Prüfungen durch (aktuell nicht implementiert).
|
||||
EOF
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo "[ERROR] Unbekannter Parameter: $1" >&2
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
python3 - <<'PY'
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from urllib.parse import unquote
|
||||
|
||||
root = Path.cwd()
|
||||
docs_dir = root / "docs"
|
||||
|
||||
if not docs_dir.is_dir():
|
||||
print(f"[ERROR] docs-Verzeichnis nicht gefunden: {docs_dir}", file=sys.stderr)
|
||||
sys.exit(2)
|
||||
|
||||
# Veraltete Pfad-Prüfungen wurden entfernt, da sie zu wartungsintensiv waren.
|
||||
# Das Skript konzentriert sich nun auf die Validierung der Link-Integrität.
|
||||
FORBIDDEN_SUBSTRINGS = []
|
||||
|
||||
md_files = sorted(docs_dir.rglob("*.md"))
|
||||
|
||||
link_pattern = re.compile(r"\]\(([^)]+)\)")
|
||||
|
||||
errors = 0
|
||||
|
||||
def is_external(target: str) -> bool:
|
||||
t = target.lower()
|
||||
return t.startswith("http://") or t.startswith("https://") or t.startswith("mailto:")
|
||||
|
||||
def strip_fragment_and_query(target: str) -> str:
|
||||
# remove fragment and query parts
|
||||
target = target.split("#", 1)[0]
|
||||
target = target.split("?", 1)[0]
|
||||
return target
|
||||
|
||||
for f in md_files:
|
||||
text = f.read_text(encoding="utf-8", errors="replace")
|
||||
|
||||
for forbidden in FORBIDDEN_SUBSTRINGS:
|
||||
if forbidden in text:
|
||||
print(f"[ERROR] Veralteter Pfad '{forbidden}' in {f}")
|
||||
errors += 1
|
||||
|
||||
for match in link_pattern.finditer(text):
|
||||
target = match.group(1).strip()
|
||||
|
||||
if not target:
|
||||
continue
|
||||
if is_external(target):
|
||||
continue
|
||||
if target.startswith("#"):
|
||||
continue
|
||||
|
||||
# drop angle brackets <...> used in markdown for urls with spaces
|
||||
if target.startswith("<") and target.endswith(">"):
|
||||
target = target[1:-1]
|
||||
|
||||
target = unquote(strip_fragment_and_query(target))
|
||||
|
||||
# ignore absolute paths in the repo (we treat them as doc-style links; validate only if relative)
|
||||
if target.startswith("/"):
|
||||
continue
|
||||
|
||||
# ignore non-file targets (e.g. empty or protocol-less anchors)
|
||||
if ":" in target.split("/", 1)[0]:
|
||||
# things like "vscode:..." etc.
|
||||
continue
|
||||
|
||||
# treat as file path relative to markdown file
|
||||
resolved = (f.parent / target).resolve()
|
||||
|
||||
# keep validation within repo
|
||||
try:
|
||||
resolved.relative_to(root.resolve())
|
||||
except ValueError:
|
||||
print(f"[ERROR] Link zeigt außerhalb des Repos: {f} -> {target}")
|
||||
errors += 1
|
||||
continue
|
||||
|
||||
# allow directories if they contain README.md
|
||||
if resolved.is_dir():
|
||||
if not (resolved / "README.md").is_file():
|
||||
print(f"[ERROR] Verlinktes Verzeichnis ohne README.md: {f} -> {target}")
|
||||
errors += 1
|
||||
continue
|
||||
|
||||
if not resolved.exists():
|
||||
print(f"[ERROR] Broken link: {f} -> {target}")
|
||||
errors += 1
|
||||
|
||||
if errors:
|
||||
print(f"[ERROR] Link-Validierung fehlgeschlagen: {errors} Fehler")
|
||||
sys.exit(1)
|
||||
|
||||
print(f"[OK] Link-Validierung erfolgreich: {len(md_files)} Markdown-Dateien geprüft")
|
||||
PY
|
||||
# Shim: Weiterleitung auf zentrale Guardrail in .ai/
|
||||
SCRIPT_DIR="$(cd -- "$(dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd)"
|
||||
ROOT_DIR="$(git -C "$SCRIPT_DIR" rev-parse --show-toplevel 2>/dev/null || echo "$SCRIPT_DIR")"
|
||||
exec "$ROOT_DIR/.ai/scripts/validate-links.sh" "$@"
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
# .aiignore - Verhindert Token-Waste für Nolik
|
||||
|
||||
# Abhängigkeiten & Binaries
|
||||
build/
|
||||
.gradle/
|
||||
*.jar
|
||||
*.deb
|
||||
*.msi
|
||||
|
||||
# Sensible Daten (auch lokal!)
|
||||
.env
|
||||
.env.*
|
||||
config/docker/certs/
|
||||
*.pem
|
||||
*.jks
|
||||
postgres-data/
|
||||
valkey-data/
|
||||
|
||||
# Doku-Builds (Nolik soll die Source-Files in docs/ lesen, nicht die HTML-Exporte)
|
||||
build/dokka/
|
||||
docs/Neumarkt2026/*.pdf
|
||||
Executable
+7
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Shim: Weiterleitung auf zentrale Guardrail in .ai/
|
||||
SCRIPT_DIR="$(cd -- "$(dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd)"
|
||||
ROOT_DIR="$(git -C "$SCRIPT_DIR" rev-parse --show-toplevel 2>/dev/null || echo "$SCRIPT_DIR")"
|
||||
exec "$ROOT_DIR/.ai/scripts/check-docs-drift.sh" "$@"
|
||||
Executable
+7
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Shim: Weiterleitung auf zentrale Guardrail in .ai/
|
||||
SCRIPT_DIR="$(cd -- "$(dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd)"
|
||||
ROOT_DIR="$(git -C "$SCRIPT_DIR" rev-parse --show-toplevel 2>/dev/null || echo "$SCRIPT_DIR")"
|
||||
exec "$ROOT_DIR/.ai/scripts/validate-links.sh" "$@"
|
||||
@@ -3,12 +3,15 @@
|
||||
Dieses Dokument definiert die Zusammenarbeit zwischen dem User (Owner) und den spezialisierten KI-Agenten.
|
||||
Es dient als zentraler **System-Prompt-Erweiterung** für neue Chat-Sessions.
|
||||
|
||||
## 🚀 Strategische Ausrichtung
|
||||
## 🚀 Strategische Ausrichtung (Reality-Reset 28.04.2026)
|
||||
|
||||
Das Projekt **"Meldestelle"** entwickelt eine ÖTO/FEI-konforme, offline-fähige Turnier-Software.
|
||||
1. **Desktop-First:** Primäres Ziel ist die Compose Desktop App (KMP). UX & Performance sind auf Profis optimiert.
|
||||
2. **Offline-First:** Das System muss autark (ohne Internet) funktionieren. Sync-Logik ist Kernbestandteil.
|
||||
3. **Domain-Driven:** 6 Bounded Contexts (SCS) bilden den fachlichen Rahmen.
|
||||
2. **Offline-First:** Das System muss autark (ohne Internet) funktionieren.
|
||||
3. **Domain-Driven:** Die Hierarchie **Veranstaltung -> Turnier -> Bewerb/Abteilung** ist das absolute Fundament.
|
||||
|
||||
**WICHTIG:** Alle Agenten arbeiten ab sofort nur noch auf Basis von verifiziertem Code. "Halluzinationen" über
|
||||
abgeschlossene Phasen ohne entsprechende Implementierung sind untersagt.
|
||||
|
||||
## 1. Protokoll & Rollen-Badges
|
||||
Jede Agenten-Antwort **muss** mit dem entsprechenden Badge beginnen, um den Kontext und die Verantwortlichkeit zu klären.
|
||||
@@ -37,7 +40,9 @@ Jede Agenten-Antwort **muss** mit dem entsprechenden Badge beginnen, um den Kont
|
||||
4. **Doku-as-Code:** Änderungen an Code/Architektur müssen sofort in `docs/` (ADR/Reference) reflektiert werden.
|
||||
5. **Session-Abschluss:** Jede Session endet mit einem Eintrag durch den **Curator** (Journal oder Artefakt).
|
||||
|
||||
## 3. Projekt-Philosophie
|
||||
* **Information Density over White Space:** Wir bauen ein Profi-Werkzeug, kein Spielzeug.
|
||||
* **Speed over Animation:** Reaktionsgeschwindigkeit der UI hat höchste Priorität.
|
||||
* **Offline-Authentizität:** Lokale Daten sind die "Source of Truth" für den User; der Server ist das Backup/Sync-Target.
|
||||
## 🚫 Anti-Halluzinations-Protokoll (WICHTIG)
|
||||
Um Fehlentscheidungen und falsche Status-Meldungen zu verhindern, gelten ab sofort folgende Regeln:
|
||||
1. **Kein "Erledigt" ohne Beweis:** Ein Task darf erst dann als abgeschlossen markiert werden, wenn ein Test-Log, ein erfolgreicher Build oder eine explizite Bestätigung des Users vorliegt.
|
||||
2. **Status "Verifikation ausstehend":** Code, der geschrieben, aber nicht auf Hardware getestet wurde, muss zwingend diesen Zusatz tragen.
|
||||
3. **Fakten-Check vor Abschluss:** Vor dem Senden der `submit`-Meldung muss der Agent prüfen: "Habe ich das wirklich laufen sehen oder nehme ich es nur an?"
|
||||
4. **Fehler-Eingeständnis:** Bei Entdeckung einer Halluzination ist sofort der User zu informieren und der Status in allen Dokumenten (Roadmap, Journal) zu korrigieren.
|
||||
|
||||
+10
-207
@@ -17,216 +17,19 @@ Versionierung folgt [Semantic Versioning](https://semver.org/lang/de/).
|
||||
|
||||
### Hinzugefügt
|
||||
|
||||
- **Onboarding & Desktop-UX - 15.04.2026:**
|
||||
- **Desktop-App:** Dynamisierung der Statusanzeigen im App-Footer ("Cloud synchronisiert" & "Verbunden").
|
||||
- **Connectivity-Tracking:** Implementierung des `ConnectivityTracker` (KMP) zur Echtzeit-Überwachung der API-Gateway
|
||||
Erreichbarkeit.
|
||||
- **LAN-Erkennung:** Integration des `NetworkDiscoveryService` (mDNS) im Footer zur Anzeige aktiver Instanzen im
|
||||
lokalen Netzwerk.
|
||||
- **Onboarding:** Datenfluss vom `SettingsManager` bis in den Footer finalisiert (Anzeige des echten Gerätenamens).
|
||||
- **Online-Nennung & Integration - 15.04.2026:**
|
||||
- **Backend (Mail-Service):** Finalisierung des `MailController` für Web-Nennungen inkl. SMTP-Versand via World4You.
|
||||
- **Frontend (Desktop):** `NennungsEingangScreen` an Live-Daten vom `mail-service` angebunden.
|
||||
- **Repository:** `NennungRemoteRepository` (KMP) um `holeNennungen()` erweitert.
|
||||
- **Billing & ÖTO - 15.04.2026:**
|
||||
- **Sportförderbeitrag:** Automatische Buchung von 1,00 EUR (§16 ÖTO) bei jeder Nennung im `entries-service`
|
||||
implementiert.
|
||||
- **Basis-Infrastruktur & Domain-Definition:**
|
||||
- DDD-Modelle für `Veranstaltung`, `Turnier`, `Bewerb` und `Abteilung` gemäß ÖTO definiert.
|
||||
- ZNS-Parser Prototyp für Dateiformate (VEREIN01, LIZENZ01, PFERD01, RICHT01).
|
||||
- Plan-B Mail-Service (Spring Boot) für Nennungs-Versand via World4You.
|
||||
- Desktop-App Skelett mit Navigation und UI-Hüllen (Compose Desktop).
|
||||
|
||||
### Behoben
|
||||
### Reality-Reset (28.04.2026)
|
||||
|
||||
- **Identity-Modul:** Umstellung auf `kotlin.time.Instant` zur Vermeidung von Deprecation-Warnungen und Behebung von
|
||||
Persistenz-Konflikten im `ExposedDeviceRepository`.
|
||||
- **Koin DI:** Korrektur von Typ-Inferenz-Fehlern beim `HttpClient` im `nennung-feature` durch explizite Qualifier.
|
||||
- **Turnier-Feature:** Behebung eines unsicheren Casts (`Any!` zu `List<String>`) in `TurnierStammdatenTab.kt`.
|
||||
- **Konfiguration:** Harmonisierung der Ports (Mail-Service auf 8083) in `.env`, `dc-backend.yaml` und
|
||||
`PlatformConfig.jvm.kt`.
|
||||
- **Korrektur:** Vormalige Einträge über "abgeschlossene" Billing-, Results- und Zeitplan-Features wurden entfernt, da
|
||||
diese im Code nicht funktional hinterlegt waren.
|
||||
- **Status:** Fokus zurück auf die Kern-Hierarchie (Veranstaltung -> Turnier -> Bewerb).
|
||||
|
||||
### Hinzugefügt
|
||||
- **Phase 12 (Abrechnung & Infrastruktur) - 12.04.2026:**
|
||||
- **Infrastruktur:** Docker-Integration für `billing-service` (Port 8087) und API-Gateway Routing vervollständigt.
|
||||
- **Service Discovery:** Alle relevanten Microservices (`masterdata`, `events`, `results`, `series`, `billing`) sind nun bei Consul registriert.
|
||||
- **Frontend Billing:** `BillingRepository` und `BillingViewModel` auf reale API-Anbindung (Ktor) umgestellt; `BillingScreen` funktionalisiert.
|
||||
- **Backend (Series):** JPA-Entitäten `Serie` und `SeriePunkt` im `series-service` stabilisiert und Flyway-Migrationen für das Datenbankschema erstellt.
|
||||
- **Fix:** Behebung von IDE-Mapping-Warnungen durch explizite `@Column` Namen in den JPA-Entitäten.
|
||||
- **Backend Fixes - 12.04.2026:**
|
||||
- **Infrastruktur:** Behebung von Startfehlern im `events-service` (DataSource) und `masterdata-service` (Consul).
|
||||
- **Build:** Integration von `results-service` und `series-service` in `settings.gradle.kts`.
|
||||
- **Domain:** `Serie` und `SeriePunkt` zu `data class` konvertiert (copy() Unterstützung).
|
||||
- **Phase 11 (Ergebniserfassung & Platzierung) - 12.04.2026:**
|
||||
- **Backend (Results):** `results-service` um JPA-Entitäten, Repositories und Business-Logik für Platzierungsberechnungen (Wertnote, Zeit, Fehler) ergänzt.
|
||||
- **Infrastructure:** `dc-backend.yaml` und `GatewayConfig.kt` um den Service `results` (Port 8088) erweitert.
|
||||
- **Frontend Domain:** `ErgebnisRepository` und `Ergebnis`-Modell für Wertnoten, Zeiten und Status erstellt.
|
||||
- **Frontend UI:** `ErgebnisEditDialog` zur schnellen Ergebniserfassung hinzugefügt; `TurnierStartlistenTab` ermöglicht nun Erfassung per Zeilen-Klick.
|
||||
- **Frontend UI:** `TurnierErgebnislistenTab` vervollständigt: Buttons für "Platzierung berechnen" und "Drucken" (PDF) funktionalisiert.
|
||||
- **Fix:** Kompilierungsprobleme im `TurnierFeatureModule` und `ScreenPreviews.kt` behoben (fehlende `ergebnisRepo` Parameter).
|
||||
|
||||
### Hinzugefügt
|
||||
- **Phase 10.4 (Series-Context Vertiefung) - 12.04.2026:**
|
||||
- **Backend (Series):** `series-service` um Logik für Streichresultate (`ReglementTyp`) und Bindungsarten (Reiter-zentriert, Pferde-zentriert, Paar-Bindung) erweitert.
|
||||
- **Infrastructure:** `dc-backend.yaml` und `GatewayConfig.kt` um den Service `series` (Port 8089) erweitert.
|
||||
- **Frontend Domain:** `SeriesRepository` und Modelle an das neue Ranking-Format (`SerieStandEntry`) angepasst.
|
||||
- **UI:** `SeriesScreen.kt` überarbeitet: Zeigt nun Reiter- und Pferde-IDs sowie Fortschritt pro Teilnehmer an.
|
||||
- **Dokumentation:** `MASTER_ROADMAP.md` aktualisiert (Phase 10 & 11 auf 'Completed' gesetzt).
|
||||
|
||||
### Hinzugefügt
|
||||
- **Phase 10.3 (Echter Datenverkehr & Infrastruktur) - 12.04.2026:**
|
||||
- **Infrastructure:** Docker-Services für `masterdata`, `events` und `zns-import` in `dc-backend.yaml` ergänzt.
|
||||
- **Gateway:** API-Gateway Routing für Masterdata (`/api/v1/masterdata`) und Events (`/api/v1/events`) konfiguriert.
|
||||
- **Frontend (Vereine):** `VereinRepository` (Ktor) und `VereinViewModel` implementiert für echtes Anlegen von Veranstaltern.
|
||||
- **Frontend (Events):** `TurnierViewModel` an das reale `TurnierRepository` angebunden.
|
||||
- **Fix:** `verein-feature` Abhängigkeiten korrigiert (Network/Ktor).
|
||||
- **Fix:** Polling-Endpoints im `ZnsImportViewModel` an das neue Gateway-Routing angepasst.
|
||||
|
||||
### Hinzugefügt
|
||||
- **Phase 10.2 (Masterdata-Editoren & Organisation) - 12.04.2026:**
|
||||
- **Frontend:** `MasterdataEditDialogs.kt` für die Bearbeitung von Reiter- und Pferdedaten direkt im Turnier-Kontext.
|
||||
- **Frontend:** Erweiterung des `MasterdataRepository` um Schreibzugriffe (`saveReiter`, `savePferd`).
|
||||
- **Frontend:** Funktionale Suche für Turnierleiter im `Organisation`-Tab via `NennungViewModel` und Masterdata-API.
|
||||
- **Frontend:** State-Management für Stammdaten-Editoren im `NennungViewModel`.
|
||||
- **Fix:** Kompilierungsfehler in `ScreenPreviews.kt` behoben (fehlende Interface-Methoden in Mocks).
|
||||
- **Fix (Desktop Shell):** Fehlendes `turnierFeatureModule` in `main.kt` registriert und Login-Gate in `DesktopApp.kt` optimiert.
|
||||
|
||||
### Hinzugefügt
|
||||
- **Phase 10 (Series-Context & Stammdaten) - 11.04.2026:**
|
||||
- **Frontend:** Stammdaten-Infrastruktur im `turnier-feature` (Repositories, DTOs, Domänenmodelle) für Reiter, Pferde, Funktionäre und Vereine.
|
||||
- **Frontend:** `NennungViewModel` zur Steuerung der Suche und Status-Verwaltung von Nennungen.
|
||||
- **Frontend:** Funktionalisierung des `Nennungen`-Tabs (Suche, Echt-Datenanbindung) und Vorbereitung des `Organisation`-Tabs.
|
||||
- **Frontend:** `DefaultMasterdataRepository` zur Suche in Reitern, Pferden und Funktionären via Backend-API.
|
||||
- **Netzwerk:** Erweiterung der `ApiRoutes` um Endpunkte für Masterdata und Nennungen.
|
||||
- **Phase 10 (Series-Context) Vorbereitung:**
|
||||
- **Frontend:** Neuer `SeriesScreen.kt` für die Verwaltung von Cups und Meisterschaften (konfigurierbare Reglements).
|
||||
- **Frontend:** Erweiterung des `AdminUebersichtScreen` (Cockpit) um KPI-Kacheln mit Direkt-Links zu Cups und Meisterschaften.
|
||||
- **Frontend:** Integration der Series-Navigation in die Breadcrumbs und das globale Routing (`Meisterschaften`, `Cups`).
|
||||
- **Turnier-Feature Hardening:**
|
||||
- **Frontend:** `STARTLISTEN` und `ERGEBNISLISTEN` Tabs vollständig an das `BewerbViewModel` angebunden (Bewerbs-Auswahl mit echten Daten).
|
||||
- **Frontend:** Implementierung der Starter-Anzeige in der Startliste (LazyColumn).
|
||||
|
||||
### Geändert
|
||||
- **Turnier-Feature:** Sichtbarkeit von `BewerbViewModel.generateStartliste()` auf `public` geändert, um den Aufruf aus dem Tab zu ermöglichen.
|
||||
- **Frontend (Desktop):** `ScreenPreviews.kt` aktualisiert zur Berücksichtigung der neuen ViewModel-Abhängigkeiten (`NennungViewModel`, `MasterdataRepository`).
|
||||
|
||||
### [Phase 9] - 11.04.2026
|
||||
- **Frontend:** Interaktiver Drag & Drop Zeitplan mit automatischem 5-Minuten-Snapping und Konflikt-Visualisierung.
|
||||
- **Frontend:** "B-Satz Export (ZNS)" Toolbar-Aktion mit integriertem Vorschau-Dialog.
|
||||
- **Frontend:** "Änderungs-Historie" (Audit-Log) Sektion zur Nachverfolgung von Zeitplan-Anpassungen.
|
||||
- **Backend:** `audit_log` Persistenz und Abfrage-API für manuelle Eingriffe in Bewerbe.
|
||||
- **Backend:** ZNS B-Satz Export Endpunkt (`/export/zns/b-satz`) zur Generierung von `BBEWERBE` Datensätzen.
|
||||
- **Core:** `FixedWidthLineBuilder` zur präzisen Generierung von ZNS-konformen Festbreiten-Formaten.
|
||||
|
||||
### Behoben
|
||||
- **Infrastruktur:** Veraltete `newSuspendedTransaction` in `DatabaseFactory.kt` durch moderne `suspendTransaction` (Exposed v1) ersetzt.
|
||||
- **Frontend (Desktop):** Kompilierfehler in `ScreenPreviews.kt` behoben, indem fehlende Interface-Methoden im Mock-Repository implementiert wurden.
|
||||
- **Backend (Tests):** `JdbcSQLSyntaxErrorException` im `BewerbeZeitplanIntegrationTest` durch Korrektur des Schema-Setups (Audit-Log Tabelle) gelöst.
|
||||
|
||||
### Hinzugefügt
|
||||
- **Bugfix**: Behebung von Build-Fehlern im `veranstalter-feature` nach der Paket-Konsolidierung.
|
||||
- **Frontend**: `FakeVeranstalterRepository` in `commonMain` implementiert, um saubere KMP-DI zu ermöglichen.
|
||||
- **Frontend**: Veraltete Imports und Referenzen im `meldestelle-desktop` Shell und Previews korrigiert.
|
||||
- **Architektur:** Fachliches Konzept für Zeitplan-Optimierung (Drag & Drop) erstellt (`konzept-zeitplan-optimierung-de.md`).
|
||||
- **Architektur:** Spezifikation des Status-Automaten für Nennungen und Synchronisations-Logik (`status-automat-nennungen-de.md`).
|
||||
- **Rulebook:** Überprüfung und Spezifikation der Parcoursbesichtigung zu Pferd (§43 ÖTO) inkl. 5-Minuten-Puffer-Regel.
|
||||
- **Backend (Entries):** Erweiterung der Domain-Modelle `Bewerb` und `Abteilung` um Besichtigungs- und Pausen-Konfigurationen.
|
||||
- **Backend (Entries):** Neues Datenmodell `BesichtigungsBlock` für wettbewerbsübergreifende Parcoursbesichtigungen.
|
||||
- **Backend (Entries):** API-Endpunkt `PATCH /bewerbe/{id}/zeitplan` für schnelle Zeitplan-Updates implementiert.
|
||||
- **Backend (Entries):** `StartlistenService` um ÖTO-konforme Zeitberechnung (Besichtigungs-Puffer, Pausen-Intervalle) erweitert.
|
||||
|
||||
### Geändert
|
||||
- Masterdata/Domain: Umbenennungen zur Vereinheitlichung der Terminologie (DE):
|
||||
- `MasterdataLicenseRepository` → `LizenzRepository`
|
||||
- `LicenseMatrixService` → `LizenzMatrixService`
|
||||
- `LicenseMatrixServiceImpl` → `LizenzMatrixServiceImpl`
|
||||
- Test: `LicenseMatrixServiceTest` → `LiznezMatrixServiceTest` (exakt nach Vorgabe)
|
||||
- Infrastructure (Exposed): `LicenseTable` → `LizenzTable`
|
||||
- Docs: Begriff „reit_lizenzen“ → „reiterlizenzen“ in Glossar/UL konsolidiert.
|
||||
|
||||
### Hinzugefügt
|
||||
|
||||
- **Events-Service Bundle:** Vollständige Stabilisierung der `events` Services (Domain, Infrastructure, API, Service).
|
||||
- **Domain:** Umstellung auf `kotlin.time.Instant` zur Vermeidung von Deprecation-Warnungen (Kotlin 2.1.20+) und Harmonisierung mit dem Rulebook-Expert.
|
||||
- **Infrastructure:** Anpassung an den `org.jetbrains.exposed.v1` Namespace und Implementierung von UUID-Konvertierungen zwischen `kotlin.uuid.Uuid` (Domain) und `java.util.UUID` (DB).
|
||||
- **API:** Refactoring des `VeranstaltungController` zur direkten Repository-Nutzung (Alignment mit `entries` Service).
|
||||
- **Service-Config:** Umstellung auf Flyway-basiertes Tenant-Schema-Management in `EventsDatabaseConfiguration`.
|
||||
- **Build:** Behebung des `shadowJar` Fehlers in `events-infrastructure` durch Entfernen des unnötigen `ktor` Plugins in der Library-Schicht.
|
||||
|
||||
- Masterdata: Automatisches Seeding aller Reiterlizenzen (license_matrix) beim Start des `masterdata-service` via `ReiterlizenzenSeeder` (idempotent; SPRINGEN: LIZENZFREI,R1–R4; DRESSUR: LIZENZFREI,RD1–RD3).
|
||||
|
||||
- **ZNS-Import (LIZENZ01.dat):** Robuster Lizenz-Tokenizer und Normalizer implementiert.
|
||||
- Erkennung: `RD1..RD4`, `R1..R4`, `S1..S4`, `D2..D4`, Kombis `R{n}D{m}`, `R{n}S{k}`, `RDS4` (rechts-/letztes Vorkommen gewinnt).
|
||||
- Normalisierung: `S*→R*`, `D*→RD*`, `RD4→RD3` (bis Enum verfügbar), `R{n}S{k}→Rmax(n,k)`, `R{n}D{m}→R{n}+RD{m}`.
|
||||
- Integration: `ZnsReiterParser` füllt `lizenzen`-Liste (1:n) entsprechend und leitet `lizenzKlasse` bei fehlendem 4‑Spalten‑Code aus Token ab.
|
||||
- QA: Neue Unit-Tests (Tokenizer) für Beispiele `R2S3`, `R2D4`, `RD2` u. a.; alle Parser-Tests grün.
|
||||
|
||||
- **Core:** Modularisierte ZNS-Parser eingeführt (`ZnsVereinParser`, `ZnsReiterParser`, `ZnsPferdParser`, `ZnsFunktionaerParser`) zur Verbesserung der Wartbarkeit und Unterstützung von Einzelimporten.
|
||||
- **Fix:** SQL-Migrationsfehler in `V010` behoben, indem die Umbenennung der Spalte `name` in `verein_name` durch einen idempotenten `DO`-Block abgesichert wurde (behebt "Unable to resolve column 'name'").
|
||||
- **Infrastructure:** Datenbank-Migration `V010` hinzugefügt, um das Schema final mit den `Exposed`-Modellen zu synchronisieren.
|
||||
- **Infrastructure:** Datei-Archivierung für hochgeladene ZNS-ZIP-Dateien im `ZnsImportOrchestrator` implementiert.
|
||||
- **Infrastructure:** `ZnsImportService` vollständig auf die neuen spezialisierten Parser umgestellt und als Spring-Bean im Backend registriert.
|
||||
- **QA:** Umfassende Test-Suite `ZnsParserTest.kt` mit realen ZNS-Daten (Hämmerle, Neuwirth, etc.) erstellt; Korrektur der Extraktions-Logik für Mitgliedsnummern (Position 147) und Funktionär-Daten (RICHT01).
|
||||
- **QA:** Neue Betriebsanleitung für ZNS-Importer Tests erstellt: `docs/07_Infrastructure/runbooks/ZNS_Importer_Test_Manual.md`.
|
||||
- **Infrastructure:** `MasterdataDatabaseConfiguration` korrigiert: Expliziter Aufruf von `Database.connect()` hinzugefügt, um Abstürze beim Anwendungsstart ("No database specified") zu beheben.
|
||||
- **Infrastructure:** `application.yml` im `masterdata-service` vervollständigt (DataSource-Konfiguration mit `pg-user`/`pg-password` und Flyway-Aktivierung).
|
||||
- **Domain:** Legacy-Spezifikationen für ZNS-Schnittstellen (Import/Export) formalisiert:
|
||||
- `docs/03_Domain/02_Reference/Legacy_Specs/OETO-2026_Meldestelle_Pflichtenheft_V2.4.md` (Basis-Satzarten A-N)
|
||||
- `docs/03_Domain/02_Reference/Legacy_Specs/OETO-2026_Meldestelle_Erweiterung-Schnittstelle_2014.md` (XML-Erweiterung, LinkID-Logik)
|
||||
- **QA B-2:** `OnboardingValidator`-Objekt extrahiert; `OnboardingValidatorTest.kt` (17 Unit-Tests: Pflichtfeld-Guard,
|
||||
Doppelklick-Schutz, Abbrechen-Reset, rememberSaveable-Regression)
|
||||
- **QA B-3:** `AbteilungsRegelServiceTest.kt` um 14 Tests erweitert: CSN-C-NEU ≤95 cm / ≥100 cm Pflicht-Teilung,
|
||||
ORGANISATORISCH, SEPARATE_SIEGEREHRUNG, Caprilli-Regression, Grenzfälle 90/110 cm
|
||||
- **Domain:** `AbteilungsTeilungsTypE` um `ORGANISATORISCH` und `SEPARATE_SIEGEREHRUNG` erweitert
|
||||
|
||||
### Behoben
|
||||
|
||||
- **Masterdata/Infrastructure:** Kompilierfehler in `AltersklasseRepositoryImpl` durch Vereinheitlichung der Exposed-Tabellendefinition behoben:
|
||||
- `AltersklassenTable` → `AltersklasseTable`
|
||||
- Spalte `altersklassen_code` → `altersklasse_code`
|
||||
- Tabellenname `altersklassen` → `altersklasse`
|
||||
- **Masterdata/API:** Fehlendes Interface-Mapping ergänzt: `RegulationRepository` enthält nun `findAllTurnierklassen()`; `ExposedRegulationRepository` implementiert die Methode und `RegulationController` kompiliert wieder.
|
||||
- **ZNS-Import:** `AltersklassenExposedRepository` korrigiert (richtiger Domain-Typ `AltersklasseDefinition`, Mapping von `SparteE` und Zeitstempeln).
|
||||
|
||||
- **Migration V013:** Idempotent und robust gemacht. Alle `ALTER TABLE ... RENAME`-Operationen laufen nun nur, wenn die Quell-Tabelle existiert (Fix für "Unable to resolve table 'bundesland'/'turnierklasse'").
|
||||
- **Lizenz-Validierung:** `LicenseMatrixServiceImpl` um Cross-Discipline-Mapping R↔RD (ÖTO-Äquivalenzen) erweitert. Damit funktionieren Fälle wie Dressur-Starts mit Spring-Lizenz (R1→RD1, R2→RD2, R3/R4→RD3) bzw. umgekehrt konsistent.
|
||||
|
||||
- **Domain:** Striktere Spartenlizenz-Prüfung in `Reiter.hasLizenzForSparte` implementiert (RD1..RD3 nur DRESSUR; R1..R4 nur SPRINGEN). Behebt Testfehler „isEligible verweigert Start ohne passende Spartenlizenz“ im `LicenseMatrixServiceTest`.
|
||||
|
||||
### Behoben
|
||||
- **Backend (Entries):** Fehlschlagenden Unit-Test `berechneStartzeiten sollte Zeiten korrekt aufsummieren` korrigiert; der Test berücksichtigt nun den neuen 5-minütigen ÖTO-konformen Puffer nach der Parcoursbesichtigung (§43).
|
||||
- **Frontend (Desktop):** Build-Fehler ("No matching variant") beim `funktionaer-feature` behoben; fehlendes `build.gradle.kts` mit JVM-Target und Compose/Koin-Abhängigkeiten ergänzt.
|
||||
- **Frontend (Desktop):** Massive Inkonsistenzen in der Paketstruktur des `veranstalter-feature` bereinigt; alle Komponenten (ViewModel, Screens, Mocks) auf das Standardpaket `at.mocode.frontend.features.veranstalter` konsolidiert, um Redeklarationen und Import-Fehler zu beheben.
|
||||
- **Frontend (Desktop):** Kompilierfehler im `VeranstalterDetailScreen` durch korrekte Paket-Referenzierung des `FakeVeranstaltungStore` gelöst.
|
||||
|
||||
### Dokumentation
|
||||
- **Masterdata/Docs:** `REITER_LIZENZEN.md` überarbeitet:
|
||||
- Strikte Sparten-Trennung dokumentiert (RD1..RD3 nur Dressur; R1..R4 nur Springen).
|
||||
- Dressur-Tabelle korrigiert (R-Lizenzen entfernen; RD-Pflicht je Klasse).
|
||||
- Validierungslogik ergänzt (2-stufig: Spartenlizenz → Max-Turnierklasse; R↔RD Mapping nur zur Kappung, nicht zur Eligibility).
|
||||
- Vielseitigkeit (CCN/CCI) ergänzt: kumulative Anforderungen (Dressur RD* UND Springen R* je Klasse); Startkartenregel für Einsteiger.
|
||||
- Fahren (CAN/CAI) ergänzt: aktueller Systemzustand ohne `F*`‑Lizenzen dokumentiert; Teilnahme über Startkarte/Ausschreibung, geplante Enum‑Erweiterung vermerkt.
|
||||
- §15‑Tabelle (kompakt) integriert und auf ÖTO‑Referenz verlinkt; Bedeutungen „B,C“ und „LP“ erläutert. Hinweis aufgenommen, dass `RD4` derzeit nicht als Enum vorhanden ist und wie `RD3` behandelt wird.
|
||||
- Kombinationsreihen gemäß §15 ergänzt: `R1S2`, `R1S3`, `R1S4`, `R2S3`, `R2S4`, `R3S4` (neuer Unterabschnitt 2.6 mit Tabelle, identische Spalten wie 2.5).
|
||||
|
||||
### Behoben
|
||||
|
||||
- **Masterdata:** Qualifikations-Management für Funktionäre (Richter/Parcoursbauer) professionalisiert: Umstellung von unstrukturiertem Text auf offizielle ÖTO/FEI Master-Daten Referenzen (`QualifikationMasterTable`).
|
||||
- **Masterdata:** Fehlende Tabelle `funktionaer_qualifikation` in der Initialisierung beider Services (`masterdata` und `zns-import`) ergänzt, um `PSQLException` während des ZNS-Imports zu beheben.
|
||||
- **Infrastructure:** Start-Probleme des `masterdata-service` endgültig behoben: Port-Konflikt zwischen Spring Boot (Management/Actuator) und dem Gateway (8081) durch Umzug auf Port 8086 (gemäß Infrastruktur-Vorgaben) gelöst.
|
||||
- **Infrastructure:** Port-Konflikt im `masterdata-service` durch Trennung der Bind-Adressen (Spring: 127.0.0.1, Ktor: 0.0.0.0) und Bereinigung verwaister Prozesse stabilisiert.
|
||||
- **Core:** Veraltete `ZnsLegacyParsersTest.kt` entfernt; alle Tests sind nun in `ZnsParserTest.kt` konsolidiert.
|
||||
- **Domain:** Fehlschlagenden `LicenseMatrixServiceTest` behoben; fehlende `reiterLizenz`-Daten in Test-Reitern ergänzt und Fallback-Logik in `LicenseMatrixServiceImpl` für spartenübergreifende Lizenzen (z.B. Springlizenz für Dressur-Basis) stabilisiert.
|
||||
- **Infrastructure:** Fehlschlagenden `RegulationSeedVerificationTest` behoben; Testdaten an das neue Modell (`reiterLizenz` Feld) angepasst.
|
||||
- **Infrastructure:** Kompilierfehler 'Unresolved reference lizenzKlasse' in `ReiterExposedRepository` behoben; fehlendes Feld `lizenzKlasse` zu `ReiterTable` und Datenbank-Migration `V010` hinzugefügt.
|
||||
- **Onboarding:** `remember` → `rememberSaveable` für `geraetName`, `sharedKey`, `znsStatus` in `OnboardingScreen.kt` (
|
||||
Felder gingen bei Zurück-Navigation verloren)
|
||||
- **AbteilungsRegelService:** CSN-C-NEU Pflicht-Teilungslogik implementiert (≤95 cm: ohne/mit Lizenz; ≥100 cm: R1/R2+);
|
||||
`SparteE`-Import ergänzt
|
||||
|
||||
- Desktop-Packaging konfiguriert: `.deb` (Linux), `.msi` (Windows), `.dmg` (macOS)
|
||||
- Zentrale Versionsdatei `version.properties` (Single Source of Truth für SemVer)
|
||||
- Automatisches Git-Tagging via CI/CD (`release.yml` Gitea Actions Workflow)
|
||||
- `CHANGELOG.md` eingeführt (dieses Dokument)
|
||||
|
||||
---
|
||||
|
||||
## [1.0.6-SNAPSHOT] — 2026-04-10
|
||||
### [1.0.6-SNAPSHOT] — 2026-04-10
|
||||
|
||||
### Hinzugefügt
|
||||
- **Entries-Domain:** Strukturiertes Abteilungs-Warnungssystem gemäß ÖTO § 39 implementiert.
|
||||
|
||||
@@ -13,14 +13,14 @@ Die gesamte Projektdokumentation (Architektur, Fachdomäne, Entwickler-Anleitung
|
||||
|
||||
**Starte hier:** [**→ docs/README.md**](./docs/README.md)
|
||||
|
||||
| Bereich | Inhalt |
|
||||
|-----------------------------------------------|---------------------------------------------|
|
||||
| Bereich | Inhalt |
|
||||
|-----------------------------------------------|---------------------------------------------------|
|
||||
| [01_Architecture](./docs/01_Architecture) | Master Roadmap, ADRs, C4‑Modelle, Desktop‑Konzept |
|
||||
| [02_Guides](./docs/02_Guides) | Setup-Anleitungen, Entwickler-Guidelines |
|
||||
| [03_Domain](./docs/03_Domain) | Fachlichkeit, Turnierregeln, Entities |
|
||||
| [07_Infrastructure](./docs/07_Infrastructure) | Docker, Keycloak, CI/CD, Zora-Infrastruktur |
|
||||
| [02_Guides](./docs/02_Guides) | Setup-Anleitungen, Entwickler-Guidelines |
|
||||
| [03_Domain](./docs/03_Domain) | Fachlichkeit, Turnierregeln, Entities |
|
||||
| [07_Infrastructure](./docs/07_Infrastructure) | Docker, Keycloak, CI/CD, Zora-Infrastruktur |
|
||||
|
||||
Wesentliche Architektur-Referenz: [Offline‑First Desktop & Backend (Kurzkonzept)](./docs/01_Architecture/konzept-offline-first-desktop-backend-de.md)
|
||||
Wesentliche Architektur-Referenz: [Offline‑First Desktop & Backend (Kurzkonzept)](./docs/01_Architecture/Concepts/konzept-offline-first-desktop-backend-de.md)
|
||||
|
||||
---
|
||||
|
||||
@@ -113,3 +113,9 @@ Beiträge sind willkommen. Bitte lies zunächst die Entwickler-Guides unter [`do
|
||||
## 📜 Lizenz
|
||||
|
||||
Dieses Projekt steht unter der [MIT License](LICENSE).
|
||||
|
||||
---
|
||||
|
||||
## Test
|
||||
|
||||
Das ist der 2. Versuch über Remote zu Committen
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user