feat(tours): GET /me/tours mit optionalem ?date= (statt /me/tours/today)
Fahrer können jetzt die Tour eines beliebigen Datums abrufen (z. B. morgen vorab). Ohne date-Param bleibt serverseitig 'heute' (Local::now bzw. Dev-today_override); Praezedenz: requested_date > today_override > Uhr. Endpoint umbenannt /me/tours/today -> /me/tours (semantisch sauberer). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@ -1,4 +1,4 @@
|
||||
//! Liste-Antwort für `GET /me/tours/today` — leichtgewichtig, ohne
|
||||
//! Liste-Antwort für `GET /me/tours` — leichtgewichtig, ohne
|
||||
//! Lieferpositionen. Die App nutzt diese Liste für die
|
||||
//! Fahrzeug/Tour-Auswahl-Page und lädt erst nach der Auswahl die
|
||||
//! vollständige Tour über `GET /tours/{id}`.
|
||||
|
||||
@ -6,9 +6,15 @@ use crate::dto::TourSummary;
|
||||
use crate::error::ApplicationError;
|
||||
use crate::ports::TourRepository;
|
||||
|
||||
/// Liste der heutigen Touren des angemeldeten Fahrers. Das "heute"
|
||||
/// liegt **bewusst im Backend**: die App-Uhr ist nicht autoritativ
|
||||
/// (Zeitzone, Falsch-Stand, Manipulation).
|
||||
/// Liste der Touren des angemeldeten Fahrers für ein Ziel-Datum.
|
||||
///
|
||||
/// Ohne explizites Datum gilt "heute" — und das liegt **bewusst im
|
||||
/// Backend**: die App-Uhr ist nicht autoritativ (Zeitzone, Falsch-Stand,
|
||||
/// Manipulation). Übergibt die App ein Datum (Fahrer wählt es aktiv im
|
||||
/// Kopf-Kalender, z. B. um die Tour von morgen vorab zu sehen), gewinnt
|
||||
/// dieses vor der Uhr.
|
||||
///
|
||||
/// Präzedenz: **`requested_date` > `today_override` > echte Uhr**.
|
||||
///
|
||||
/// `today_override` ist eine **DEV-ONLY**-Hintertür zum Testen mit
|
||||
/// historischen/importierten Touren: ist sie gesetzt, wird statt der echten
|
||||
@ -26,17 +32,21 @@ impl ListMyToursTodayUseCase {
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn execute(&self, personalnummer: i64) -> Result<Vec<TourSummary>, ApplicationError> {
|
||||
pub async fn execute(
|
||||
&self,
|
||||
personalnummer: i64,
|
||||
requested_date: Option<NaiveDate>,
|
||||
) -> Result<Vec<TourSummary>, ApplicationError> {
|
||||
// Bewusst Local statt Utc: der Tagesumschlag muss sich nach der
|
||||
// Ortszeit des Fahrers richten. Mit Utc wechselt "heute" erst um
|
||||
// 02:00 Ortszeit (CEST = UTC+2) — bis dahin sähe der Fahrer nach
|
||||
// Mitternacht noch die Touren von gestern. Der Server läuft in
|
||||
// Europe/Vienna, daher ist Local hier korrekt.
|
||||
let today = self
|
||||
.today_override
|
||||
let date = requested_date
|
||||
.or(self.today_override)
|
||||
.unwrap_or_else(|| Local::now().date_naive());
|
||||
self.repository
|
||||
.find_today_for_driver(personalnummer, today)
|
||||
.find_today_for_driver(personalnummer, date)
|
||||
.await
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user