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,130 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'tour.dart';
// **************************************************************************
// BuiltValueGenerator
// **************************************************************************
class _$Tour extends Tour {
@override
final int accountId;
@override
final Date date;
@override
final String id;
@override
final DateTime syncedAt;
factory _$Tour([void Function(TourBuilder)? updates]) =>
(TourBuilder()..update(updates))._build();
_$Tour._(
{required this.accountId,
required this.date,
required this.id,
required this.syncedAt})
: super._();
@override
Tour rebuild(void Function(TourBuilder) updates) =>
(toBuilder()..update(updates)).build();
@override
TourBuilder toBuilder() => TourBuilder()..replace(this);
@override
bool operator ==(Object other) {
if (identical(other, this)) return true;
return other is Tour &&
accountId == other.accountId &&
date == other.date &&
id == other.id &&
syncedAt == other.syncedAt;
}
@override
int get hashCode {
var _$hash = 0;
_$hash = $jc(_$hash, accountId.hashCode);
_$hash = $jc(_$hash, date.hashCode);
_$hash = $jc(_$hash, id.hashCode);
_$hash = $jc(_$hash, syncedAt.hashCode);
_$hash = $jf(_$hash);
return _$hash;
}
@override
String toString() {
return (newBuiltValueToStringHelper(r'Tour')
..add('accountId', accountId)
..add('date', date)
..add('id', id)
..add('syncedAt', syncedAt))
.toString();
}
}
class TourBuilder implements Builder<Tour, TourBuilder> {
_$Tour? _$v;
int? _accountId;
int? get accountId => _$this._accountId;
set accountId(int? accountId) => _$this._accountId = accountId;
Date? _date;
Date? get date => _$this._date;
set date(Date? date) => _$this._date = date;
String? _id;
String? get id => _$this._id;
set id(String? id) => _$this._id = id;
DateTime? _syncedAt;
DateTime? get syncedAt => _$this._syncedAt;
set syncedAt(DateTime? syncedAt) => _$this._syncedAt = syncedAt;
TourBuilder() {
Tour._defaults(this);
}
TourBuilder get _$this {
final $v = _$v;
if ($v != null) {
_accountId = $v.accountId;
_date = $v.date;
_id = $v.id;
_syncedAt = $v.syncedAt;
_$v = null;
}
return this;
}
@override
void replace(Tour other) {
_$v = other as _$Tour;
}
@override
void update(void Function(TourBuilder)? updates) {
if (updates != null) updates(this);
}
@override
Tour build() => _build();
_$Tour _build() {
final _$result = _$v ??
_$Tour._(
accountId: BuiltValueNullFieldError.checkNotNull(
accountId, r'Tour', 'accountId'),
date: BuiltValueNullFieldError.checkNotNull(date, r'Tour', 'date'),
id: BuiltValueNullFieldError.checkNotNull(id, r'Tour', 'id'),
syncedAt: BuiltValueNullFieldError.checkNotNull(
syncedAt, r'Tour', 'syncedAt'),
);
replace(_$result);
return _$result;
}
}
// ignore_for_file: deprecated_member_use_from_same_package,type=lint