Skriv migrasjon 033 (e-post-preferanser per varseltype) Legg til send_notification_email() i app/email.py Bygg GET/PUT /notifications/email-prefs + koble e-post inn i create_notification() Bygg frontend: velg varseltyper for e-post i /account Scratch-verifiser hele løpet (preferanser + faktisk e-postutsending) Oppdater CLAUDE.md + rull ut mot ekte systemer (med bekreftelse) Live. E-post-fallback for varsler er ferdig, per-type valgbar av mottakeren selv: Ny seksjon "Varsler på e-post" i /account — fire avkrysningsbokser (Venneforespørsler/Runder/Resultater/Turneringer), trygg standard er ingen valgt (ingen e-post inntil du eksplisitt krysser av). E-post-utsendingen ligger ett sted (inni create_notification()), så alle nåværende og fremtidige varseltyper får e-post-støtte automatisk. 19/19 nye sjekker + full regresjon av fire eksisterende testsuiter (219 sjekker totalt) grønt. Migrasjon 033 kjørt mot ekte database (kun ny tabell), test_isolation.sql fortsatt 12/12, begge containere redeployet, teeoff.no upåvirket.
21 lines
1.2 KiB
SQL
21 lines
1.2 KiB
SQL
-- =====================================================================
|
|
-- TeeCup — e-post-fallback for varsler, per type (migrasjon 033,
|
|
-- 2026-07-28 oppfølging av varslingssenteret)
|
|
-- =====================================================================
|
|
-- Trygg standard: en bruker som ikke har gjort noe valg får ALDRI e-post
|
|
-- (samme "se ingenting"-filosofi som resten av appen, ADR-018/036) --
|
|
-- raden i user_notification_email_pref må EKSPLISITT finnes for at
|
|
-- create_notification() (app/routers/notifications.py) skal sende e-post
|
|
-- for akkurat den typen. Samme "tilstedeværelse = valgt"-mønster som
|
|
-- round_visible_category (032) og friend_categorization (025) -- ingen
|
|
-- egen boolean-kolonne per type, en rad per (bruker, type) i stedet.
|
|
\set ON_ERROR_STOP on
|
|
|
|
CREATE TABLE user_notification_email_pref (
|
|
user_id uuid NOT NULL REFERENCES app_user(id) ON DELETE CASCADE,
|
|
-- Samme faste sett som notification.type (026_notifications.sql).
|
|
type text NOT NULL CHECK (type IN ('friend', 'tournament', 'round', 'result')),
|
|
PRIMARY KEY (user_id, type)
|
|
);
|
|
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON user_notification_email_pref TO teecup_app;
|