feat(phase4): rich profiles, badges DB, block list
This commit is contained in:
@@ -344,6 +344,42 @@ ALTER TABLE channels ADD COLUMN IF NOT EXISTS message_count INTEGER NOT NULL DEF
|
||||
ALTER TABLE channels ADD COLUMN IF NOT EXISTS last_message_at TIMESTAMPTZ;
|
||||
CREATE INDEX IF NOT EXISTS idx_channels_parent ON channels(parent_channel_id);
|
||||
|
||||
ALTER TABLE users ADD COLUMN IF NOT EXISTS banner_url TEXT;
|
||||
ALTER TABLE users ADD COLUMN IF NOT EXISTS tagline VARCHAR(128);
|
||||
ALTER TABLE users ADD COLUMN IF NOT EXISTS social_links JSONB DEFAULT '[]';
|
||||
ALTER TABLE users ADD COLUMN IF NOT EXISTS pronouns VARCHAR(40);
|
||||
|
||||
-- Badges
|
||||
CREATE TABLE IF NOT EXISTS badges (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
server_id UUID REFERENCES servers(id) ON DELETE CASCADE,
|
||||
name VARCHAR(64) NOT NULL,
|
||||
icon TEXT,
|
||||
description TEXT,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_badges_server ON badges(server_id);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS user_badges (
|
||||
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
badge_id UUID NOT NULL REFERENCES badges(id) ON DELETE CASCADE,
|
||||
granted_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
granted_by UUID REFERENCES users(id) ON DELETE SET NULL,
|
||||
PRIMARY KEY (user_id, badge_id)
|
||||
);
|
||||
|
||||
-- Block list
|
||||
CREATE TABLE IF NOT EXISTS blocks (
|
||||
blocker_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
blocked_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
PRIMARY KEY (blocker_id, blocked_id)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_blocks_blocker ON blocks(blocker_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_blocks_blocked ON blocks(blocked_id);
|
||||
|
||||
-- Message full-text search
|
||||
ALTER TABLE messages ADD COLUMN IF NOT EXISTS search_vector tsvector;
|
||||
CREATE INDEX IF NOT EXISTS idx_messages_search ON messages USING GIN(search_vector);
|
||||
|
||||
Reference in New Issue
Block a user