Initial commit from your app
This commit is contained in:
143
supabase/migrations/20250131132458_black_frost.sql
Normal file
143
supabase/migrations/20250131132458_black_frost.sql
Normal file
@@ -0,0 +1,143 @@
|
||||
/*
|
||||
# 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()
|
||||
)
|
||||
);
|
||||
Reference in New Issue
Block a user