Files
deckerr/supabase/migrations/20250131132458_black_frost.sql
2025-02-01 22:24:59 +01:00

144 lines
3.6 KiB
SQL

/*
# Initial Schema Setup
1. New Tables
- `profiles`
- `id` (uuid, references auth.users)
- `username` (text, unique)
- `theme_color` (text, enum)
- `created_at` (timestamptz)
- `updated_at` (timestamptz)
- `collections`
- `id` (uuid)
- `user_id` (uuid, references profiles)
- `card_id` (text)
- `quantity` (integer)
- `created_at` (timestamptz)
- `updated_at` (timestamptz)
- `decks`
- `id` (uuid)
- `user_id` (uuid, references profiles)
- `name` (text)
- `format` (text)
- `created_at` (timestamptz)
- `updated_at` (timestamptz)
- `deck_cards`
- `id` (uuid)
- `deck_id` (uuid, references decks)
- `card_id` (text)
- `quantity` (integer)
- `is_commander` (boolean)
2. Security
- Enable RLS on all tables
- Add policies for authenticated users to manage their own data
*/
-- Create profiles table
CREATE TABLE public.profiles (
id uuid PRIMARY KEY REFERENCES auth.users,
username text UNIQUE,
theme_color text CHECK (theme_color IN ('red', 'green', 'blue', 'yellow', 'grey', 'purple')),
created_at timestamptz DEFAULT now(),
updated_at timestamptz DEFAULT now()
);
-- Create collections table
CREATE TABLE public.collections (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
user_id uuid REFERENCES public.profiles(id) NOT NULL,
card_id text NOT NULL,
quantity integer DEFAULT 1,
created_at timestamptz DEFAULT now(),
updated_at timestamptz DEFAULT now()
);
-- Create decks table
CREATE TABLE public.decks (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
user_id uuid REFERENCES public.profiles(id) NOT NULL,
name text NOT NULL,
format text NOT NULL,
created_at timestamptz DEFAULT now(),
updated_at timestamptz DEFAULT now()
);
-- Create deck_cards table
CREATE TABLE public.deck_cards (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
deck_id uuid REFERENCES public.decks(id) NOT NULL,
card_id text NOT NULL,
quantity integer DEFAULT 1,
is_commander boolean DEFAULT false
);
-- Enable Row Level Security
ALTER TABLE public.profiles ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.collections ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.decks ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.deck_cards ENABLE ROW LEVEL SECURITY;
-- Profiles policies
CREATE POLICY "Users can view their own profile"
ON public.profiles
FOR SELECT
TO authenticated
USING (auth.uid() = id);
CREATE POLICY "Users can update their own profile"
ON public.profiles
FOR UPDATE
TO authenticated
USING (auth.uid() = id);
-- Collections policies
CREATE POLICY "Users can view their own collection"
ON public.collections
FOR SELECT
TO authenticated
USING (user_id = auth.uid());
CREATE POLICY "Users can manage their own collection"
ON public.collections
FOR ALL
TO authenticated
USING (user_id = auth.uid());
-- Decks policies
CREATE POLICY "Users can view their own decks"
ON public.decks
FOR SELECT
TO authenticated
USING (user_id = auth.uid());
CREATE POLICY "Users can manage their own decks"
ON public.decks
FOR ALL
TO authenticated
USING (user_id = auth.uid());
-- Deck cards policies
CREATE POLICY "Users can view cards in their decks"
ON public.deck_cards
FOR SELECT
TO authenticated
USING (
EXISTS (
SELECT 1 FROM public.decks
WHERE decks.id = deck_cards.deck_id
AND decks.user_id = auth.uid()
)
);
CREATE POLICY "Users can manage cards in their decks"
ON public.deck_cards
FOR ALL
TO authenticated
USING (
EXISTS (
SELECT 1 FROM public.decks
WHERE decks.id = deck_cards.deck_id
AND decks.user_id = auth.uid()
)
);