#!/usr/bin/env bash # # Erzeugt den Dart/Dio-Client für das Holzleitner-Rust-Backend aus # openapi/holzleitner.json. # # Voraussetzungen: # * Java 11+ (auf macOS: brew install openjdk@21) # * tool/openapi-generator-cli.jar (~29 MB, kann via # `tool/fetch_openapi_generator.sh` nachgeladen werden — derzeit # ist die JAR im Repo eingecheckt für reproduzierbare Builds) # # Aufruf vom Projekt-Root: # ./tool/generate_api_client.sh # # Output: # packages/holzleitner_api/ (eigenes Dart-Sub-Package) set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" JAR="${SCRIPT_DIR}/openapi-generator-cli.jar" SPEC="${PROJECT_ROOT}/openapi/holzleitner.json" OUT="${PROJECT_ROOT}/packages/holzleitner_api" if [[ ! -f "${JAR}" ]]; then echo "→ JAR fehlt — lade nach via tool/fetch_openapi_generator.sh" bash "${SCRIPT_DIR}/fetch_openapi_generator.sh" fi if [[ ! -f "${SPEC}" ]]; then echo "Error: OpenAPI-Spec nicht gefunden unter ${SPEC}" >&2 echo " → Backend starten und neu ziehen:" >&2 echo " curl http://127.0.0.1:3000/openapi.json | jq . > openapi/holzleitner.json" >&2 exit 1 fi echo "→ Generiere Dart-Client nach ${OUT}" # `dart-dio` erzeugt einen sauberen Client auf Basis von dio + Built Value. # Wir setzen pubName/pubAuthor, damit das Sub-Package gleich einen # klaren Namen hat. `wrapper: none` unterdrückt unnötiges Wrapping. java -jar "${JAR}" generate \ --input-spec "${SPEC}" \ --generator-name dart-dio \ --output "${OUT}" \ --additional-properties=\ pubName=holzleitner_api,\ pubAuthor=Holzleitner_GmbH,\ pubDescription="Generierter_Dart-Client_fuer_das_Holzleitner-Rust-Backend",\ nullableFields=true,\ serializationLibrary=built_value echo "→ build_runner für built_value-Glue (.g.dart) im Sub-Package" # Der dart-dio-Generator schreibt die DTO-Klassen, die `_$Foo`-Konstanten # kommen aber aus dem build_runner-Output. Ohne diesen Schritt bricht # `flutter analyze` mit "Undefined name '_$xyz'" — ein klassischer # Stolperstein nach Spec-Änderungen. ( cd "${OUT}" dart pub get dart run build_runner build --delete-conflicting-outputs ) echo "✓ Fertig. Code unter ${OUT}/lib" echo " Im Hauptpaket: flutter pub get (greift via path-dep zu)."