-- User Follows Migration for BroadcastBeat -- Adds follow/unfollow functionality between users -- ============================================================ -- 1. USER FOLLOWS TABLE -- ============================================================ CREATE TABLE IF NOT EXISTS public.user_follows ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), follower_id UUID NOT NULL REFERENCES public.user_profiles(id) ON DELETE CASCADE, following_id UUID NOT NULL REFERENCES public.user_profiles(id) ON DELETE CASCADE, created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, CONSTRAINT user_follows_no_self_follow CHECK (follower_id != following_id) ); CREATE UNIQUE INDEX IF NOT EXISTS idx_user_follows_unique ON public.user_follows (follower_id, following_id); CREATE INDEX IF NOT EXISTS idx_user_follows_follower_id ON public.user_follows (follower_id); CREATE INDEX IF NOT EXISTS idx_user_follows_following_id ON public.user_follows (following_id); -- ============================================================ -- 2. ENABLE RLS -- ============================================================ ALTER TABLE public.user_follows ENABLE ROW LEVEL SECURITY; -- ============================================================ -- 3. RLS POLICIES -- ============================================================ DROP POLICY IF EXISTS "public_read_user_follows" ON public.user_follows; CREATE POLICY "public_read_user_follows" ON public.user_follows FOR SELECT TO public USING (true); DROP POLICY IF EXISTS "users_manage_own_follows" ON public.user_follows; CREATE POLICY "users_manage_own_follows" ON public.user_follows FOR ALL TO authenticated USING (follower_id = auth.uid()) WITH CHECK (follower_id = auth.uid());