init
This commit is contained in:
@@ -0,0 +1,157 @@
|
||||
-- Nova40 Database Schema
|
||||
-- Run this in your Supabase SQL editor
|
||||
|
||||
-- Enable UUID extension
|
||||
create extension if not exists "uuid-ossp";
|
||||
|
||||
-- 1. Identities table
|
||||
create table identities (
|
||||
id uuid default uuid_generate_v4() primary key,
|
||||
user_id uuid references auth.users(id) on delete cascade not null,
|
||||
title text not null,
|
||||
description text,
|
||||
start_date date not null,
|
||||
end_date date not null,
|
||||
created_at timestamptz default now()
|
||||
);
|
||||
|
||||
alter table identities enable row level security;
|
||||
|
||||
create policy "Users can view their own identities"
|
||||
on identities for select using (auth.uid() = user_id);
|
||||
|
||||
create policy "Users can create their own identities"
|
||||
on identities for insert with check (auth.uid() = user_id);
|
||||
|
||||
-- 2. Habits table
|
||||
create table habits (
|
||||
id uuid default uuid_generate_v4() primary key,
|
||||
identity_id uuid references identities(id) on delete cascade not null,
|
||||
title text not null,
|
||||
description text
|
||||
);
|
||||
|
||||
alter table habits enable row level security;
|
||||
|
||||
create policy "Users can view habits for their identities"
|
||||
on habits for select using (
|
||||
identity_id in (select id from identities where user_id = auth.uid())
|
||||
);
|
||||
|
||||
create policy "Users can create habits for their identities"
|
||||
on habits for insert with check (
|
||||
identity_id in (select id from identities where user_id = auth.uid())
|
||||
);
|
||||
|
||||
-- 3. Daily logs table
|
||||
create table daily_logs (
|
||||
id uuid default uuid_generate_v4() primary key,
|
||||
identity_id uuid references identities(id) on delete cascade not null,
|
||||
date date not null,
|
||||
day_number int not null,
|
||||
identity_check text check (identity_check in ('yes', 'almost', 'no')),
|
||||
note text,
|
||||
unique (identity_id, date)
|
||||
);
|
||||
|
||||
alter table daily_logs enable row level security;
|
||||
|
||||
create policy "Users can view their daily logs"
|
||||
on daily_logs for select using (
|
||||
identity_id in (select id from identities where user_id = auth.uid())
|
||||
);
|
||||
|
||||
create policy "Users can insert daily logs"
|
||||
on daily_logs for insert with check (
|
||||
identity_id in (select id from identities where user_id = auth.uid())
|
||||
);
|
||||
|
||||
create policy "Users can update their daily logs"
|
||||
on daily_logs for update using (
|
||||
identity_id in (select id from identities where user_id = auth.uid())
|
||||
);
|
||||
|
||||
-- 4. Habit logs table
|
||||
create table habit_logs (
|
||||
id uuid default uuid_generate_v4() primary key,
|
||||
habit_id uuid references habits(id) on delete cascade not null,
|
||||
date date not null,
|
||||
completed boolean default false,
|
||||
unique (habit_id, date)
|
||||
);
|
||||
|
||||
alter table habit_logs enable row level security;
|
||||
|
||||
create policy "Users can view their habit logs"
|
||||
on habit_logs for select using (
|
||||
habit_id in (
|
||||
select h.id from habits h
|
||||
join identities i on h.identity_id = i.id
|
||||
where i.user_id = auth.uid()
|
||||
)
|
||||
);
|
||||
|
||||
create policy "Users can insert habit logs"
|
||||
on habit_logs for insert with check (
|
||||
habit_id in (
|
||||
select h.id from habits h
|
||||
join identities i on h.identity_id = i.id
|
||||
where i.user_id = auth.uid()
|
||||
)
|
||||
);
|
||||
|
||||
create policy "Users can update their habit logs"
|
||||
on habit_logs for update using (
|
||||
habit_id in (
|
||||
select h.id from habits h
|
||||
join identities i on h.identity_id = i.id
|
||||
where i.user_id = auth.uid()
|
||||
)
|
||||
);
|
||||
|
||||
-- 5. Game sessions table
|
||||
create table game_sessions (
|
||||
id uuid default uuid_generate_v4() primary key,
|
||||
identity_id uuid references identities(id) on delete cascade not null,
|
||||
game_type text not null,
|
||||
score int default 0,
|
||||
created_at timestamptz default now()
|
||||
);
|
||||
|
||||
alter table game_sessions enable row level security;
|
||||
|
||||
create policy "Users can view their game sessions"
|
||||
on game_sessions for select using (
|
||||
identity_id in (select id from identities where user_id = auth.uid())
|
||||
);
|
||||
|
||||
create policy "Users can insert game sessions"
|
||||
on game_sessions for insert with check (
|
||||
identity_id in (select id from identities where user_id = auth.uid())
|
||||
);
|
||||
|
||||
-- 6. Stats table
|
||||
create table stats (
|
||||
id uuid default uuid_generate_v4() primary key,
|
||||
identity_id uuid references identities(id) on delete cascade not null unique,
|
||||
discipline_score int default 0,
|
||||
focus_score int default 0,
|
||||
consistency_score int default 0
|
||||
);
|
||||
|
||||
alter table stats enable row level security;
|
||||
|
||||
create policy "Users can view their stats"
|
||||
on stats for select using (
|
||||
identity_id in (select id from identities where user_id = auth.uid())
|
||||
);
|
||||
|
||||
create policy "Users can insert their stats"
|
||||
on stats for insert with check (
|
||||
identity_id in (select id from identities where user_id = auth.uid())
|
||||
);
|
||||
|
||||
create policy "Users can update their stats"
|
||||
on stats for update using (
|
||||
identity_id in (select id from identities where user_id = auth.uid())
|
||||
);
|
||||
Reference in New Issue
Block a user