36 lines
1.5 KiB
MySQL
36 lines
1.5 KiB
MySQL
|
|
-- 046_user_blocks.sql
|
||
|
|
-- User Block Relationships (BE-DB-007: Create migration for user_blocks table)
|
||
|
|
-- Add table for user block relationships
|
||
|
|
|
||
|
|
-- === USER BLOCKS ===
|
||
|
|
-- Table for tracking user-to-user block relationships
|
||
|
|
CREATE TABLE IF NOT EXISTS public.user_blocks (
|
||
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
|
|
blocker_id UUID NOT NULL REFERENCES public.users(id) ON DELETE CASCADE,
|
||
|
|
blocked_id UUID NOT NULL REFERENCES public.users(id) ON DELETE CASCADE,
|
||
|
|
|
||
|
|
-- Optional reason for blocking
|
||
|
|
reason VARCHAR(255),
|
||
|
|
|
||
|
|
-- Timestamps
|
||
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||
|
|
|
||
|
|
-- Constraints
|
||
|
|
CONSTRAINT uq_user_blocks_blocker_blocked UNIQUE (blocker_id, blocked_id),
|
||
|
|
CONSTRAINT chk_user_blocks_not_self CHECK (blocker_id != blocked_id)
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Indexes
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_user_blocks_blocker_id ON public.user_blocks(blocker_id);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_user_blocks_blocked_id ON public.user_blocks(blocked_id);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_user_blocks_created_at_desc ON public.user_blocks(created_at DESC);
|
||
|
|
|
||
|
|
-- Comments
|
||
|
|
COMMENT ON TABLE public.user_blocks IS 'User-to-user block relationships';
|
||
|
|
COMMENT ON COLUMN public.user_blocks.blocker_id IS 'ID of the user who is blocking';
|
||
|
|
COMMENT ON COLUMN public.user_blocks.blocked_id IS 'ID of the user being blocked';
|
||
|
|
COMMENT ON COLUMN public.user_blocks.reason IS 'Optional reason for blocking';
|
||
|
|
COMMENT ON CONSTRAINT chk_user_blocks_not_self ON public.user_blocks IS 'Prevents users from blocking themselves';
|
||
|
|
|