| import { | |
| pgTable, | |
| uuid, | |
| text, | |
| boolean, | |
| integer, | |
| timestamp, | |
| index, | |
| pgEnum, | |
| } from 'drizzle-orm/pg-core'; | |
| export const languageEnum = pgEnum('language', ['ur', 'en', 'ps']); | |
| export const notificationFrequencyEnum = pgEnum('notification_frequency', ['none', 'daily', 'weekly']); | |
| export const subscriptionTypeEnum = pgEnum('subscription_type', ['freemium', 'premium']); | |
| export const subscriptionStatusEnum = pgEnum('subscription_status', ['active', 'cancelled', 'expired']); | |
| export const users = pgTable('users', { | |
| id: uuid('id').primaryKey(), | |
| email: text('email').notNull(), | |
| phoneNumber: text('phone_number').notNull(), | |
| fullName: text('full_name').notNull(), | |
| profileImageUrl: text('profile_image_url'), | |
| defaultLanguage: languageEnum('default_language').default('ur').notNull(), | |
| timezone: text('timezone').default('Asia/Karachi').notNull(), | |
| notificationEnabled: boolean('notification_enabled').default(true).notNull(), | |
| notificationFrequency: notificationFrequencyEnum('notification_frequency').default('daily').notNull(), | |
| subscriptionType: subscriptionTypeEnum('subscription_type').default('freemium').notNull(), | |
| subscriptionStatus: subscriptionStatusEnum('subscription_status').default('active').notNull(), | |
| dailyMessageLimit: integer('daily_message_limit').default(20).notNull(), | |
| dailyMessagesUsed: integer('daily_messages_used').default(0).notNull(), | |
| dailyLimitResetAt: timestamp('daily_limit_reset_at', { withTimezone: true }), | |
| createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(), | |
| updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(), | |
| deletedAt: timestamp('deleted_at', { withTimezone: true }), | |
| }, (table) => { | |
| return { | |
| emailIndex: index('users_email_idx').on(table.email), | |
| phoneIndex: index('users_phone_idx').on(table.phoneNumber), | |
| subscriptionIndex: index('users_subscription_type_status_idx') | |
| .on(table.subscriptionType, table.subscriptionStatus), | |
| }; | |
| }); | |