feat(#228): Tracking-Event-Historie persistieren + Timeline-UI #338

Merged
admin-mrrm merged 1 commit from feat/228-tracking-event-historie into main 2026-05-19 18:55:30 +02:00
Owner

Summary

  • shared-types: neuer TrackingEvent-Typ + Tracking.events (default [])
  • DB: neue Tabelle parcel_tracking_events (FK → parcel_trackings, UNIQUE (tracking_id, occurred_at, description)) + Drizzle-Migration 0014_freezing_madelyne_pryor.sql
  • Provider-Interface: TrackingInfo.latestEventevents[] (ascending). Beide Provider mappen jetzt die volle Event-Liste (AfterShipProvider aus checkpoints[], Track17Provider aus track_info.tracking.providers[].events[] + latest_event als gemergter Fallback)
  • TrackingSyncService.refreshActive: Events pro Sync via onConflictDoNothing persistieren — funktioniert auch wenn sich der globale Status nicht geändert hat, neue Events landen trotzdem in der DB
  • TrackingsService.getOne: Events sortiert (ASC) im DTO mitliefern
  • TrackingDetailScreen: echte Timeline (DESC, neuestes oben). Stub-Verlauf bleibt nur Fallback solange der Provider noch keine Events geliefert hat
  • Wiki: Paket-Tracking.md + App-Nutzen.md aktualisiert

Test plan

  • pnpm test im API (361 Tests grün, inkl. 2 neue Sync-Tests für Event-Persistence + Dedup-Verhalten, 1 neuer Service-Test für Event-Loading in getOne, 2 neue Provider-Tests für volle Event-Listen)
  • Typecheck: api, web, mobile, shared-types, api-client, feature-tracking
  • Lint api clean (feature-tracking ESLint-v9 pre-existing)
  • Smoketest: nach Deploy auf dev-neu — Detail-Screen eines bestehenden Trackings öffnen, Timeline sollte nach nächstem Sync Events anzeigen

Closes #228

## Summary - shared-types: neuer `TrackingEvent`-Typ + `Tracking.events` (default `[]`) - DB: neue Tabelle `parcel_tracking_events` (FK → `parcel_trackings`, UNIQUE `(tracking_id, occurred_at, description)`) + Drizzle-Migration `0014_freezing_madelyne_pryor.sql` - Provider-Interface: `TrackingInfo.latestEvent` → `events[]` (ascending). Beide Provider mappen jetzt die volle Event-Liste (`AfterShipProvider` aus `checkpoints[]`, `Track17Provider` aus `track_info.tracking.providers[].events[]` + `latest_event` als gemergter Fallback) - `TrackingSyncService.refreshActive`: Events pro Sync via `onConflictDoNothing` persistieren — funktioniert auch wenn sich der globale Status nicht geändert hat, neue Events landen trotzdem in der DB - `TrackingsService.getOne`: Events sortiert (ASC) im DTO mitliefern - `TrackingDetailScreen`: echte Timeline (DESC, neuestes oben). Stub-Verlauf bleibt nur Fallback solange der Provider noch keine Events geliefert hat - Wiki: `Paket-Tracking.md` + `App-Nutzen.md` aktualisiert ## Test plan - [x] `pnpm test` im API (361 Tests grün, inkl. 2 neue Sync-Tests für Event-Persistence + Dedup-Verhalten, 1 neuer Service-Test für Event-Loading in `getOne`, 2 neue Provider-Tests für volle Event-Listen) - [x] Typecheck: api, web, mobile, shared-types, api-client, feature-tracking - [x] Lint api clean (feature-tracking ESLint-v9 pre-existing) - [ ] Smoketest: nach Deploy auf dev-neu — Detail-Screen eines bestehenden Trackings öffnen, Timeline sollte nach nächstem Sync Events anzeigen Closes #228
feat(#228): Tracking-Event-Historie persistieren + Timeline-UI
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
015276604d
- shared-types: TrackingEvent-Schema + Tracking.events (default [])
- DB: parcel_tracking_events (FK→parcel_trackings, UNIQUE auf
  (tracking_id, occurred_at, description)) + Drizzle-Migration 0014
- Provider-Interface: TrackingInfo.latestEvent → events[] (ascending)
- AfterShipProvider: alle checkpoints mappen statt nur dem letzten
- Track17Provider: track_info.tracking.providers[].events vollständig
  extrahieren, latest_event als Fallback gemerged + dedup nach time+description
- TrackingSyncService.refreshActive: Events pro Sync via
  onConflictDoNothing persistieren — funktioniert auch wenn sich der
  globale Status nicht geändert hat, neue Events werden trotzdem geschrieben
- TrackingsService.getOne: Events sortiert (ASC) im DTO mitliefern
- TrackingDetailScreen: echte Timeline rendert events DESC; Stub-Verlauf
  bleibt Fallback wenn der Provider noch keine Events geliefert hat
- Wiki: Paket-Tracking + App-Nutzen aktualisiert

Tests: 361 API-Tests grün (10 neue/angepasste, inkl. Event-Persistence
und Timeline-Loading).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
admin-mrrm deleted branch feat/228-tracking-event-historie 2026-05-19 18:55:31 +02:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
admin-mrrm/mrrmlabapp!338
No description provided.