schema.ts 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import { pgTable, unique, uuid, text, timestamp, foreignKey, integer, boolean } from "drizzle-orm/pg-core"
  2. import { sql } from "drizzle-orm"
  3. export const verificationTokens = pgTable("verification_tokens", {
  4. id: uuid().defaultRandom().primaryKey().notNull(),
  5. email: text().notNull(),
  6. token: text().notNull(),
  7. expires: timestamp({ mode: 'string' }).notNull(),
  8. type: text().notNull(),
  9. createdAt: timestamp("created_at", { mode: 'string' }).defaultNow(),
  10. }, (table) => [
  11. unique("verification_tokens_token_unique").on(table.token),
  12. ]);
  13. export const accounts = pgTable("accounts", {
  14. id: uuid().defaultRandom().primaryKey().notNull(),
  15. userId: uuid("user_id").notNull(),
  16. type: text().notNull(),
  17. provider: text().notNull(),
  18. providerAccountId: text("provider_account_id").notNull(),
  19. refreshToken: text("refresh_token"),
  20. accessToken: text("access_token"),
  21. expiresAt: integer("expires_at"),
  22. tokenType: text("token_type"),
  23. scope: text(),
  24. idToken: text("id_token"),
  25. sessionState: text("session_state"),
  26. }, (table) => [
  27. foreignKey({
  28. columns: [table.userId],
  29. foreignColumns: [users.id],
  30. name: "accounts_user_id_users_id_fk"
  31. }).onDelete("cascade"),
  32. ]);
  33. export const sessions = pgTable("sessions", {
  34. id: uuid().defaultRandom().primaryKey().notNull(),
  35. sessionToken: text("session_token").notNull(),
  36. userId: uuid("user_id").notNull(),
  37. expires: timestamp({ mode: 'string' }).notNull(),
  38. }, (table) => [
  39. foreignKey({
  40. columns: [table.userId],
  41. foreignColumns: [users.id],
  42. name: "sessions_user_id_users_id_fk"
  43. }).onDelete("cascade"),
  44. unique("sessions_session_token_unique").on(table.sessionToken),
  45. ]);
  46. export const userActivities = pgTable("user_activities", {
  47. id: uuid().defaultRandom().primaryKey().notNull(),
  48. userId: uuid("user_id").notNull(),
  49. type: text().notNull(),
  50. description: text().notNull(),
  51. creditAmount: integer("credit_amount"),
  52. metadata: text(),
  53. createdAt: timestamp("created_at", { mode: 'string' }).defaultNow(),
  54. }, (table) => [
  55. foreignKey({
  56. columns: [table.userId],
  57. foreignColumns: [users.id],
  58. name: "user_activities_user_id_users_id_fk"
  59. }).onDelete("cascade"),
  60. ]);
  61. export const users = pgTable("users", {
  62. id: uuid().defaultRandom().primaryKey().notNull(),
  63. email: text().notNull(),
  64. password: text(),
  65. username: text(),
  66. emailVerified: timestamp("email_verified", { mode: 'string' }),
  67. image: text(),
  68. isEmailVerified: boolean("is_email_verified").default(false).notNull(),
  69. credits: integer().default(10).notNull(),
  70. createdAt: timestamp("created_at", { mode: 'string' }).defaultNow(),
  71. updatedAt: timestamp("updated_at", { mode: 'string' }).defaultNow(),
  72. subscriptionCredits: integer("subscription_credits").default(0).notNull(),
  73. subscriptionStatus: text("subscription_status").default('none'),
  74. subscriptionPlan: text("subscription_plan"),
  75. subscriptionStartDate: timestamp("subscription_start_date", { mode: 'string' }),
  76. subscriptionEndDate: timestamp("subscription_end_date", { mode: 'string' }),
  77. stripeCustomerId: text("stripe_customer_id"),
  78. stripeSubscriptionId: text("stripe_subscription_id"),
  79. }, (table) => [
  80. unique("users_email_unique").on(table.email),
  81. ]);