Reminder Sync — TODO¶
Konzept¶
- Jeder Nutzer bekommt eine zufällige
reminder_sync_id(UUID) inapp_config - Reminders werden in PocketBase
df_personal_todosCollection gespeichert - Jeder PB-Eintrag hat ein
reminder_sync_id-Feld → filtert nach "dir" - Anderes Gerät: ID in Settings eingeben → gleiche Reminders
- Daten werden wie alle anderen Collections encrypted (mit dem Space Key)
Was zu tun ist¶
1. src/services/database.ts¶
reminder_sync_idzuapp_configactive keys (Doku) hinzufügen
2. src/services/syncService.ts¶
PB_PERSONAL_TODOS = 'df_personal_todos'Konstante hinzufügengetPersonalTodosFields()→[local_id, reminder_sync_id, data, created_at, updated_at]setupServer()→df_personal_todosCollection anlegencheckSchema()→df_personal_todosprüfen/fixenfullSync()→syncPersonalTodos(syncId)aufrufen (wenn connected)syncPersonalTodos(syncId):- Pull: alle PB-Einträge mit
reminder_sync_id = syncIdholen, decrypt, lokal upsert - Push: alle lokalen
personal_todosmitdeleted=0pushen/updaten - Delete: lokal deleted=1 → PB-Eintrag löschen (kein Tombstone nötig, da user-bound)
subscribe()→df_personal_todossubscriben, bei EventloadReminders()triggernpushReminder(id, syncId)→ public method für Store (fire-and-forget nach CUD)
3. src/stores/reminderStore.ts¶
- Nach
addReminder,updateReminder,deleteReminder,completeReminderetc.: →syncService.pushReminder(id, syncId)aufrufen (wenn connected) loadReminders()→ nach Load einmalsyncService.syncPersonalTodos()triggern (optional)
4. src/App.tsx¶
- Nach DB-Init:
reminder_sync_idaus app_config laden, falls nicht vorhanden: UUID generieren + speichern dragonfly-syncEvent Handler → auchloadReminders()aufrufen
5. src/components/SettingsPage.tsx — Tab "Benachrichtigungen"¶
Neuer Abschnitt "Reminder Sync" unterhalb SMTP:
┌─────────────────────────────────────────┐
│ Reminder Sync ID │
│ [f3a8b2c1-4d2e-...] [Kopieren] [Neu] │
│ │
│ Andere Geräte: Gib diese ID ein um │
│ deine Erinnerungen zu synchronisieren. │
│ [______________________________] [OK] │
└─────────────────────────────────────────┘
- State: reminderSyncId, reminderSyncIdInput, reminderSyncIdCopied
- getConfig('reminder_sync_id') beim Load
- "Neu"-Button: neue UUID generieren, speichern (mit Warnung: alte Reminders auf anderen Geräten werden getrennt)
- "OK"-Button: eingegebene ID übernehmen + speichern
6. i18n (de.json + en.json + rest)¶
Neue Keys in settings:
- reminderSyncTitle, reminderSyncHint, reminderSyncId, reminderSyncCopy, reminderSyncCopied
- reminderSyncNew, reminderSyncNewWarn, reminderSyncEnter, reminderSyncApply
Reihenfolge¶
- syncService (Kern-Logik)
- App.tsx (ID generieren)
- reminderStore (push nach CUD)
- SettingsPage UI
- i18n
- cargo check + tsc