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

144 lines
7.1 KiB
Markdown

# holzleitner_api (EXPERIMENTAL)
Backend für die Holzleitner-Lieferservice-App — Tour, Beladung, Ausführung.
This Dart package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
- API version: 0.1.0
- Generator version: 7.10.0
- Build package: org.openapitools.codegen.languages.DartDioClientCodegen
## Requirements
* Dart 2.15.0+ or Flutter 2.8.0+
* Dio 5.0.0+ (https://pub.dev/packages/dio)
## Installation & Usage
### pub.dev
To use the package from [pub.dev](https://pub.dev), please include the following in pubspec.yaml
```yaml
dependencies:
holzleitner_api: 1.0.0
```
### Github
If this Dart package is published to Github, please include the following in pubspec.yaml
```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
```yaml
dependencies:
holzleitner_api:
path: /path/to/holzleitner_api
```
## Getting Started
Please follow the [installation procedure](#installation--usage) and then run the following:
```dart
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*](doc/AccountsApi.md) | [**getAccount**](doc/AccountsApi.md#getaccount) | **GET** /accounts/{personalnummer} | Liest den Account zu einer Personalnummer.
[*CarsApi*](doc/CarsApi.md) | [**createMyCar**](doc/CarsApi.md#createmycar) | **POST** /me/cars | Legt ein neues Fahrzeug für den angemeldeten Fahrer an.
[*CarsApi*](doc/CarsApi.md) | [**listMyCars**](doc/CarsApi.md#listmycars) | **GET** /me/cars | Listet die Fahrzeuge des angemeldeten Fahrers.
[*CarsApi*](doc/CarsApi.md) | [**updateMyCar**](doc/CarsApi.md#updatemycar) | **PATCH** /me/cars/{car_id} | Aktualisiert ein Fahrzeug (Kennzeichen ändern / deaktivieren).
[*DeliveriesApi*](doc/DeliveriesApi.md) | [**assignCar**](doc/DeliveriesApi.md#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*](doc/DeliveriesApi.md) | [**cancel**](doc/DeliveriesApi.md#cancel) | **POST** /deliveries/{delivery_id}/cancel | Setzt die Lieferung auf `canceled` — endgültig. Erlaubt aus `active` und `held`.
[*DeliveriesApi*](doc/DeliveriesApi.md) | [**complete**](doc/DeliveriesApi.md#complete) | **POST** /deliveries/{delivery_id}/complete | Schließt die Lieferung ab — `state = completed`. Nur aus `active`.
[*DeliveriesApi*](doc/DeliveriesApi.md) | [**createNote**](doc/DeliveriesApi.md#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*](doc/DeliveriesApi.md) | [**hold**](doc/DeliveriesApi.md#hold) | **POST** /deliveries/{delivery_id}/hold | Setzt die Lieferung auf `held`. Nur aus `active` zulässig.
[*DeliveriesApi*](doc/DeliveriesApi.md) | [**resume**](doc/DeliveriesApi.md#resume) | **POST** /deliveries/{delivery_id}/resume | Setzt die Lieferung zurück auf `active`. Nur aus `held` zulässig.
[*HealthApi*](doc/HealthApi.md) | [**health**](doc/HealthApi.md#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*](doc/ScansApi.md) | [**applyScans**](doc/ScansApi.md#applyscans) | **POST** /scans | Wendet eine Liste von Scan-Events idempotent an.
[*SyncApi*](doc/SyncApi.md) | [**syncTour**](doc/SyncApi.md#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*](doc/ToursApi.md) | [**getTour**](doc/ToursApi.md#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*](doc/ToursApi.md) | [**listMyToursToday**](doc/ToursApi.md#listmytourstoday) | **GET** /me/tours/today | Listet heutige Touren des angemeldeten Fahrers (Filter aus dem JWT).
[*ToursApi*](doc/ToursApi.md) | [**setDeliveryOrder**](doc/ToursApi.md#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
- [Account](doc/Account.md)
- [Address](doc/Address.md)
- [ApplyScansRequest](doc/ApplyScansRequest.md)
- [ApplyScansResponse](doc/ApplyScansResponse.md)
- [Article](doc/Article.md)
- [AssignCarRequest](doc/AssignCarRequest.md)
- [AuditAction](doc/AuditAction.md)
- [CancelDeliveryRequest](doc/CancelDeliveryRequest.md)
- [Car](doc/Car.md)
- [CarResponse](doc/CarResponse.md)
- [CarsList](doc/CarsList.md)
- [CreateCarRequest](doc/CreateCarRequest.md)
- [CreateDeliveryNoteRequest](doc/CreateDeliveryNoteRequest.md)
- [Customer](doc/Customer.md)
- [CustomerContact](doc/CustomerContact.md)
- [Delivery](doc/Delivery.md)
- [DeliveryItem](doc/DeliveryItem.md)
- [DeliveryNote](doc/DeliveryNote.md)
- [DeliveryNoteResponse](doc/DeliveryNoteResponse.md)
- [DeliveryOrderEntry](doc/DeliveryOrderEntry.md)
- [DeliveryResponse](doc/DeliveryResponse.md)
- [DeliveryState](doc/DeliveryState.md)
- [DeliveryWithItems](doc/DeliveryWithItems.md)
- [HoldDeliveryRequest](doc/HoldDeliveryRequest.md)
- [ScanEvent](doc/ScanEvent.md)
- [ScanResult](doc/ScanResult.md)
- [ScanResultStatus](doc/ScanResultStatus.md)
- [ScanState](doc/ScanState.md)
- [ScanStatus](doc/ScanStatus.md)
- [SetDeliveryOrderRequest](doc/SetDeliveryOrderRequest.md)
- [SetDeliveryOrderResponse](doc/SetDeliveryOrderResponse.md)
- [SyncDelivery](doc/SyncDelivery.md)
- [SyncDeliveryItem](doc/SyncDeliveryItem.md)
- [SyncTourRequest](doc/SyncTourRequest.md)
- [SyncTourResponse](doc/SyncTourResponse.md)
- [Tour](doc/Tour.md)
- [TourDetails](doc/TourDetails.md)
- [TourSummary](doc/TourSummary.md)
- [TourSummaryList](doc/TourSummaryList.md)
- [UpdateCarRequest](doc/UpdateCarRequest.md)
- [Warehouse](doc/Warehouse.md)
## Documentation For Authorization
Authentication schemes defined for the API:
### bearer_auth
- **Type**: HTTP Bearer Token authentication (JWT)
## Author