ZindagiAssan_Backend / src /modules /user /user.schema.ts
Talha812's picture
Upload 45 files
2c16c8c verified
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),
};
});