TODO: TickTick-Sync für Erinnerungen ergänzt
Recherche zur TickTick Open API (Auth per persönlichem Token, Push/Pull- Endpunkte, Architektur analog zum bestehenden WebUntis-Abgleich) als neuer Punkt 6.1.7 festgehalten. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1766,6 +1766,42 @@ CSV-Exports der Auswertung (6.3.3) über die gemeinsame Export-Infrastruktur aus
|
|||||||
nur tatsächlich erfasste `TimeEntry`-Zeilen auswertet, keine `WorkTask`-Metadaten. In der
|
nur tatsächlich erfasste `TimeEntry`-Zeilen auswertet, keine `WorkTask`-Metadaten. In der
|
||||||
Aufgabenliste und im Dashboard-Widget "Offene Aufgaben" durch ein 🔔-Symbol gekennzeichnet.
|
Aufgabenliste und im Dashboard-Widget "Offene Aufgaben" durch ein 🔔-Symbol gekennzeichnet.
|
||||||
|
|
||||||
|
- [ ] **6.1.7** TickTick-Sync für Erinnerungen (Nutzerwunsch): Der Nutzer pflegt Erinnerungen
|
||||||
|
privat bereits in TickTick (Handy-App, eingespielte Routine dort). Ziel: ausgewählte
|
||||||
|
`WorkTask`s (zunächst `TaskKind.Reminder`, 6.1.6) bidirektional mit einer TickTick-Liste
|
||||||
|
abgleichen, damit Fälligkeiten auf dem Handy ankommen und dort abgehakte Erinnerungen auch
|
||||||
|
in LehrerApp als erledigt gelten. Rechercheergebnis zur TickTick Open API
|
||||||
|
(developer.ticktick.com/docs#/openapi, Stand 2026-08-24) unten festgehalten, damit das nicht
|
||||||
|
erneut nachgeschlagen werden muss.
|
||||||
|
- **Auth:** Kein OAuth2-Redirect-Flow nötig — für den Eigengebrauch (ein Nutzer, ein Gerät)
|
||||||
|
reicht ein persönliches API-Token (TickTick-Web: Avatar → Settings → Account → API Token),
|
||||||
|
gesendet als `Authorization: Bearer <token>`. Ein neues Einstellungsfeld "TickTick API
|
||||||
|
Token" genügt, analog zur bereits pro Gerät hinterlegten WebUntis-URL — kein lokaler
|
||||||
|
Redirect-Listener, keine Client-ID/Secret-Registrierung.
|
||||||
|
- **Push (LehrerApp → TickTick):** `POST /open/v1/task` (einzeln) bzw.
|
||||||
|
`POST /open/v1/task/batch` (bis 50 Creates/Updates in einem Call) beim Anlegen/Ändern einer
|
||||||
|
passenden `WorkTask`. Erledigt-Setzen auf TickTick-Seite über
|
||||||
|
`POST /open/v1/project/{projectId}/task/{taskId}/complete` bzw. gebündelt
|
||||||
|
`POST /open/v1/task/completeTasks` (bis 50 Task-IDs).
|
||||||
|
- **Pull erledigt (TickTick → LehrerApp):** `POST /open/v1/task/completed`, gefiltert nach
|
||||||
|
`projectIds` + Zeitfenster (`completedTime`-Range) — liefert bis zu 200 im Poll-Intervall
|
||||||
|
erledigte Tasks der Zielliste in einem Call, kein Abklappern einzelner Task-IDs nötig.
|
||||||
|
- **Pull neu (TickTick → LehrerApp):** `POST /open/v1/task/filter` (Filter nach `projectIds`
|
||||||
|
+ `status`, bis 200 Treffer) oder `GET /open/v1/project/{projectId}/data` (Projekt + aktive
|
||||||
|
Tasks + Columns in einem Call) auf die Zielliste pollen, Ergebnis gegen die lokal
|
||||||
|
gespeicherten Fremd-IDs diffen — neue IDs werden als `WorkTask` angelegt.
|
||||||
|
- **Architektur-Vorbild:** gleiches Muster wie der bestehende WebUntis-Abgleich —
|
||||||
|
framework-freie Diff-Logik nach `LehrerApp.Core/Services/` (analog `UntisDiffService`),
|
||||||
|
HTTP-Aufruf + Timer-Orchestrierung in `LehrerApp.Desktop/Services/` (analog
|
||||||
|
`UntisSyncService`). Zuordnung TickTick-Task-ID ↔ `WorkTask` über ein neues
|
||||||
|
`WorkTask.ExternalId`-Feld, idempotent wie `SubstitutionEntry.ExternalId`
|
||||||
|
(`GetByExternalId`, Update statt Duplikat).
|
||||||
|
- **Offen:** kein Webhook-Support in der API bekannt — nur Polling. Rate-Limits sind in der
|
||||||
|
Doku nicht dokumentiert, vor Produktivbetrieb mit kurzem Poll-Intervall (< 5 Min.) prüfen.
|
||||||
|
Vorher klären: welche `WorkTask`-Teilmenge synct (nur `Reminder` oder auch `WorkItem`?),
|
||||||
|
welche TickTick-Liste ist die Zielliste (fest in den Einstellungen hinterlegt, analog zur
|
||||||
|
WebUntis-URL)?
|
||||||
|
|
||||||
**Nachtrag — Pädagogische Klassen-Aufgaben (Nutzer-Feedback):** Wunsch nach einer zweiten,
|
**Nachtrag — Pädagogische Klassen-Aufgaben (Nutzer-Feedback):** Wunsch nach einer zweiten,
|
||||||
"weniger arbeitszeitrelevant als pädagogisch" gedachten Art von Todo-Item (Beispiele:
|
"weniger arbeitszeitrelevant als pädagogisch" gedachten Art von Todo-Item (Beispiele:
|
||||||
"Ansage an die Klasse", "Etwas zum Stichtag einsammeln/austeilen"), gleichberechtigt im
|
"Ansage an die Klasse", "Etwas zum Stichtag einsammeln/austeilen"), gleichberechtigt im
|
||||||
|
|||||||
Reference in New Issue
Block a user