Files
Toot-Worker/migrations/0007_polls_lists_push_scheduled.sql
2026-05-14 19:29:34 +08:00

74 lines
2.1 KiB
SQL

-- Mastodon API compatibility for polls, lists, push subscriptions, and
-- scheduled statuses.
CREATE TABLE IF NOT EXISTS polls (
id TEXT PRIMARY KEY,
status_id TEXT NOT NULL UNIQUE,
user_id TEXT NOT NULL,
expires_at TEXT,
multiple INTEGER NOT NULL DEFAULT 0,
hide_totals INTEGER NOT NULL DEFAULT 0,
created_at TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS poll_options (
poll_id TEXT NOT NULL,
position INTEGER NOT NULL,
title TEXT NOT NULL,
PRIMARY KEY(poll_id, position)
);
CREATE TABLE IF NOT EXISTS poll_votes (
poll_id TEXT NOT NULL,
position INTEGER NOT NULL,
voter_actor TEXT NOT NULL,
created_at TEXT NOT NULL,
PRIMARY KEY(poll_id, position, voter_actor)
);
CREATE INDEX IF NOT EXISTS idx_polls_status ON polls(status_id);
CREATE INDEX IF NOT EXISTS idx_poll_votes_poll ON poll_votes(poll_id);
CREATE TABLE IF NOT EXISTS lists (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
title TEXT NOT NULL,
replies_policy TEXT NOT NULL DEFAULT 'list',
exclusive INTEGER NOT NULL DEFAULT 0,
created_at TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS list_accounts (
list_id TEXT NOT NULL,
account_actor TEXT NOT NULL,
created_at TEXT NOT NULL,
PRIMARY KEY(list_id, account_actor)
);
CREATE INDEX IF NOT EXISTS idx_lists_user ON lists(user_id, created_at DESC);
CREATE INDEX IF NOT EXISTS idx_list_accounts_list ON list_accounts(list_id, created_at DESC);
CREATE TABLE IF NOT EXISTS push_subscriptions (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL UNIQUE,
endpoint TEXT NOT NULL,
server_key TEXT NOT NULL,
auth TEXT NOT NULL,
alerts_json TEXT NOT NULL DEFAULT '{}',
policy TEXT NOT NULL DEFAULT 'all',
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS scheduled_statuses (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
params_json TEXT NOT NULL,
media_ids_json TEXT NOT NULL DEFAULT '[]',
scheduled_at TEXT NOT NULL,
created_at TEXT NOT NULL
);
CREATE INDEX IF NOT EXISTS idx_scheduled_statuses_user_time ON scheduled_statuses(user_id, scheduled_at ASC);
CREATE INDEX IF NOT EXISTS idx_scheduled_statuses_due ON scheduled_statuses(scheduled_at ASC);