diff options
Diffstat (limited to 'packages/db/schema.ts')
| -rw-r--r-- | packages/db/schema.ts | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/packages/db/schema.ts b/packages/db/schema.ts index 0479bb52..d5fd162d 100644 --- a/packages/db/schema.ts +++ b/packages/db/schema.ts @@ -453,6 +453,39 @@ export const listCollaborators = sqliteTable( ], ); +export const listInvitations = sqliteTable( + "listInvitations", + { + id: text("id") + .notNull() + .primaryKey() + .$defaultFn(() => createId()), + listId: text("listId") + .notNull() + .references(() => bookmarkLists.id, { onDelete: "cascade" }), + userId: text("userId") + .notNull() + .references(() => users.id, { onDelete: "cascade" }), + role: text("role", { enum: ["viewer", "editor"] }).notNull(), + status: text("status", { enum: ["pending", "declined"] }) + .notNull() + .default("pending"), + invitedAt: integer("invitedAt", { mode: "timestamp" }) + .notNull() + .$defaultFn(() => new Date()), + invitedEmail: text("invitedEmail"), + invitedBy: text("invitedBy").references(() => users.id, { + onDelete: "set null", + }), + }, + (li) => [ + unique().on(li.listId, li.userId), + index("listInvitations_listId_idx").on(li.listId), + index("listInvitations_userId_idx").on(li.userId), + index("listInvitations_status_idx").on(li.status), + ], +); + export const customPrompts = sqliteTable( "customPrompts", { @@ -733,6 +766,7 @@ export const userRelations = relations(users, ({ many, one }) => ({ subscription: one(subscriptions), importSessions: many(importSessions), listCollaborations: many(listCollaborators), + listInvitations: many(listInvitations), })); export const bookmarkRelations = relations(bookmarks, ({ many, one }) => ({ @@ -803,6 +837,7 @@ export const bookmarkListsRelations = relations( ({ one, many }) => ({ bookmarksInLists: many(bookmarksInLists), collaborators: many(listCollaborators), + invitations: many(listInvitations), user: one(users, { fields: [bookmarkLists.userId], references: [users.id], @@ -846,6 +881,24 @@ export const listCollaboratorsRelations = relations( }), ); +export const listInvitationsRelations = relations( + listInvitations, + ({ one }) => ({ + list: one(bookmarkLists, { + fields: [listInvitations.listId], + references: [bookmarkLists.id], + }), + user: one(users, { + fields: [listInvitations.userId], + references: [users.id], + }), + invitedByUser: one(users, { + fields: [listInvitations.invitedBy], + references: [users.id], + }), + }), +); + export const webhooksRelations = relations(webhooksTable, ({ one }) => ({ user: one(users, { fields: [webhooksTable.userId], |
