47 lines
1.6 KiB
SQL
47 lines
1.6 KiB
SQL
-- Budgets table
|
|
create table budgets (
|
|
id uuid primary key default gen_random_uuid(),
|
|
user_id uuid not null references auth.users(id) on delete cascade,
|
|
start_date date not null,
|
|
end_date date not null,
|
|
currency text not null default 'EUR',
|
|
carryover_amount numeric(12,2) not null default 0,
|
|
created_at timestamptz not null default now(),
|
|
updated_at timestamptz not null default now()
|
|
);
|
|
|
|
create index budgets_user_id_idx on budgets(user_id);
|
|
|
|
alter table budgets enable row level security;
|
|
|
|
create policy "Users can CRUD own budgets"
|
|
on budgets for all
|
|
using (user_id = auth.uid())
|
|
with check (user_id = auth.uid());
|
|
|
|
-- Budget items table
|
|
create table budget_items (
|
|
id uuid primary key default gen_random_uuid(),
|
|
budget_id uuid not null references budgets(id) on delete cascade,
|
|
category_id uuid not null references categories(id) on delete restrict,
|
|
budgeted_amount numeric(12,2) not null default 0,
|
|
actual_amount numeric(12,2) not null default 0,
|
|
item_tier item_tier not null default 'fixed',
|
|
notes text,
|
|
created_at timestamptz not null default now(),
|
|
updated_at timestamptz not null default now()
|
|
);
|
|
|
|
create index budget_items_budget_id_idx on budget_items(budget_id);
|
|
|
|
alter table budget_items enable row level security;
|
|
|
|
create policy "Users can CRUD own budget items"
|
|
on budget_items for all
|
|
using (
|
|
budget_id in (select id from budgets where user_id = auth.uid())
|
|
)
|
|
with check (
|
|
budget_id in (select id from budgets where user_id = auth.uid())
|
|
);
|