Phase A: generierter Dart-Client + DI-Foundation für Rust-Backend

OpenAPI-Generator-Setup:
- tool/generate_api_client.sh: Direkter Aufruf der openapi-generator-cli.jar
  (Java-CLI statt Dart-build_runner-Integration — vermeidet die
  analyzer-/source_gen-Version-Hölle mit json_serializable)
- tool/fetch_openapi_generator.sh: lädt die JAR (29 MB) nach (gitignored)
- openapi/holzleitner.json: Snapshot der Backend-Spec für reproduzierbare
  Generation
- packages/holzleitner_api/: generiertes Dart-Sub-Package (built_value +
  dio), per path-dep im Haupt-pubspec eingehängt

Netzwerk-Layer (lib/data/network/):
- BackendConfig: API- und Keycloak-Endpoints für Local-Dev (localhost
  wegen Keycloak-iss-Claim).
- AuthTokenProvider-Schnittstelle.
- DevPasswordGrantTokenProvider: Phase-A-Provider via Keycloak
  password-grant, Token-Caching mit Expiry-Check (Phase B ersetzt das
  durch flutter_appauth PKCE).
- HolzleitnerAuthInterceptor: dynamischer Bearer-Inject pro Request.
- HolzleitnerApiFactory: baut die generierte HolzleitnerApi-Klasse
  mit unserem Interceptor statt der vier Default-Auth-Interceptors.
- network_locator.registerNetworking(): get_it-Setup, in main() vor
  runApp() aufgerufen.

Clean-Arch-Scaffolding (lib/data/, lib/domain/):
- Verzeichnisstruktur für Phase C+D angelegt (mapper/, repository/,
  entity/, repository/) — befüllt sich in den Folge-Phasen.

Smoke-Test:
- tool/smoke_test_api.dart ruft /health (ungeschützt) und /me/cars
  (mit Bearer) via generiertem Client — grün gegen lokales Backend.
This commit is contained in:
Dennis Nemec
2026-05-14 22:44:51 +02:00
parent 456fb59668
commit 8cf4045e44
222 changed files with 19350 additions and 0 deletions

View File

@ -0,0 +1,104 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'serializers.dart';
// **************************************************************************
// BuiltValueGenerator
// **************************************************************************
Serializers _$serializers = (Serializers().toBuilder()
..add($Delivery.serializer)
..add(Account.serializer)
..add(Address.serializer)
..add(ApplyScansRequest.serializer)
..add(ApplyScansResponse.serializer)
..add(Article.serializer)
..add(AssignCarRequest.serializer)
..add(AuditAction.serializer)
..add(CancelDeliveryRequest.serializer)
..add(Car.serializer)
..add(CarResponse.serializer)
..add(CarsList.serializer)
..add(CreateCarRequest.serializer)
..add(CreateDeliveryNoteRequest.serializer)
..add(Customer.serializer)
..add(CustomerContact.serializer)
..add(DeliveryItem.serializer)
..add(DeliveryNote.serializer)
..add(DeliveryNoteResponse.serializer)
..add(DeliveryOrderEntry.serializer)
..add(DeliveryResponse.serializer)
..add(DeliveryState.serializer)
..add(DeliveryWithItems.serializer)
..add(HoldDeliveryRequest.serializer)
..add(ScanEvent.serializer)
..add(ScanResult.serializer)
..add(ScanResultStatus.serializer)
..add(ScanState.serializer)
..add(ScanStatus.serializer)
..add(SetDeliveryOrderRequest.serializer)
..add(SetDeliveryOrderResponse.serializer)
..add(SyncDelivery.serializer)
..add(SyncDeliveryItem.serializer)
..add(SyncTourRequest.serializer)
..add(SyncTourResponse.serializer)
..add(Tour.serializer)
..add(TourDetails.serializer)
..add(TourSummary.serializer)
..add(TourSummaryList.serializer)
..add(UpdateCarRequest.serializer)
..add(Warehouse.serializer)
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(Article)]),
() => ListBuilder<Article>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(CustomerContact)]),
() => ListBuilder<CustomerContact>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(Customer)]),
() => ListBuilder<Customer>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(DeliveryWithItems)]),
() => ListBuilder<DeliveryWithItems>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(DeliveryNote)]),
() => ListBuilder<DeliveryNote>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(Warehouse)]),
() => ListBuilder<Warehouse>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(Car)]),
() => ListBuilder<Car>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(DeliveryItem)]),
() => ListBuilder<DeliveryItem>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(String)]),
() => ListBuilder<String>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(DeliveryOrderEntry)]),
() => ListBuilder<DeliveryOrderEntry>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(ScanEvent)]),
() => ListBuilder<ScanEvent>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(ScanResult)]),
() => ListBuilder<ScanResult>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(String)]),
() => ListBuilder<String>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(String)]),
() => ListBuilder<String>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(SyncDelivery)]),
() => ListBuilder<SyncDelivery>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(SyncDeliveryItem)]),
() => ListBuilder<SyncDeliveryItem>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(TourSummary)]),
() => ListBuilder<TourSummary>()))
.build();
// ignore_for_file: deprecated_member_use_from_same_package,type=lint