Git-Repository für bestehenden archivdms-Code initialisiert, Branch-/Commit-Konvention (feature/<ticket>-<slug>-Branches, Ticket-Prefix in Commit-Nachricht) etabliert.
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_createreminder_status_changereminder_deletereminder_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 shadcncalendar.tsx+popover.tsx, Notiz-Textarea)src/components/reminders/ReminderBadge.tsx— Statusanzeige in der Dokument-Detailansicht (offen/fällig/erledigt)src/components/reminders/ReminderList.tsx— Listendarstellungsrc/app/reminders/page.tsx— Übersichtsseite offen/erledigt
Akzeptanzkriterien
- Ein Nutzer kann für ein Dokument seines Tenants eine Wiedervorlage mit Fälligkeitsdatum und optionaler Notiz anlegen.
/reminderszeigt eigene offene und erledigte Wiedervorlagen getrennt an.- Statusänderung (erledigt/verworfen) ist nur für den Ersteller möglich (Ownership-Check via user_id).
- Der Cron-Job versendet für jede fällige, noch nicht benachrichtigte Wiedervorlage genau eine E-Mail und markiert sie danach als benachrichtigt.
- Jede Statusänderung und jeder Benachrichtigungsversuch erscheint im Audit-Log, inklusive Fehlschläge.