a tool for shared writing and social publishing
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

get domains via identity_rel

+175 -144
+1 -1
actions/domains/deleteDomain.ts
··· 23 23 `*, 24 24 identities( 25 25 *, 26 - custom_domains(*) 26 + custom_domains!custom_domains_identity_fkey(*) 27 27 )`, 28 28 ) 29 29 .eq("id", auth_token)
+1 -1
actions/getIdentityData.ts
··· 17 17 *, 18 18 bsky_profiles(*), 19 19 subscribers_to_publications(*), 20 - custom_domains!custom_domains_identity_fkey(*), 20 + custom_domains!custom_domains_identity_id_fkey(publication_domains(*), *), 21 21 home_leaflet:permission_tokens!identities_home_page_fkey(*, permission_token_rights(*)), 22 22 permission_token_on_homepage( 23 23 created_at,
+86 -75
drizzle/relations.ts
··· 1 1 import { relations } from "drizzle-orm/relations"; 2 - import { identities, bsky_profiles, entities, facts, entity_sets, permission_tokens, email_subscriptions_to_entity, email_auth_tokens, custom_domains, phone_rsvps_to_entity, custom_domain_routes, poll_votes_on_entity, subscribers_to_publications, publications, permission_token_on_homepage, documents, documents_in_publications, publication_domains, publication_subscriptions, leaflets_in_publications, permission_token_rights } from "./schema"; 2 + import { entity_sets, entities, facts, identities, email_auth_tokens, bsky_profiles, poll_votes_on_entity, permission_tokens, phone_rsvps_to_entity, custom_domains, custom_domain_routes, email_subscriptions_to_entity, subscribers_to_publications, publications, permission_token_on_homepage, documents, documents_in_publications, publication_domains, leaflets_in_publications, publication_subscriptions, permission_token_rights } from "./schema"; 3 + 4 + export const entitiesRelations = relations(entities, ({one, many}) => ({ 5 + entity_set: one(entity_sets, { 6 + fields: [entities.set], 7 + references: [entity_sets.id] 8 + }), 9 + facts: many(facts), 10 + poll_votes_on_entities_option_entity: many(poll_votes_on_entity, { 11 + relationName: "poll_votes_on_entity_option_entity_entities_id" 12 + }), 13 + poll_votes_on_entities_poll_entity: many(poll_votes_on_entity, { 14 + relationName: "poll_votes_on_entity_poll_entity_entities_id" 15 + }), 16 + permission_tokens: many(permission_tokens), 17 + phone_rsvps_to_entities: many(phone_rsvps_to_entity), 18 + email_subscriptions_to_entities: many(email_subscriptions_to_entity), 19 + })); 20 + 21 + export const entity_setsRelations = relations(entity_sets, ({many}) => ({ 22 + entities: many(entities), 23 + permission_token_rights: many(permission_token_rights), 24 + })); 3 25 4 - export const bsky_profilesRelations = relations(bsky_profiles, ({one}) => ({ 26 + export const factsRelations = relations(facts, ({one}) => ({ 27 + entity: one(entities, { 28 + fields: [facts.entity], 29 + references: [entities.id] 30 + }), 31 + })); 32 + 33 + export const email_auth_tokensRelations = relations(email_auth_tokens, ({one}) => ({ 5 34 identity: one(identities, { 6 - fields: [bsky_profiles.did], 7 - references: [identities.atp_did] 35 + fields: [email_auth_tokens.identity], 36 + references: [identities.id] 8 37 }), 9 38 })); 10 39 11 40 export const identitiesRelations = relations(identities, ({one, many}) => ({ 41 + email_auth_tokens: many(email_auth_tokens), 12 42 bsky_profiles: many(bsky_profiles), 13 43 permission_token: one(permission_tokens, { 14 44 fields: [identities.home_page], 15 45 references: [permission_tokens.id] 16 46 }), 17 - email_auth_tokens: many(email_auth_tokens), 18 - custom_domains: many(custom_domains), 47 + custom_domains_identity: many(custom_domains, { 48 + relationName: "custom_domains_identity_identities_email" 49 + }), 50 + custom_domains_identity_id: many(custom_domains, { 51 + relationName: "custom_domains_identity_id_identities_id" 52 + }), 19 53 subscribers_to_publications: many(subscribers_to_publications), 20 54 permission_token_on_homepages: many(permission_token_on_homepage), 21 55 publication_domains: many(publication_domains), 22 56 publication_subscriptions: many(publication_subscriptions), 23 57 })); 24 58 25 - export const factsRelations = relations(facts, ({one}) => ({ 26 - entity: one(entities, { 27 - fields: [facts.entity], 28 - references: [entities.id] 59 + export const bsky_profilesRelations = relations(bsky_profiles, ({one}) => ({ 60 + identity: one(identities, { 61 + fields: [bsky_profiles.did], 62 + references: [identities.atp_did] 29 63 }), 30 64 })); 31 65 32 - export const entitiesRelations = relations(entities, ({one, many}) => ({ 33 - facts: many(facts), 34 - entity_set: one(entity_sets, { 35 - fields: [entities.set], 36 - references: [entity_sets.id] 37 - }), 38 - permission_tokens: many(permission_tokens), 39 - email_subscriptions_to_entities: many(email_subscriptions_to_entity), 40 - phone_rsvps_to_entities: many(phone_rsvps_to_entity), 41 - poll_votes_on_entities_option_entity: many(poll_votes_on_entity, { 66 + export const poll_votes_on_entityRelations = relations(poll_votes_on_entity, ({one}) => ({ 67 + entity_option_entity: one(entities, { 68 + fields: [poll_votes_on_entity.option_entity], 69 + references: [entities.id], 42 70 relationName: "poll_votes_on_entity_option_entity_entities_id" 43 71 }), 44 - poll_votes_on_entities_poll_entity: many(poll_votes_on_entity, { 72 + entity_poll_entity: one(entities, { 73 + fields: [poll_votes_on_entity.poll_entity], 74 + references: [entities.id], 45 75 relationName: "poll_votes_on_entity_poll_entity_entities_id" 46 76 }), 47 77 })); 48 78 49 - export const entity_setsRelations = relations(entity_sets, ({many}) => ({ 50 - entities: many(entities), 51 - permission_token_rights: many(permission_token_rights), 52 - })); 53 - 54 79 export const permission_tokensRelations = relations(permission_tokens, ({one, many}) => ({ 55 80 entity: one(entities, { 56 81 fields: [permission_tokens.root_entity], 57 82 references: [entities.id] 58 83 }), 59 84 identities: many(identities), 60 - email_subscriptions_to_entities: many(email_subscriptions_to_entity), 61 85 custom_domain_routes_edit_permission_token: many(custom_domain_routes, { 62 86 relationName: "custom_domain_routes_edit_permission_token_permission_tokens_id" 63 87 }), 64 88 custom_domain_routes_view_permission_token: many(custom_domain_routes, { 65 89 relationName: "custom_domain_routes_view_permission_token_permission_tokens_id" 66 90 }), 91 + email_subscriptions_to_entities: many(email_subscriptions_to_entity), 67 92 permission_token_on_homepages: many(permission_token_on_homepage), 68 93 leaflets_in_publications: many(leaflets_in_publications), 69 94 permission_token_rights: many(permission_token_rights), 70 95 })); 71 96 72 - export const email_subscriptions_to_entityRelations = relations(email_subscriptions_to_entity, ({one}) => ({ 73 - entity: one(entities, { 74 - fields: [email_subscriptions_to_entity.entity], 75 - references: [entities.id] 76 - }), 77 - permission_token: one(permission_tokens, { 78 - fields: [email_subscriptions_to_entity.token], 79 - references: [permission_tokens.id] 80 - }), 81 - })); 82 - 83 - export const email_auth_tokensRelations = relations(email_auth_tokens, ({one}) => ({ 84 - identity: one(identities, { 85 - fields: [email_auth_tokens.identity], 86 - references: [identities.id] 87 - }), 88 - })); 89 - 90 - export const custom_domainsRelations = relations(custom_domains, ({one, many}) => ({ 91 - identity: one(identities, { 92 - fields: [custom_domains.identity], 93 - references: [identities.email] 94 - }), 95 - custom_domain_routes: many(custom_domain_routes), 96 - publication_domains: many(publication_domains), 97 - })); 98 - 99 97 export const phone_rsvps_to_entityRelations = relations(phone_rsvps_to_entity, ({one}) => ({ 100 98 entity: one(entities, { 101 99 fields: [phone_rsvps_to_entity.entity], ··· 120 118 }), 121 119 })); 122 120 123 - export const poll_votes_on_entityRelations = relations(poll_votes_on_entity, ({one}) => ({ 124 - entity_option_entity: one(entities, { 125 - fields: [poll_votes_on_entity.option_entity], 126 - references: [entities.id], 127 - relationName: "poll_votes_on_entity_option_entity_entities_id" 121 + export const custom_domainsRelations = relations(custom_domains, ({one, many}) => ({ 122 + custom_domain_routes: many(custom_domain_routes), 123 + identity_identity: one(identities, { 124 + fields: [custom_domains.identity], 125 + references: [identities.email], 126 + relationName: "custom_domains_identity_identities_email" 128 127 }), 129 - entity_poll_entity: one(entities, { 130 - fields: [poll_votes_on_entity.poll_entity], 131 - references: [entities.id], 132 - relationName: "poll_votes_on_entity_poll_entity_entities_id" 128 + identity_identity_id: one(identities, { 129 + fields: [custom_domains.identity_id], 130 + references: [identities.id], 131 + relationName: "custom_domains_identity_id_identities_id" 132 + }), 133 + publication_domains: many(publication_domains), 134 + })); 135 + 136 + export const email_subscriptions_to_entityRelations = relations(email_subscriptions_to_entity, ({one}) => ({ 137 + entity: one(entities, { 138 + fields: [email_subscriptions_to_entity.entity], 139 + references: [entities.id] 140 + }), 141 + permission_token: one(permission_tokens, { 142 + fields: [email_subscriptions_to_entity.token], 143 + references: [permission_tokens.id] 133 144 }), 134 145 })); 135 146 ··· 148 159 subscribers_to_publications: many(subscribers_to_publications), 149 160 documents_in_publications: many(documents_in_publications), 150 161 publication_domains: many(publication_domains), 151 - publication_subscriptions: many(publication_subscriptions), 152 162 leaflets_in_publications: many(leaflets_in_publications), 163 + publication_subscriptions: many(publication_subscriptions), 153 164 })); 154 165 155 166 export const permission_token_on_homepageRelations = relations(permission_token_on_homepage, ({one}) => ({ ··· 194 205 }), 195 206 })); 196 207 197 - export const publication_subscriptionsRelations = relations(publication_subscriptions, ({one}) => ({ 198 - identity: one(identities, { 199 - fields: [publication_subscriptions.identity], 200 - references: [identities.atp_did] 201 - }), 202 - publication: one(publications, { 203 - fields: [publication_subscriptions.publication], 204 - references: [publications.uri] 205 - }), 206 - })); 207 - 208 208 export const leaflets_in_publicationsRelations = relations(leaflets_in_publications, ({one}) => ({ 209 209 document: one(documents, { 210 210 fields: [leaflets_in_publications.doc], ··· 216 216 }), 217 217 publication: one(publications, { 218 218 fields: [leaflets_in_publications.publication], 219 + references: [publications.uri] 220 + }), 221 + })); 222 + 223 + export const publication_subscriptionsRelations = relations(publication_subscriptions, ({one}) => ({ 224 + identity: one(identities, { 225 + fields: [publication_subscriptions.identity], 226 + references: [identities.atp_did] 227 + }), 228 + publication: one(publications, { 229 + fields: [publication_subscriptions.publication], 219 230 references: [publications.uri] 220 231 }), 221 232 }));
+77 -67
drizzle/schema.ts
··· 1 - import { pgTable, pgEnum, text, jsonb, foreignKey, timestamp, uuid, bigint, boolean, unique, uniqueIndex, smallint, primaryKey } from "drizzle-orm/pg-core" 1 + import { pgTable, pgEnum, text, jsonb, timestamp, foreignKey, uuid, index, bigint, boolean, unique, uniqueIndex, smallint, primaryKey } from "drizzle-orm/pg-core" 2 2 import { sql } from "drizzle-orm" 3 3 4 4 export const aal_level = pgEnum("aal_level", ['aal1', 'aal2', 'aal3']) 5 5 export const code_challenge_method = pgEnum("code_challenge_method", ['s256', 'plain']) 6 6 export const factor_status = pgEnum("factor_status", ['unverified', 'verified']) 7 - export const factor_type = pgEnum("factor_type", ['totp', 'webauthn']) 7 + export const factor_type = pgEnum("factor_type", ['totp', 'webauthn', 'phone']) 8 8 export const one_time_token_type = pgEnum("one_time_token_type", ['confirmation_token', 'reauthentication_token', 'recovery_token', 'email_change_token_new', 'email_change_token_current', 'phone_change_token']) 9 - export const request_status = pgEnum("request_status", ['PENDING', 'SUCCESS', 'ERROR']) 10 9 export const key_status = pgEnum("key_status", ['default', 'valid', 'invalid', 'expired']) 11 10 export const key_type = pgEnum("key_type", ['aead-ietf', 'aead-det', 'hmacsha512', 'hmacsha256', 'auth', 'shorthash', 'generichash', 'kdf', 'secretbox', 'secretstream', 'stream_xchacha20']) 12 11 export const rsvp_status = pgEnum("rsvp_status", ['GOING', 'NOT_GOING', 'MAYBE']) ··· 19 18 state: jsonb("state").notNull(), 20 19 }); 21 20 22 - export const oauth_session_store = pgTable("oauth_session_store", { 23 - key: text("key").primaryKey().notNull(), 24 - session: jsonb("session").notNull(), 25 - }); 26 - 27 - export const bsky_profiles = pgTable("bsky_profiles", { 28 - did: text("did").primaryKey().notNull().references(() => identities.atp_did, { onDelete: "cascade" } ), 29 - record: jsonb("record").notNull(), 30 - indexed_at: timestamp("indexed_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 31 - handle: text("handle"), 32 - }); 33 - 34 21 export const publications = pgTable("publications", { 35 22 uri: text("uri").primaryKey().notNull(), 36 23 indexed_at: timestamp("indexed_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), ··· 39 26 record: jsonb("record"), 40 27 }); 41 28 29 + export const entities = pgTable("entities", { 30 + id: uuid("id").primaryKey().notNull(), 31 + created_at: timestamp("created_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 32 + set: uuid("set").notNull().references(() => entity_sets.id, { onDelete: "cascade", onUpdate: "cascade" } ), 33 + }); 34 + 42 35 export const facts = pgTable("facts", { 43 36 id: uuid("id").primaryKey().notNull(), 44 37 entity: uuid("entity").notNull().references(() => entities.id, { onDelete: "cascade", onUpdate: "restrict" } ), ··· 48 41 updated_at: timestamp("updated_at", { mode: 'string' }), 49 42 // You can use { mode: "bigint" } if numbers are exceeding js number limitations 50 43 version: bigint("version", { mode: "number" }).default(0).notNull(), 51 - }); 52 - 53 - export const documents = pgTable("documents", { 54 - uri: text("uri").primaryKey().notNull(), 55 - data: jsonb("data").notNull(), 56 - indexed_at: timestamp("indexed_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 44 + }, 45 + (table) => { 46 + return { 47 + entity_idx: index("facts_entity_idx").on(table.entity), 48 + } 57 49 }); 58 50 59 51 export const replicache_clients = pgTable("replicache_clients", { ··· 61 53 client_group: text("client_group").notNull(), 62 54 // You can use { mode: "bigint" } if numbers are exceeding js number limitations 63 55 last_mutation: bigint("last_mutation", { mode: "number" }).notNull(), 56 + }, 57 + (table) => { 58 + return { 59 + client_group_idx: index("replicache_clients_client_group_idx").on(table.client_group), 60 + } 64 61 }); 65 62 66 - export const entities = pgTable("entities", { 67 - id: uuid("id").primaryKey().notNull(), 63 + export const email_auth_tokens = pgTable("email_auth_tokens", { 64 + id: uuid("id").defaultRandom().primaryKey().notNull(), 68 65 created_at: timestamp("created_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 69 - set: uuid("set").notNull().references(() => entity_sets.id, { onDelete: "cascade", onUpdate: "cascade" } ), 66 + confirmed: boolean("confirmed").default(false).notNull(), 67 + email: text("email"), 68 + confirmation_code: text("confirmation_code").notNull(), 69 + identity: uuid("identity").references(() => identities.id, { onDelete: "cascade", onUpdate: "cascade" } ), 70 + }); 71 + 72 + export const bsky_profiles = pgTable("bsky_profiles", { 73 + did: text("did").primaryKey().notNull().references(() => identities.atp_did, { onDelete: "cascade" } ), 74 + record: jsonb("record").notNull(), 75 + indexed_at: timestamp("indexed_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 76 + handle: text("handle"), 70 77 }); 71 78 72 79 export const entity_sets = pgTable("entity_sets", { 73 80 id: uuid("id").defaultRandom().primaryKey().notNull(), 74 81 created_at: timestamp("created_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 82 + }); 83 + 84 + export const poll_votes_on_entity = pgTable("poll_votes_on_entity", { 85 + id: uuid("id").defaultRandom().primaryKey().notNull(), 86 + created_at: timestamp("created_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 87 + poll_entity: uuid("poll_entity").notNull().references(() => entities.id, { onDelete: "cascade", onUpdate: "cascade" } ), 88 + option_entity: uuid("option_entity").notNull().references(() => entities.id, { onDelete: "cascade", onUpdate: "cascade" } ), 89 + voter_token: uuid("voter_token").notNull(), 75 90 }); 76 91 77 92 export const permission_tokens = pgTable("permission_tokens", { ··· 94 109 } 95 110 }); 96 111 97 - export const email_subscriptions_to_entity = pgTable("email_subscriptions_to_entity", { 98 - id: uuid("id").defaultRandom().primaryKey().notNull(), 99 - entity: uuid("entity").notNull().references(() => entities.id, { onDelete: "cascade" } ), 100 - email: text("email").notNull(), 101 - created_at: timestamp("created_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 102 - token: uuid("token").notNull().references(() => permission_tokens.id, { onDelete: "cascade" } ), 103 - confirmed: boolean("confirmed").default(false).notNull(), 104 - confirmation_code: text("confirmation_code").notNull(), 105 - }); 106 - 107 - export const email_auth_tokens = pgTable("email_auth_tokens", { 108 - id: uuid("id").defaultRandom().primaryKey().notNull(), 109 - created_at: timestamp("created_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 110 - confirmed: boolean("confirmed").default(false).notNull(), 111 - email: text("email"), 112 - confirmation_code: text("confirmation_code").notNull(), 113 - identity: uuid("identity").references(() => identities.id, { onDelete: "cascade", onUpdate: "cascade" } ), 114 - }); 115 - 116 112 export const phone_number_auth_tokens = pgTable("phone_number_auth_tokens", { 117 113 id: uuid("id").defaultRandom().primaryKey().notNull(), 118 114 created_at: timestamp("created_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), ··· 120 116 confirmation_code: text("confirmation_code").notNull(), 121 117 phone_number: text("phone_number").notNull(), 122 118 country_code: text("country_code").notNull(), 123 - }); 124 - 125 - export const custom_domains = pgTable("custom_domains", { 126 - domain: text("domain").primaryKey().notNull(), 127 - identity: text("identity").default('').references(() => identities.email, { onDelete: "cascade", onUpdate: "cascade" } ), 128 - confirmed: boolean("confirmed").notNull(), 129 - created_at: timestamp("created_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 130 119 }); 131 120 132 121 export const phone_rsvps_to_entity = pgTable("phone_rsvps_to_entity", { ··· 159 148 } 160 149 }); 161 150 162 - export const poll_votes_on_entity = pgTable("poll_votes_on_entity", { 151 + export const custom_domains = pgTable("custom_domains", { 152 + domain: text("domain").primaryKey().notNull(), 153 + identity: text("identity").default('').references(() => identities.email, { onDelete: "cascade", onUpdate: "cascade" } ), 154 + confirmed: boolean("confirmed").notNull(), 155 + created_at: timestamp("created_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 156 + identity_id: uuid("identity_id").references(() => identities.id, { onDelete: "cascade" } ), 157 + }); 158 + 159 + export const email_subscriptions_to_entity = pgTable("email_subscriptions_to_entity", { 163 160 id: uuid("id").defaultRandom().primaryKey().notNull(), 161 + entity: uuid("entity").notNull().references(() => entities.id, { onDelete: "cascade" } ), 162 + email: text("email").notNull(), 164 163 created_at: timestamp("created_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 165 - poll_entity: uuid("poll_entity").notNull().references(() => entities.id, { onDelete: "cascade", onUpdate: "cascade" } ), 166 - option_entity: uuid("option_entity").notNull().references(() => entities.id, { onDelete: "cascade", onUpdate: "cascade" } ), 167 - voter_token: uuid("voter_token").notNull(), 164 + token: uuid("token").notNull().references(() => permission_tokens.id, { onDelete: "cascade" } ), 165 + confirmed: boolean("confirmed").default(false).notNull(), 166 + confirmation_code: text("confirmation_code").notNull(), 167 + }); 168 + 169 + export const documents = pgTable("documents", { 170 + uri: text("uri").primaryKey().notNull(), 171 + data: jsonb("data").notNull(), 172 + indexed_at: timestamp("indexed_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 173 + }); 174 + 175 + export const oauth_session_store = pgTable("oauth_session_store", { 176 + key: text("key").primaryKey().notNull(), 177 + session: jsonb("session").notNull(), 168 178 }); 169 179 170 180 export const subscribers_to_publications = pgTable("subscribers_to_publications", { ··· 212 222 } 213 223 }); 214 224 215 - export const publication_subscriptions = pgTable("publication_subscriptions", { 225 + export const leaflets_in_publications = pgTable("leaflets_in_publications", { 216 226 publication: text("publication").notNull().references(() => publications.uri, { onDelete: "cascade" } ), 217 - identity: text("identity").notNull().references(() => identities.atp_did, { onDelete: "cascade" } ), 218 - created_at: timestamp("created_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 219 - record: jsonb("record").notNull(), 220 - uri: text("uri").notNull(), 227 + doc: text("doc").default('').references(() => documents.uri, { onDelete: "set null" } ), 228 + leaflet: uuid("leaflet").notNull().references(() => permission_tokens.id, { onDelete: "cascade" } ), 229 + description: text("description").default('').notNull(), 230 + title: text("title").default('').notNull(), 221 231 }, 222 232 (table) => { 223 233 return { 224 - publication_subscriptions_pkey: primaryKey({ columns: [table.publication, table.identity], name: "publication_subscriptions_pkey"}), 225 - publication_subscriptions_uri_key: unique("publication_subscriptions_uri_key").on(table.uri), 234 + leaflets_in_publications_pkey: primaryKey({ columns: [table.publication, table.leaflet], name: "leaflets_in_publications_pkey"}), 226 235 } 227 236 }); 228 237 229 - export const leaflets_in_publications = pgTable("leaflets_in_publications", { 238 + export const publication_subscriptions = pgTable("publication_subscriptions", { 230 239 publication: text("publication").notNull().references(() => publications.uri, { onDelete: "cascade" } ), 231 - doc: text("doc").default('').references(() => documents.uri, { onDelete: "set null" } ), 232 - leaflet: uuid("leaflet").notNull().references(() => permission_tokens.id, { onDelete: "cascade" } ), 233 - description: text("description").default('').notNull(), 234 - title: text("title").default('').notNull(), 240 + identity: text("identity").notNull().references(() => identities.atp_did, { onDelete: "cascade" } ), 241 + created_at: timestamp("created_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 242 + record: jsonb("record").notNull(), 243 + uri: text("uri").notNull(), 235 244 }, 236 245 (table) => { 237 246 return { 238 - leaflets_in_publications_pkey: primaryKey({ columns: [table.publication, table.leaflet], name: "leaflets_in_publications_pkey"}), 247 + publication_subscriptions_pkey: primaryKey({ columns: [table.publication, table.identity], name: "publication_subscriptions_pkey"}), 248 + publication_subscriptions_uri_key: unique("publication_subscriptions_uri_key").on(table.uri), 239 249 } 240 250 }); 241 251
+10
supabase/database.types.ts
··· 118 118 created_at: string 119 119 domain: string 120 120 identity: string | null 121 + identity_id: string | null 121 122 } 122 123 Insert: { 123 124 confirmed: boolean 124 125 created_at?: string 125 126 domain: string 126 127 identity?: string | null 128 + identity_id?: string | null 127 129 } 128 130 Update: { 129 131 confirmed?: boolean 130 132 created_at?: string 131 133 domain?: string 132 134 identity?: string | null 135 + identity_id?: string | null 133 136 } 134 137 Relationships: [ 135 138 { ··· 138 141 isOneToOne: false 139 142 referencedRelation: "identities" 140 143 referencedColumns: ["email"] 144 + }, 145 + { 146 + foreignKeyName: "custom_domains_identity_id_fkey" 147 + columns: ["identity_id"] 148 + isOneToOne: false 149 + referencedRelation: "identities" 150 + referencedColumns: ["id"] 141 151 }, 142 152 ] 143 153 }