B2B-88: add starter kit structure and elements
This commit is contained in:
145
supabase copy/schemas/02-config.sql
Normal file
145
supabase copy/schemas/02-config.sql
Normal file
@@ -0,0 +1,145 @@
|
||||
/*
|
||||
* -------------------------------------------------------
|
||||
* 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;
|
||||
Reference in New Issue
Block a user