feat(api): Mail-Scanner — neue Mails durch TrackingParser jagen, Trackings anlegen #232

Closed
opened 2026-05-12 20:53:16 +02:00 by admin-mrrm · 0 comments
Owner

Hintergrund

v0.3 hat alle Bausteine (Parser, Provider, Sync, DB-Schema, UI, Toggle), aber niemand ruft den TrackingParserService mit echten Mails auf — daher landen nie Trackings in der DB.

Ziel

Periodischer Job, der für jeden Mail-Account mit trackingScanEnabled=true neue Mails durchsucht, Tracking-Nummern extrahiert und entsprechende parcel_trackings-Einträge anlegt.

Aufgaben

  • MailScannerService (TDD) — iteriert Accounts mit trackingScanEnabled=true
  • Pro Account: neue Mails seit last_scan_at holen (neue Spalte auf mail_accounts)
  • Jede Mail an TrackingParserService.parse() füttern
  • Bei Treffer: Tracking-Record erzeugen (parcelTrackings insert), Order-Info anlegen falls vorhanden
  • De-Duplizierung: gleiche trackingNumber+ownerSub nicht doppelt anlegen
  • Cron-Wrapper (analog tracking-sync.cron.ts), z.B. alle 15 min
  • Konfigurierbar via Env: MAIL_SCAN_INTERVAL_MIN, optional MAIL_SCAN_ENABLED=true

Akzeptanz

  • Tests: gegebene Mail mit Tracking-Nummer → neuer parcelTrackings-Eintrag
  • Tests: gleiche Mail zweimal scannen → keine Duplikate
  • Tests: Account mit trackingScanEnabled=false wird übersprungen

Hinweise

  • Erkennung-Logik (Regex + Claude-Fallback) ist in #135–#137 fertig; dieses Ticket ist nur der Glue-Code
  • Cron-Pattern wie tracking-sync.cron.ts (siehe #141)

Blocked by #231

## Hintergrund v0.3 hat alle Bausteine (Parser, Provider, Sync, DB-Schema, UI, Toggle), aber **niemand ruft den `TrackingParserService` mit echten Mails auf** — daher landen nie Trackings in der DB. ## Ziel Periodischer Job, der für jeden Mail-Account mit `trackingScanEnabled=true` neue Mails durchsucht, Tracking-Nummern extrahiert und entsprechende `parcel_trackings`-Einträge anlegt. ## Aufgaben - [ ] `MailScannerService` (TDD) — iteriert Accounts mit `trackingScanEnabled=true` - [ ] Pro Account: neue Mails seit `last_scan_at` holen (neue Spalte auf `mail_accounts`) - [ ] Jede Mail an `TrackingParserService.parse()` füttern - [ ] Bei Treffer: Tracking-Record erzeugen (`parcelTrackings` insert), Order-Info anlegen falls vorhanden - [ ] De-Duplizierung: gleiche `trackingNumber+ownerSub` nicht doppelt anlegen - [ ] Cron-Wrapper (analog `tracking-sync.cron.ts`), z.B. alle 15 min - [ ] Konfigurierbar via Env: `MAIL_SCAN_INTERVAL_MIN`, optional `MAIL_SCAN_ENABLED=true` ## Akzeptanz - Tests: gegebene Mail mit Tracking-Nummer → neuer `parcelTrackings`-Eintrag - Tests: gleiche Mail zweimal scannen → keine Duplikate - Tests: Account mit `trackingScanEnabled=false` wird übersprungen ## Hinweise - Erkennung-Logik (Regex + Claude-Fallback) ist in #135–#137 fertig; dieses Ticket ist nur der Glue-Code - Cron-Pattern wie `tracking-sync.cron.ts` (siehe #141) Blocked by #231
Sign in to join this conversation.
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#232
No description provided.