Files
Holzleitner-Lieferservice-App/packages/holzleitner_api/README.md
Dennis Nemec 8cf4045e44 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.
2026-05-14 22:44:51 +02:00

7.1 KiB

holzleitner_api (EXPERIMENTAL)

Backend für die Holzleitner-Lieferservice-App — Tour, Beladung, Ausführung.

This Dart package is automatically generated by the OpenAPI Generator project:

  • API version: 0.1.0
  • Generator version: 7.10.0
  • Build package: org.openapitools.codegen.languages.DartDioClientCodegen

Requirements

Installation & Usage

pub.dev

To use the package from pub.dev, please include the following in pubspec.yaml

dependencies:
  holzleitner_api: 1.0.0

Github

If this Dart package is published to Github, please include the following in pubspec.yaml

dependencies:
  holzleitner_api:
    git:
      url: https://github.com/GIT_USER_ID/GIT_REPO_ID.git
      #ref: main

Local development

To use the package from your local drive, please include the following in pubspec.yaml

dependencies:
  holzleitner_api:
    path: /path/to/holzleitner_api

Getting Started

Please follow the installation procedure and then run the following:

import 'package:holzleitner_api/holzleitner_api.dart';


final api = HolzleitnerApi().getAccountsApi();
final int personalnummer = 789; // int | Personalnummer des Accounts

try {
    final response = await api.getAccount(personalnummer);
    print(response);
} catch on DioException (e) {
    print("Exception when calling AccountsApi->getAccount: $e\n");
}

Documentation for API Endpoints

All URIs are relative to http://localhost

Class Method HTTP request Description
AccountsApi getAccount GET /accounts/{personalnummer} Liest den Account zu einer Personalnummer.
CarsApi createMyCar POST /me/cars Legt ein neues Fahrzeug für den angemeldeten Fahrer an.
CarsApi listMyCars GET /me/cars Listet die Fahrzeuge des angemeldeten Fahrers.
CarsApi updateMyCar PATCH /me/cars/{car_id} Aktualisiert ein Fahrzeug (Kennzeichen ändern / deaktivieren).
DeliveriesApi assignCar PUT /deliveries/{delivery_id}/assigned-car Setzt das `assigned_car_id` einer Lieferung. `carId: null` löst die Zuordnung wieder. Der Use Case stellt sicher, dass das Fahrzeug zum angemeldeten Account gehört.
DeliveriesApi cancel POST /deliveries/{delivery_id}/cancel Setzt die Lieferung auf `canceled` — endgültig. Erlaubt aus `active` und `held`.
DeliveriesApi complete POST /deliveries/{delivery_id}/complete Schließt die Lieferung ab — `state = completed`. Nur aus `active`.
DeliveriesApi createNote POST /deliveries/{delivery_id}/notes Legt eine neue Notiz an einer Lieferung an. Mindestens eines von `text` und `imageAttachment` muss inhaltlich gefüllt sein (Leerstrings werden serverseitig getrimmt und als leer behandelt).
DeliveriesApi hold POST /deliveries/{delivery_id}/hold Setzt die Lieferung auf `held`. Nur aus `active` zulässig.
DeliveriesApi resume POST /deliveries/{delivery_id}/resume Setzt die Lieferung zurück auf `active`. Nur aus `held` zulässig.
HealthApi health GET /health Health-Endpoint für Load-Balancer und Container-Probes. Bewusst kein Auth — eine `200 ok`-Antwort darf nicht von der Auth abhängen.
ScansApi applyScans POST /scans Wendet eine Liste von Scan-Events idempotent an.
SyncApi syncTour POST /sync/tour Sync-Endpoint für das ERP: legt eine Tagestour samt Lieferungen und Positionen idempotent an. Identität pro Tour `(driver_personalnummer, tour_date)`, pro Lieferung `(belegart_id, belegnummer)`.
ToursApi getTour GET /tours/{tour_id} Lädt eine Tour mit allen Lieferungen, Positionen und referenzierten Stammdaten — die App nutzt das als einzigen großen Read.
ToursApi listMyToursToday GET /me/tours/today Listet heutige Touren des angemeldeten Fahrers (Filter aus dem JWT).
ToursApi setDeliveryOrder PUT /tours/{tour_id}/delivery-order Schreibt die Sortier-Reihenfolge aller Lieferungen einer Tour neu. Der Client schickt die vollständige neue Reihenfolge; fehlende oder fremde Lieferungs-Ids werden mit `400 validation` abgelehnt.

Documentation For Models

Documentation For Authorization

Authentication schemes defined for the API:

bearer_auth

  • Type: HTTP Bearer Token authentication (JWT)

Author