import { pgTable, unique, uuid, text, timestamp, foreignKey, integer, boolean } from "drizzle-orm/pg-core" import { sql } from "drizzle-orm" export const verificationTokens = pgTable("verification_tokens", { id: uuid().defaultRandom().primaryKey().notNull(), email: text().notNull(), token: text().notNull(), expires: timestamp({ mode: 'string' }).notNull(), type: text().notNull(), createdAt: timestamp("created_at", { mode: 'string' }).defaultNow(), }, (table) => [ unique("verification_tokens_token_unique").on(table.token), ]); export const accounts = pgTable("accounts", { id: uuid().defaultRandom().primaryKey().notNull(), userId: uuid("user_id").notNull(), type: text().notNull(), provider: text().notNull(), providerAccountId: text("provider_account_id").notNull(), refreshToken: text("refresh_token"), accessToken: text("access_token"), expiresAt: integer("expires_at"), tokenType: text("token_type"), scope: text(), idToken: text("id_token"), sessionState: text("session_state"), }, (table) => [ foreignKey({ columns: [table.userId], foreignColumns: [users.id], name: "accounts_user_id_users_id_fk" }).onDelete("cascade"), ]); export const sessions = pgTable("sessions", { id: uuid().defaultRandom().primaryKey().notNull(), sessionToken: text("session_token").notNull(), userId: uuid("user_id").notNull(), expires: timestamp({ mode: 'string' }).notNull(), }, (table) => [ foreignKey({ columns: [table.userId], foreignColumns: [users.id], name: "sessions_user_id_users_id_fk" }).onDelete("cascade"), unique("sessions_session_token_unique").on(table.sessionToken), ]); export const userActivities = pgTable("user_activities", { id: uuid().defaultRandom().primaryKey().notNull(), userId: uuid("user_id").notNull(), type: text().notNull(), description: text().notNull(), creditAmount: integer("credit_amount"), metadata: text(), createdAt: timestamp("created_at", { mode: 'string' }).defaultNow(), }, (table) => [ foreignKey({ columns: [table.userId], foreignColumns: [users.id], name: "user_activities_user_id_users_id_fk" }).onDelete("cascade"), ]); export const users = pgTable("users", { id: uuid().defaultRandom().primaryKey().notNull(), email: text().notNull(), password: text(), username: text(), emailVerified: timestamp("email_verified", { mode: 'string' }), image: text(), isEmailVerified: boolean("is_email_verified").default(false).notNull(), credits: integer().default(10).notNull(), createdAt: timestamp("created_at", { mode: 'string' }).defaultNow(), updatedAt: timestamp("updated_at", { mode: 'string' }).defaultNow(), subscriptionCredits: integer("subscription_credits").default(0).notNull(), subscriptionStatus: text("subscription_status").default('none'), subscriptionPlan: text("subscription_plan"), subscriptionStartDate: timestamp("subscription_start_date", { mode: 'string' }), subscriptionEndDate: timestamp("subscription_end_date", { mode: 'string' }), stripeCustomerId: text("stripe_customer_id"), stripeSubscriptionId: text("stripe_subscription_id"), }, (table) => [ unique("users_email_unique").on(table.email), ]);