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.
144 lines
7.1 KiB
Markdown
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
|
|
|
|
|
|
|