Secretary

SRS/server
Login

SRS/server

SRS — secretary-server

Software Requirements Specification des CalDAV/CardDAV-Servers, abgeleitet aus dem Einsatzprofil des Android-Clients secretary-notes-android (~/Projects/secretary-notes-android). Maßgeblich ist das Funktionsprofil, das der Client auf dem Server voraussetzt.

1. Einleitung

1.1 Zweck

Der secretary-server stellt Einzel-Benutzern CalDAV- und CardDAV-Collections bereit. Im Vordergrund dieses SRS steht die Notiz-Funktionalität: Jede Notiz des Android-Clients ist ein VJOURNAL-Komponent (RFC 5545 §3.6.3) in einer .ics-Datei unter einer Kalender-Collection. Der Server behandelt VJOURNAL wie jedes andere Kalender-Komponent (Storage-Sniff, supported-calendar-component-set, ETags) – es sind keine server-seitigen Sonderfälle für Notizen nötig.

1.2 Referenzdokumente

1.3 Begriffe

Begriff Bedeutung
Collection Kalender-Verzeichnis unter <storage>/calendars/<id>/
Member .ics-Datei in einer Collection (genau eine Notiz)
VJOURNAL iCalendar-Komponent für Journal-/Notiz-Einträge
ETag Stabiler Hash (Inhalts-Hash) zur Änderungserkennung / If-Match
ctag Collection-Tag, ändert sich bei jeder Änderung der Collection
sync-token Änderungsspur für REPORT sync-collection

2. Anforderungsüberblick

Der Android-Client durchläuft folgende Abläufe gegen den Server:

Ablauf Server-Route Methoden
Anmeldung/Validierung /calendars/ PROPFIND Depth 1
Collections auflisten /calendars/ PROPFIND Depth 1
Notizen auflisten /calendars/<id>/ PROPFIND Depth 1
Notiz laden /calendars/<id>/<uid>.ics GET
Notiz anlegen/ändern /calendars/<id>/<uid>.ics PUT (+ If-Match)
Notiz löschen /calendars/<id>/<uid>.ics DELETE
Notiz-Sammlung anlegen /calendars/<id>/ MKCALENDAR

3. Funktionale Anforderungen

3.1 Authentifizierung

3.2 Collection-Auflistung (PROPFIND /calendars/, Depth 1)

3.3 Mitglieder-Auflistung (PROPFIND /calendars/<id>/, Depth 1)

3.4 Notiz laden (GET /calendars/<id>/<uid>.ics)

3.5 Notiz anlegen/ändern (PUT /calendars/<id>/<uid>.ics)

3.6 Notiz löschen (DELETE /calendars/<id>/<uid>.ics)

3.7 Collection anlegen (MKCALENDAR /calendars/<id>/)

3.8 ETag-Semantik

3.9 Komponenten-Handling allgemein

3.10 Verhalten aus Sicht des Android-Clients (Offline/Fehler)

3.11 Server-gesteuerter Sync mit Fortschritts-Metriken

Hintergrund: Der zugrunde liegende CalDAV/CardDAV-Sync ist pull-basiert – der Client fragt die Collections ab. Damit Clients während des Syncs einen Fortschrittsbalken (Spinner/Progressbar) und ein Abschluss-Resultat („Sync abgeschlossen"/„fehlgeschlagen") anzeigen können, stellt der Server zusätzlich einen JSON-„Sync-Job"-Dienst bereit: Der Server startet einen Hintergrund-Job, der eine Collection durchwandert, und liefert per Status-Endpunkt Fortschritts-Metriken (total/processed), die der Client pollen kann.

4. Nicht-funktionale Anforderungen

5. Verifikation

Anforderung Verifikation
FR-CAL-01..05 Integrationstests tests/server.rs + Client-Test RealServerParserTest (PROPFIND /calendars/ gegen live Server)
FR-CAL-06..10 Integrationstests PROPFIND Depth 1/Infinity inkl. Member-Eigenschaften
FR-CAL-11..13 GET-Roundtrip (200/404, ETag/Last-Modified)
FR-CAL-14..19 PUT-Roundtrip inkl. 412- und 400-Fällen
FR-CAL-20..21 DELETE-Roundtrip (204/404)
FR-CAL-22..25 MKCALENDAR mit <comp name="VJOURNAL"/> → .metadata/components=VJOURNAL
FR-CAL-26..27 ETag-Konsistenz über PROPFIND/GET/PUT
FR-AUTH-01..04 401 bei falschem Passwort, 207 bei korrektem
FR-OFF-02..05 Client-seitige Unit-/UI-Prüfung der Fehlerpfade
FR-SYNC-01..12 Integrationstests tests/server.rs (test_sync_*): Start/Status/Rundlauf, 404 für unbekannte Jobs, 400 für ungültige Collection
FR-SYNC-13 Client-Kompilierung (gradle :app:compileDebugKotlin) aller fünf secretary-Apps + Funktionstest Poll/Job-Lebenszyklus gegen den Sync-Job-Dienst

6. Offene Punkte