···11+-- Function to create homepage infrastructure for new identities
22+-- Replicates the logic from createIdentity TypeScript function
33+-- Returns the permission token ID to be used as home_page
44+CREATE OR REPLACE FUNCTION create_identity_homepage()
55+RETURNS uuid AS $$
66+DECLARE
77+ new_entity_set_id uuid;
88+ new_entity_id uuid;
99+ new_permission_token_id uuid;
1010+BEGIN
1111+ -- Create a new entity set
1212+ INSERT INTO entity_sets DEFAULT VALUES
1313+ RETURNING id INTO new_entity_set_id;
1414+1515+ -- Create a root entity and add it to that entity set
1616+ new_entity_id := gen_random_uuid();
1717+ INSERT INTO entities (id, set)
1818+ VALUES (new_entity_id, new_entity_set_id);
1919+2020+ -- Create a new permission token
2121+ INSERT INTO permission_tokens (root_entity)
2222+ VALUES (new_entity_id)
2323+ RETURNING id INTO new_permission_token_id;
2424+2525+ -- Give the token full permissions on that entity set
2626+ INSERT INTO permission_token_rights (token, entity_set, read, write, create_token, change_entity_set)
2727+ VALUES (new_permission_token_id, new_entity_set_id, true, true, true, true);
2828+2929+ RETURN new_permission_token_id;
3030+END;
3131+$$ LANGUAGE plpgsql;
3232+3333+-- Set the function as the default value for home_page column
3434+ALTER TABLE identities ALTER COLUMN home_page SET DEFAULT create_identity_homepage();
···11+-- site_standard_publications table (modeled off publications)
22+create table "public"."site_standard_publications" (
33+ "uri" text not null,
44+ "data" jsonb not null,
55+ "indexed_at" timestamp with time zone not null default now(),
66+ "identity_did" text not null
77+);
88+alter table "public"."site_standard_publications" enable row level security;
99+1010+-- site_standard_documents table (modeled off documents)
1111+create table "public"."site_standard_documents" (
1212+ "uri" text not null,
1313+ "data" jsonb not null,
1414+ "indexed_at" timestamp with time zone not null default now(),
1515+ "identity_did" text not null
1616+);
1717+alter table "public"."site_standard_documents" enable row level security;
1818+1919+-- site_standard_documents_in_publications relation table (modeled off documents_in_publications)
2020+create table "public"."site_standard_documents_in_publications" (
2121+ "publication" text not null,
2222+ "document" text not null,
2323+ "indexed_at" timestamp with time zone not null default now()
2424+);
2525+alter table "public"."site_standard_documents_in_publications" enable row level security;
2626+2727+-- Primary key indexes
2828+CREATE UNIQUE INDEX site_standard_publications_pkey ON public.site_standard_publications USING btree (uri);
2929+CREATE UNIQUE INDEX site_standard_documents_pkey ON public.site_standard_documents USING btree (uri);
3030+CREATE UNIQUE INDEX site_standard_documents_in_publications_pkey ON public.site_standard_documents_in_publications USING btree (publication, document);
3131+3232+-- Add primary key constraints
3333+alter table "public"."site_standard_publications" add constraint "site_standard_publications_pkey" PRIMARY KEY using index "site_standard_publications_pkey";
3434+alter table "public"."site_standard_documents" add constraint "site_standard_documents_pkey" PRIMARY KEY using index "site_standard_documents_pkey";
3535+alter table "public"."site_standard_documents_in_publications" add constraint "site_standard_documents_in_publications_pkey" PRIMARY KEY using index "site_standard_documents_in_publications_pkey";
3636+3737+-- Foreign key constraints for identity relations
3838+alter table "public"."site_standard_publications" add constraint "site_standard_publications_identity_did_fkey" FOREIGN KEY (identity_did) REFERENCES identities(atp_did) ON DELETE CASCADE not valid;
3939+alter table "public"."site_standard_publications" validate constraint "site_standard_publications_identity_did_fkey";
4040+alter table "public"."site_standard_documents" add constraint "site_standard_documents_identity_did_fkey" FOREIGN KEY (identity_did) REFERENCES identities(atp_did) ON DELETE CASCADE not valid;
4141+alter table "public"."site_standard_documents" validate constraint "site_standard_documents_identity_did_fkey";
4242+4343+-- Foreign key constraints for relation table
4444+alter table "public"."site_standard_documents_in_publications" add constraint "site_standard_documents_in_publications_document_fkey" FOREIGN KEY (document) REFERENCES site_standard_documents(uri) ON DELETE CASCADE not valid;
4545+alter table "public"."site_standard_documents_in_publications" validate constraint "site_standard_documents_in_publications_document_fkey";
4646+alter table "public"."site_standard_documents_in_publications" add constraint "site_standard_documents_in_publications_publication_fkey" FOREIGN KEY (publication) REFERENCES site_standard_publications(uri) ON DELETE CASCADE not valid;
4747+alter table "public"."site_standard_documents_in_publications" validate constraint "site_standard_documents_in_publications_publication_fkey";
4848+4949+-- Grants for site_standard_publications
5050+grant delete on table "public"."site_standard_publications" to "anon";
5151+grant insert on table "public"."site_standard_publications" to "anon";
5252+grant references on table "public"."site_standard_publications" to "anon";
5353+grant select on table "public"."site_standard_publications" to "anon";
5454+grant trigger on table "public"."site_standard_publications" to "anon";
5555+grant truncate on table "public"."site_standard_publications" to "anon";
5656+grant update on table "public"."site_standard_publications" to "anon";
5757+grant delete on table "public"."site_standard_publications" to "authenticated";
5858+grant insert on table "public"."site_standard_publications" to "authenticated";
5959+grant references on table "public"."site_standard_publications" to "authenticated";
6060+grant select on table "public"."site_standard_publications" to "authenticated";
6161+grant trigger on table "public"."site_standard_publications" to "authenticated";
6262+grant truncate on table "public"."site_standard_publications" to "authenticated";
6363+grant update on table "public"."site_standard_publications" to "authenticated";
6464+grant delete on table "public"."site_standard_publications" to "service_role";
6565+grant insert on table "public"."site_standard_publications" to "service_role";
6666+grant references on table "public"."site_standard_publications" to "service_role";
6767+grant select on table "public"."site_standard_publications" to "service_role";
6868+grant trigger on table "public"."site_standard_publications" to "service_role";
6969+grant truncate on table "public"."site_standard_publications" to "service_role";
7070+grant update on table "public"."site_standard_publications" to "service_role";
7171+7272+-- Grants for site_standard_documents
7373+grant delete on table "public"."site_standard_documents" to "anon";
7474+grant insert on table "public"."site_standard_documents" to "anon";
7575+grant references on table "public"."site_standard_documents" to "anon";
7676+grant select on table "public"."site_standard_documents" to "anon";
7777+grant trigger on table "public"."site_standard_documents" to "anon";
7878+grant truncate on table "public"."site_standard_documents" to "anon";
7979+grant update on table "public"."site_standard_documents" to "anon";
8080+grant delete on table "public"."site_standard_documents" to "authenticated";
8181+grant insert on table "public"."site_standard_documents" to "authenticated";
8282+grant references on table "public"."site_standard_documents" to "authenticated";
8383+grant select on table "public"."site_standard_documents" to "authenticated";
8484+grant trigger on table "public"."site_standard_documents" to "authenticated";
8585+grant truncate on table "public"."site_standard_documents" to "authenticated";
8686+grant update on table "public"."site_standard_documents" to "authenticated";
8787+grant delete on table "public"."site_standard_documents" to "service_role";
8888+grant insert on table "public"."site_standard_documents" to "service_role";
8989+grant references on table "public"."site_standard_documents" to "service_role";
9090+grant select on table "public"."site_standard_documents" to "service_role";
9191+grant trigger on table "public"."site_standard_documents" to "service_role";
9292+grant truncate on table "public"."site_standard_documents" to "service_role";
9393+grant update on table "public"."site_standard_documents" to "service_role";
9494+9595+-- Grants for site_standard_documents_in_publications
9696+grant delete on table "public"."site_standard_documents_in_publications" to "anon";
9797+grant insert on table "public"."site_standard_documents_in_publications" to "anon";
9898+grant references on table "public"."site_standard_documents_in_publications" to "anon";
9999+grant select on table "public"."site_standard_documents_in_publications" to "anon";
100100+grant trigger on table "public"."site_standard_documents_in_publications" to "anon";
101101+grant truncate on table "public"."site_standard_documents_in_publications" to "anon";
102102+grant update on table "public"."site_standard_documents_in_publications" to "anon";
103103+grant delete on table "public"."site_standard_documents_in_publications" to "authenticated";
104104+grant insert on table "public"."site_standard_documents_in_publications" to "authenticated";
105105+grant references on table "public"."site_standard_documents_in_publications" to "authenticated";
106106+grant select on table "public"."site_standard_documents_in_publications" to "authenticated";
107107+grant trigger on table "public"."site_standard_documents_in_publications" to "authenticated";
108108+grant truncate on table "public"."site_standard_documents_in_publications" to "authenticated";
109109+grant update on table "public"."site_standard_documents_in_publications" to "authenticated";
110110+grant delete on table "public"."site_standard_documents_in_publications" to "service_role";
111111+grant insert on table "public"."site_standard_documents_in_publications" to "service_role";
112112+grant references on table "public"."site_standard_documents_in_publications" to "service_role";
113113+grant select on table "public"."site_standard_documents_in_publications" to "service_role";
114114+grant trigger on table "public"."site_standard_documents_in_publications" to "service_role";
115115+grant truncate on table "public"."site_standard_documents_in_publications" to "service_role";
116116+grant update on table "public"."site_standard_documents_in_publications" to "service_role";
117117+118118+-- site_standard_subscriptions table (modeled off publication_subscriptions)
119119+create table "public"."site_standard_subscriptions" (
120120+ "publication" text not null,
121121+ "identity" text not null,
122122+ "created_at" timestamp with time zone not null default now(),
123123+ "record" jsonb not null,
124124+ "uri" text not null
125125+);
126126+alter table "public"."site_standard_subscriptions" enable row level security;
127127+128128+-- Primary key and unique indexes
129129+CREATE UNIQUE INDEX site_standard_subscriptions_pkey ON public.site_standard_subscriptions USING btree (publication, identity);
130130+CREATE UNIQUE INDEX site_standard_subscriptions_uri_key ON public.site_standard_subscriptions USING btree (uri);
131131+132132+-- Add constraints
133133+alter table "public"."site_standard_subscriptions" add constraint "site_standard_subscriptions_pkey" PRIMARY KEY using index "site_standard_subscriptions_pkey";
134134+alter table "public"."site_standard_subscriptions" add constraint "site_standard_subscriptions_uri_key" UNIQUE using index "site_standard_subscriptions_uri_key";
135135+alter table "public"."site_standard_subscriptions" add constraint "site_standard_subscriptions_publication_fkey" FOREIGN KEY (publication) REFERENCES site_standard_publications(uri) ON DELETE CASCADE not valid;
136136+alter table "public"."site_standard_subscriptions" validate constraint "site_standard_subscriptions_publication_fkey";
137137+alter table "public"."site_standard_subscriptions" add constraint "site_standard_subscriptions_identity_fkey" FOREIGN KEY (identity) REFERENCES identities(atp_did) ON DELETE CASCADE not valid;
138138+alter table "public"."site_standard_subscriptions" validate constraint "site_standard_subscriptions_identity_fkey";
139139+140140+-- Grants for site_standard_subscriptions
141141+grant delete on table "public"."site_standard_subscriptions" to "anon";
142142+grant insert on table "public"."site_standard_subscriptions" to "anon";
143143+grant references on table "public"."site_standard_subscriptions" to "anon";
144144+grant select on table "public"."site_standard_subscriptions" to "anon";
145145+grant trigger on table "public"."site_standard_subscriptions" to "anon";
146146+grant truncate on table "public"."site_standard_subscriptions" to "anon";
147147+grant update on table "public"."site_standard_subscriptions" to "anon";
148148+grant delete on table "public"."site_standard_subscriptions" to "authenticated";
149149+grant insert on table "public"."site_standard_subscriptions" to "authenticated";
150150+grant references on table "public"."site_standard_subscriptions" to "authenticated";
151151+grant select on table "public"."site_standard_subscriptions" to "authenticated";
152152+grant trigger on table "public"."site_standard_subscriptions" to "authenticated";
153153+grant truncate on table "public"."site_standard_subscriptions" to "authenticated";
154154+grant update on table "public"."site_standard_subscriptions" to "authenticated";
155155+grant delete on table "public"."site_standard_subscriptions" to "service_role";
156156+grant insert on table "public"."site_standard_subscriptions" to "service_role";
157157+grant references on table "public"."site_standard_subscriptions" to "service_role";
158158+grant select on table "public"."site_standard_subscriptions" to "service_role";
159159+grant trigger on table "public"."site_standard_subscriptions" to "service_role";
160160+grant truncate on table "public"."site_standard_subscriptions" to "service_role";
161161+grant update on table "public"."site_standard_subscriptions" to "service_role";