Feed Phase 1: arm_affiliation and arm_follows schema
cgen-5f80fb1966e44ce4b6d3ad9c2c8055a9
This commit is contained in:
parent
1a72f45796
commit
4933692480
1 changed files with 64 additions and 0 deletions
64
supabase/migrations/20250115_feed_phase1_schema.sql
Normal file
64
supabase/migrations/20250115_feed_phase1_schema.sql
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
-- Ensure community_posts has arm_affiliation if not already present
|
||||
-- This migration adds the column and creates the arm_follows tracking table
|
||||
|
||||
-- Add arm_affiliation column to community_posts (if not exists)
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM information_schema.columns
|
||||
WHERE table_name = 'community_posts' AND column_name = 'arm_affiliation'
|
||||
) THEN
|
||||
ALTER TABLE community_posts ADD COLUMN arm_affiliation TEXT DEFAULT 'labs';
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
-- Create arm_follows table for tracking which arms users follow
|
||||
CREATE TABLE IF NOT EXISTS arm_follows (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
|
||||
arm_affiliation TEXT NOT NULL,
|
||||
followed_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||
UNIQUE(user_id, arm_affiliation)
|
||||
);
|
||||
|
||||
-- Create index for faster queries
|
||||
CREATE INDEX IF NOT EXISTS idx_arm_follows_user_id ON arm_follows(user_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_arm_follows_arm ON arm_follows(arm_affiliation);
|
||||
|
||||
-- Enable RLS on arm_follows
|
||||
ALTER TABLE arm_follows ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- Allow users to manage their own arm follows
|
||||
CREATE POLICY "Users can view their own arm follows"
|
||||
ON arm_follows
|
||||
FOR SELECT
|
||||
USING (auth.uid() = user_id);
|
||||
|
||||
CREATE POLICY "Users can create their own arm follows"
|
||||
ON arm_follows
|
||||
FOR INSERT
|
||||
WITH CHECK (auth.uid() = user_id);
|
||||
|
||||
CREATE POLICY "Users can delete their own arm follows"
|
||||
ON arm_follows
|
||||
FOR DELETE
|
||||
USING (auth.uid() = user_id);
|
||||
|
||||
-- Create a view for the current user's followed arms
|
||||
CREATE OR REPLACE VIEW user_followed_arms AS
|
||||
SELECT
|
||||
af.user_id,
|
||||
af.arm_affiliation,
|
||||
af.followed_at
|
||||
FROM arm_follows af
|
||||
WHERE af.user_id = auth.uid();
|
||||
|
||||
-- Ensure community_posts has proper arm_affiliation constraint
|
||||
ALTER TABLE community_posts
|
||||
DROP CONSTRAINT IF EXISTS community_posts_arm_affiliation_check,
|
||||
ADD CONSTRAINT community_posts_arm_affiliation_check
|
||||
CHECK (arm_affiliation IN ('labs', 'gameforge', 'corp', 'foundation', 'devlink', 'nexus', 'staff'));
|
||||
|
||||
-- Add index for faster arm filtering
|
||||
CREATE INDEX IF NOT EXISTS idx_community_posts_arm_affiliation ON community_posts(arm_affiliation);
|
||||
CREATE INDEX IF NOT EXISTS idx_community_posts_created_at ON community_posts(created_at DESC);
|
||||
Loading…
Reference in a new issue