-- The catalogue's own copy of a video, built from the announcements cms
-- publishes on the catalogue topic. It is a read model, not a second source of
-- truth: every column here arrives in an announcement, and nothing in this
-- service ever writes a video of its own.
--
-- id is the id cms issued, carried in the announcement and reused verbatim, so
-- the two services can talk about the same video without a mapping table. It
-- is therefore NOT generated here: no DEFAULT, unlike cms's videos.id.
CREATE TABLE videos (
    id UUID PRIMARY KEY,
    title TEXT NOT NULL,
    playback_url TEXT NOT NULL DEFAULT '',
    -- Denormalized on purpose. cms owns the category vocabulary and sends
    -- names, so there is nothing here to join to and no id to keep in step;
    -- an array is what the read side actually serves.
    categories TEXT[] NOT NULL DEFAULT '{}',
    created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
    updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
