"""Startup equivalents of migrations 19 and 20 (kept in sync by tests).""" FEATURE_SCHEMA = ( '''CREATE TABLE IF NOT EXISTS push_devices ( id BIGSERIAL PRIMARY KEY, user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, session_id INTEGER NOT NULL REFERENCES sessions(id) ON DELETE CASCADE, device_id UUID NOT NULL UNIQUE, token TEXT NOT NULL UNIQUE CHECK (length(token) BETWEEN 20 AND 4096), platform VARCHAR(16) NOT NULL CHECK (platform = 'android'), app_version VARCHAR(32) NOT NULL DEFAULT '', created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, last_seen_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE INDEX IF NOT EXISTS idx_push_devices_user ON push_devices(user_id); CREATE INDEX IF NOT EXISTS idx_push_devices_session ON push_devices(session_id);''', '''CREATE TABLE IF NOT EXISTS bug_report_submissions ( id UUID PRIMARY KEY, user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, state VARCHAR(16) NOT NULL DEFAULT 'new' CHECK (state IN ('new', 'sending', 'success', 'failed', 'unknown')), issue_number INTEGER, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, submitted_at TIMESTAMP, expires_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP + INTERVAL '24 hours' ); CREATE INDEX IF NOT EXISTS idx_bug_report_submissions_user ON bug_report_submissions(user_id, submitted_at);''', )