teecup/073_round_message_client_id.sql

26 lines
1.3 KiB
MySQL
Raw Permalink Normal View History

-- =====================================================================
-- TeeCup — Idempotens for kommentar-posting via offline-kø (ADR-028-
-- tillegget "kommentarer/bilder offline", 2026-08-14, migrasjon 073).
--
-- Hull-score-køen (ADR-028) er trygg å synke på nytt fordi PATCH +
-- expected_version konvergerer uansett hvor mange ganger den gjentas.
-- POST /rounds/{id}/messages er IKKE naturlig idempotent -- hvert kall
-- oppretter en ny rad. En avbrutt synk (nettleseren lukkes midt i et
-- flush-kall, eller samme kø flushes fra to faner) kunne dermed skrevet
-- samme kommentar to ganger. Løsning: klienten sender en selvgenerert
-- `client_message_id` (crypto.randomUUID()); et gjentatt kall med samme
-- id returnerer den allerede opprettede meldingen i stedet for å
-- opprette en duplikat (se app/routers/round_messages.py::
-- post_round_message).
-- =====================================================================
\set ON_ERROR_STOP on
ALTER TABLE round_message ADD COLUMN client_message_id uuid;
-- Delvis unik indeks (kun når feltet faktisk er satt) -- eldre/andre
-- kallere som ikke sender client_message_id er upåvirket, samme
-- "None = ikke i bruk"-konvensjon som resten av appen.
CREATE UNIQUE INDEX round_message_client_id_idx
ON round_message (round_id, client_message_id)
WHERE client_message_id IS NOT NULL;