12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- import { pgTable, text, timestamp, uuid, boolean, integer } from 'drizzle-orm/pg-core';
- import { CREDIT_CONFIG } from '@/lib/constants';
- export const users = pgTable('users', {
- id: uuid('id').primaryKey().defaultRandom(),
- email: text('email').notNull().unique(),
- password: text('password'),
- username: text('username'),
- emailVerified: timestamp('email_verified'),
- image: text('image'),
- isEmailVerified: boolean('is_email_verified').notNull().default(false),
- credits: integer('credits').notNull().default(CREDIT_CONFIG.REGISTRATION_BONUS), // 永久积分
- subscriptionCredits: integer('subscription_credits').notNull().default(0), // 订阅积分
- // 订阅相关字段
- subscriptionStatus: text('subscription_status').default('none'), // 'none', 'active', 'canceled', 'expired'
- subscriptionPlan: text('subscription_plan'), // 'pro', 'enterprise', etc.
- subscriptionStartDate: timestamp('subscription_start_date'),
- subscriptionEndDate: timestamp('subscription_end_date'),
- stripeCustomerId: text('stripe_customer_id'),
- stripeSubscriptionId: text('stripe_subscription_id'),
- createdAt: timestamp('created_at').defaultNow(),
- updatedAt: timestamp('updated_at').defaultNow(),
- });
- export const verificationTokens = pgTable('verification_tokens', {
- id: uuid('id').primaryKey().defaultRandom(),
- email: text('email').notNull(),
- token: text('token').notNull().unique(),
- expires: timestamp('expires').notNull(),
- type: text('type').notNull(), // 'email_verification' | 'password_reset'
- createdAt: timestamp('created_at').defaultNow(),
- });
- export const accounts = pgTable('accounts', {
- id: uuid('id').primaryKey().defaultRandom(),
- userId: uuid('user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),
- type: text('type').notNull(),
- provider: text('provider').notNull(),
- providerAccountId: text('provider_account_id').notNull(),
- refresh_token: text('refresh_token'),
- access_token: text('access_token'),
- expires_at: integer('expires_at'),
- token_type: text('token_type'),
- scope: text('scope'),
- id_token: text('id_token'),
- session_state: text('session_state'),
- });
- export const sessions = pgTable('sessions', {
- id: uuid('id').primaryKey().defaultRandom(),
- sessionToken: text('session_token').notNull().unique(),
- userId: uuid('user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),
- expires: timestamp('expires').notNull(),
- });
- // 活动记录表
- export const userActivities = pgTable('user_activities', {
- id: uuid('id').primaryKey().defaultRandom(),
- userId: uuid('user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),
- type: text('type').notNull(), // 'credit_deduct', 'credit_add', 'image_generation', 'login', etc.
- description: text('description').notNull(),
- creditAmount: integer('credit_amount'), // 积分变化数量,负数为扣除,正数为增加
- metadata: text('metadata'), // JSON格式的额外数据
- createdAt: timestamp('created_at').defaultNow(),
- });
- export type User = typeof users.$inferSelect;
- export type NewUser = typeof users.$inferInsert;
- export type VerificationToken = typeof verificationTokens.$inferSelect;
- export type NewVerificationToken = typeof verificationTokens.$inferInsert;
|