1. Added declarative schemas to Supabase 2. Added Cursor Ignore to ignore some files from Cursor 3. Added Prettier Ignore to ignore some files from Prettier 4. Formatted files so that PG Schema diff won't return any changes
146 lines
3.3 KiB
PL/PgSQL
146 lines
3.3 KiB
PL/PgSQL
/*
|
|
* -------------------------------------------------------
|
|
* Section: App Configuration
|
|
* We create the configuration for the Supabase MakerKit to enable or disable features
|
|
* -------------------------------------------------------
|
|
*/
|
|
|
|
create table if not exists
|
|
public.config (
|
|
enable_team_accounts boolean default true not null,
|
|
enable_account_billing boolean default true not null,
|
|
enable_team_account_billing boolean default true not null,
|
|
billing_provider public.billing_provider default 'stripe' not null
|
|
);
|
|
|
|
comment on table public.config is 'Configuration for the Supabase MakerKit.';
|
|
|
|
comment on column public.config.enable_team_accounts is 'Enable team accounts';
|
|
|
|
comment on column public.config.enable_account_billing is 'Enable billing for individual accounts';
|
|
|
|
comment on column public.config.enable_team_account_billing is 'Enable billing for team accounts';
|
|
|
|
comment on column public.config.billing_provider is 'The billing provider to use';
|
|
|
|
-- RLS(config)
|
|
alter table public.config enable row level security;
|
|
|
|
-- create config row
|
|
insert into
|
|
public.config (
|
|
enable_team_accounts,
|
|
enable_account_billing,
|
|
enable_team_account_billing
|
|
)
|
|
values
|
|
(true, true, true);
|
|
|
|
-- Revoke all on accounts table from authenticated and service_role
|
|
revoke all on public.config
|
|
from
|
|
authenticated,
|
|
service_role;
|
|
|
|
-- Open up access to config table for authenticated users and service_role
|
|
grant
|
|
select
|
|
on public.config to authenticated,
|
|
service_role;
|
|
|
|
-- RLS
|
|
-- SELECT(config):
|
|
-- Authenticated users can read the config
|
|
create policy "public config can be read by authenticated users" on public.config for
|
|
select
|
|
to authenticated using (true);
|
|
|
|
-- Function to get the config settings
|
|
create
|
|
or replace function public.get_config () returns json
|
|
set
|
|
search_path = '' as $$
|
|
declare
|
|
result record;
|
|
begin
|
|
select
|
|
*
|
|
from
|
|
public.config
|
|
limit 1 into result;
|
|
|
|
return row_to_json(result);
|
|
|
|
end;
|
|
|
|
$$ language plpgsql;
|
|
|
|
-- Automatically set timestamps on tables when a row is inserted or updated
|
|
create
|
|
or replace function public.trigger_set_timestamps () returns trigger
|
|
set
|
|
search_path = '' as $$
|
|
begin
|
|
if TG_OP = 'INSERT' then
|
|
new.created_at = now();
|
|
|
|
new.updated_at = now();
|
|
|
|
else
|
|
new.updated_at = now();
|
|
|
|
new.created_at = old.created_at;
|
|
|
|
end if;
|
|
|
|
return NEW;
|
|
|
|
end
|
|
$$ language plpgsql;
|
|
|
|
-- Automatically set user tracking on tables when a row is inserted or updated
|
|
create
|
|
or replace function public.trigger_set_user_tracking () returns trigger
|
|
set
|
|
search_path = '' as $$
|
|
begin
|
|
if TG_OP = 'INSERT' then
|
|
new.created_by = auth.uid();
|
|
new.updated_by = auth.uid();
|
|
|
|
else
|
|
new.updated_by = auth.uid();
|
|
|
|
new.created_by = old.created_by;
|
|
|
|
end if;
|
|
|
|
return NEW;
|
|
|
|
end
|
|
$$ language plpgsql;
|
|
|
|
grant
|
|
execute on function public.get_config () to authenticated,
|
|
service_role;
|
|
|
|
-- Function "public.is_set"
|
|
-- Check if a field is set in the config
|
|
create
|
|
or replace function public.is_set (field_name text) returns boolean
|
|
set
|
|
search_path = '' as $$
|
|
declare
|
|
result boolean;
|
|
begin
|
|
execute format('select %I from public.config limit 1', field_name) into result;
|
|
|
|
return result;
|
|
|
|
end;
|
|
|
|
$$ language plpgsql;
|
|
|
|
grant
|
|
execute on function public.is_set (text) to authenticated;
|