-- +goose Up -- Фаза 7: кэш серверных превью ссылок (unfurl). -- -- Ключ — sha256 (hex) от нормализованного URL: сам URL длинный и с query, -- а сравнивать нужно каноническую форму (internal/unfurl.Normalize). -- status: ok | empty | blocked | error. Истёкшие записи не отдаются -- (expires_at > now) и удаляются фоновой уборкой. CREATE TABLE link_previews ( url_hash TEXT PRIMARY KEY, url TEXT NOT NULL, title TEXT NOT NULL DEFAULT '', description TEXT NOT NULL DEFAULT '', site_name TEXT NOT NULL DEFAULT '', image_url TEXT NOT NULL DEFAULT '', status TEXT NOT NULL, fetched_at TEXT NOT NULL, expires_at TEXT NOT NULL ); CREATE INDEX link_previews_expires_idx ON link_previews (expires_at); -- +goose Down DROP TABLE link_previews;