& so it begins
This commit is contained in:
49
packages/db/schema/general.schema.ts
Normal file
49
packages/db/schema/general.schema.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
import {
|
||||
boolean,
|
||||
json,
|
||||
pgTable,
|
||||
serial,
|
||||
text,
|
||||
timestamp,
|
||||
varchar,
|
||||
} from "drizzle-orm/pg-core";
|
||||
import { user } from "./better.auth.schema";
|
||||
import { relations } from "drizzle-orm";
|
||||
|
||||
export const notifications = pgTable("notifications", {
|
||||
id: serial("id").primaryKey(),
|
||||
|
||||
title: text("title").notNull(),
|
||||
body: text("body").notNull(),
|
||||
priority: varchar("priority", { length: 12 }).default("normal").notNull(), // "low", "normal", "high", "urgent"
|
||||
|
||||
type: varchar("type", { length: 12 }).notNull(),
|
||||
category: varchar("category", { length: 64 }),
|
||||
|
||||
isRead: boolean("is_read").default(false).notNull(),
|
||||
isArchived: boolean("is_archived").default(false).notNull(),
|
||||
|
||||
actionUrl: text("action_url"), // URL to navigate to when clicked
|
||||
actionType: varchar("action_type", { length: 16 }), // Type of action ("link", "function", etc.)
|
||||
actionData: json("action_data"), // Any additional data for the action
|
||||
|
||||
icon: varchar("icon", { length: 64 }), // Optional icon identifier
|
||||
|
||||
userId: text("user_id")
|
||||
.notNull()
|
||||
.references(() => user.id, { onDelete: "cascade" }),
|
||||
|
||||
// Lifecycle management
|
||||
sentAt: timestamp("sent_at").notNull(),
|
||||
readAt: timestamp("read_at"),
|
||||
expiresAt: timestamp("expires_at"),
|
||||
createdAt: timestamp("created_at").notNull(),
|
||||
updatedAt: timestamp("updated_at").notNull(),
|
||||
});
|
||||
|
||||
export const notificationsRelations = relations(notifications, ({ one }) => ({
|
||||
userAccount: one(user, {
|
||||
fields: [notifications.userId],
|
||||
references: [user.id],
|
||||
}),
|
||||
}));
|
||||
Reference in New Issue
Block a user