diff options
| author | Mohamed Bassem <me@mbassem.com> | 2025-07-13 09:28:24 +0000 |
|---|---|---|
| committer | Mohamed Bassem <me@mbassem.com> | 2025-07-13 20:44:00 +0000 |
| commit | d1d5263486f96db578aad918a59007045c3c077f (patch) | |
| tree | df65f062b6eda93364f7d509fc2c52663561097a /packages/db/schema.ts | |
| parent | 845ccf1ad46c8635782f8e10280b07c48c08eaf5 (diff) | |
| download | karakeep-d1d5263486f96db578aad918a59007045c3c077f.tar.zst | |
feat: Add stripe based subscriptions
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 79cf2def..6dacdec6 100644 --- a/packages/db/schema.ts +++ b/packages/db/schema.ts @@ -584,6 +584,51 @@ export const invites = sqliteTable("invites", { .references(() => users.id, { onDelete: "cascade" }), }); +export const subscriptions = sqliteTable( + "subscriptions", + { + id: text("id") + .notNull() + .primaryKey() + .$defaultFn(() => createId()), + userId: text("userId") + .notNull() + .references(() => users.id, { onDelete: "cascade" }) + .unique(), + stripeCustomerId: text("stripeCustomerId").notNull(), + stripeSubscriptionId: text("stripeSubscriptionId"), + status: text("status", { + enum: [ + "active", + "canceled", + "past_due", + "unpaid", + "incomplete", + "trialing", + "incomplete_expired", + "paused", + ], + }).notNull(), + tier: text("tier", { + enum: ["free", "paid"], + }) + .notNull() + .default("free"), + priceId: text("priceId"), + cancelAtPeriodEnd: integer("cancelAtPeriodEnd", { + mode: "boolean", + }).default(false), + startDate: integer("startDate", { mode: "timestamp" }), + endDate: integer("endDate", { mode: "timestamp" }), + createdAt: createdAtField(), + modifiedAt: modifiedAtField(), + }, + (s) => [ + index("subscriptions_userId_idx").on(s.userId), + index("subscriptions_stripeCustomerId_idx").on(s.stripeCustomerId), + ], +); + // Relations export const userRelations = relations(users, ({ many, one }) => ({ @@ -596,6 +641,7 @@ export const userRelations = relations(users, ({ many, one }) => ({ fields: [users.id], references: [userSettings.userId], }), + subscription: one(subscriptions), })); export const bookmarkRelations = relations(bookmarks, ({ many, one }) => ({ @@ -745,6 +791,13 @@ export const invitesRelations = relations(invites, ({ one }) => ({ }), })); +export const subscriptionsRelations = relations(subscriptions, ({ one }) => ({ + user: one(users, { + fields: [subscriptions.userId], + references: [users.id], + }), +})); + export const passwordResetTokensRelations = relations( passwordResetTokens, ({ one }) => ({ |
