Files
archivdms/features/PROJ-1-wiedervorlage.md
T
patrick 9a24ea29e1 FDN-01: repository & projektgerüst
Git-Repository für bestehenden archivdms-Code initialisiert, Branch-/Commit-Konvention (feature/<ticket>-<slug>-Branches, Ticket-Prefix in Commit-Nachricht) etabliert.
2026-08-11 21:27:53 +02:00

3.2 KiB

PROJ-1: Wiedervorlage (Reminder pro Dokument)

Zweck

Nutzer können ein Dokument mit einem Fälligkeitsdatum ("Wiedervorlage") versehen, z.B. um eine Frist oder Rückmeldung nicht zu verpassen. Bei Fälligkeit wird der Ersteller per E-Mail benachrichtigt.

Datenmodell

Tabelle reminders (internal/storage/reminders.go):

CREATE TABLE IF NOT EXISTS reminders (
    id          BIGSERIAL PRIMARY KEY,
    document_id BIGINT NOT NULL REFERENCES documents(id),
    tenant_id   BIGINT NOT NULL,
    user_id     BIGINT NOT NULL,
    due_date    TIMESTAMPTZ NOT NULL,
    note        TEXT,
    status      TEXT NOT NULL DEFAULT 'open', -- open|done|dismissed
    notified_at TIMESTAMPTZ,
    created_at  TIMESTAMPTZ NOT NULL DEFAULT now(),
    updated_at  TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_reminders_tenant_due ON reminders(tenant_id, due_date) WHERE status = 'open';
CREATE INDEX IF NOT EXISTS idx_reminders_document ON reminders(document_id);

API (internal/api/reminder_handlers.go)

Methode Pfad Beschreibung
POST /api/documents/{id}/reminders Wiedervorlage für Dokument anlegen
GET /api/reminders?status= Eigene Wiedervorlagen auflisten
PATCH /api/reminders/{id} Status ändern (open/done/dismissed)
DELETE /api/reminders/{id} Wiedervorlage löschen

Alle Routen laufen durch s.auth(...) (Session + Tenant-Context). Ownership wird in der Store-Schicht über id + tenant_id + user_id erzwungen. Jede Statusänderung wird auditiert — auch fehlgeschlagene Versuche.

Audit-Events (internal/audit/audit.go)

  • reminder_create
  • reminder_status_change
  • reminder_delete
  • reminder_notify (Cron-Benachrichtigung)

Cron-Benachrichtigung

archivdms reminders notify [-config PATH] [-dry-run] (cmd/archivdms/cmd_reminders_notify.go) liest alle offenen Wiedervorlagen mit due_date <= now() und notified_at IS NULL, versendet eine E-Mail über internal/mailer, und setzt notified_at. Läuft stündlich per deploy/cron.d/archivdms-reminders.

Frontend

  • src/components/reminders/CreateReminderButton.tsx — Dialog zum Anlegen (Datum via shadcn calendar.tsx + popover.tsx, Notiz-Textarea)
  • src/components/reminders/ReminderBadge.tsx — Statusanzeige in der Dokument-Detailansicht (offen/fällig/erledigt)
  • src/components/reminders/ReminderList.tsx — Listendarstellung
  • src/app/reminders/page.tsx — Übersichtsseite offen/erledigt

Akzeptanzkriterien

  1. Ein Nutzer kann für ein Dokument seines Tenants eine Wiedervorlage mit Fälligkeitsdatum und optionaler Notiz anlegen.
  2. /reminders zeigt eigene offene und erledigte Wiedervorlagen getrennt an.
  3. Statusänderung (erledigt/verworfen) ist nur für den Ersteller möglich (Ownership-Check via user_id).
  4. Der Cron-Job versendet für jede fällige, noch nicht benachrichtigte Wiedervorlage genau eine E-Mail und markiert sie danach als benachrichtigt.
  5. Jede Statusänderung und jeder Benachrichtigungsversuch erscheint im Audit-Log, inklusive Fehlschläge.