// db/schema/notifications.ts import { pgTable, uuid, varchar, text, boolean, timestamp, index } from 'drizzle-orm/pg-core'; import { users } from './users'; // 기존 users 테이블 import { relations } from 'drizzle-orm'; export const notifications = pgTable('notifications', { id: uuid('id').primaryKey().defaultRandom(), userId: varchar('user_id', { length: 255 }).notNull(), title: varchar('title', { length: 255 }).notNull(), message: text('message').notNull(), type: varchar('type', { length: 50 }).notNull(), // 'assignment', 'update', 'reminder' 등 relatedRecordId: varchar('related_record_id', { length: 255 }), relatedRecordType: varchar('related_record_type', { length: 100 }), // 'project', 'task', 'order' 등 isRead: boolean('is_read').default(false).notNull(), createdAt: timestamp('created_at').defaultNow().notNull(), readAt: timestamp('read_at'), }, (table) => ({ userIdIdx: index('idx_notifications_user_id').on(table.userId), createdAtIdx: index('idx_notifications_created_at').on(table.createdAt.desc()), isReadIdx: index('idx_notifications_is_read').on(table.isRead), userReadIdx: index('idx_notifications_user_read').on(table.userId, table.isRead), })); // 관계 정의 export const notificationsRelations = relations(notifications, ({ one }) => ({ user: one(users, { fields: [notifications.userId], references: [users.id], }), })); // 타입 정의 export type Notification = typeof notifications.$inferSelect; export type NewNotification = typeof notifications.$inferInsert; // 알림 타입 enum export const NotificationType = { ASSIGNMENT: 'assignment', UPDATE: 'update', REMINDER: 'reminder', APPROVAL: 'approval', DEADLINE: 'deadline', STATUS_CHANGE: 'status_change' } as const; export type NotificationTypeValue = typeof NotificationType[keyof typeof NotificationType]; // 관련 레코드 타입 enum export const RelatedRecordType = { PROJECT: 'project', TASK: 'task', ORDER: 'order', DOCUMENT: 'document', USER: 'user' } as const; export type RelatedRecordTypeValue = typeof RelatedRecordType[keyof typeof RelatedRecordType];