mirror of
https://github.com/Portabase/portabase.git
synced 2026-07-14 11:16:13 +02:00
Working on notifier system.
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
import {boolean, jsonb, pgEnum, pgTable, primaryKey, unique, uuid, varchar} from "drizzle-orm/pg-core";
|
||||
import {timestamps} from "@/db/schema/00_common";
|
||||
import {organization} from "@/db/schema/03_organization";
|
||||
import {relations} from "drizzle-orm";
|
||||
import {createSelectSchema} from "drizzle-zod";
|
||||
import {z} from "zod";
|
||||
|
||||
|
||||
export const providerKindEnum = pgEnum('provider_kind', ['curl', 'slack', 'smtp', 'webhook']);
|
||||
|
||||
export const notificationChannel = pgTable('notification_channel', {
|
||||
id: uuid("id").defaultRandom().primaryKey(),
|
||||
provider: providerKindEnum('provider').notNull(),
|
||||
name: varchar('name', {length: 255}).notNull(),
|
||||
config: jsonb('config').notNull(),
|
||||
enabled: boolean('enabled').default(false).notNull(),
|
||||
...timestamps
|
||||
});
|
||||
|
||||
export const organizationNotificationChannel = pgTable(
|
||||
"organization_notification_channels",
|
||||
{
|
||||
organizationId: uuid('organization_id')
|
||||
.notNull()
|
||||
.references(() => organization.id, {onDelete: 'cascade'}),
|
||||
notificationChannelId: uuid('notification_channel_id')
|
||||
.notNull()
|
||||
.references(() => notificationChannel.id, {onDelete: 'cascade'}),
|
||||
},
|
||||
(t) => [unique().on(t.organizationId, t.notificationChannelId)]
|
||||
);
|
||||
|
||||
|
||||
export const notificationChannelRelations = relations(notificationChannel, ({many}) => ({
|
||||
organizations: many(organizationNotificationChannel),
|
||||
}));
|
||||
|
||||
export const organizationNotificationChannelRelations = relations(organizationNotificationChannel, ({one}) => ({
|
||||
organization: one(organization, {
|
||||
fields: [organizationNotificationChannel.organizationId],
|
||||
references: [organization.id],
|
||||
}),
|
||||
notificationChannel: one(notificationChannel, {
|
||||
fields: [organizationNotificationChannel.notificationChannelId],
|
||||
references: [notificationChannel.id],
|
||||
}),
|
||||
}));
|
||||
|
||||
export const notificationChannelSchema = createSelectSchema(notificationChannel);
|
||||
export type NotificationChannel = z.infer<typeof notificationChannelSchema>;
|
||||
Reference in New Issue
Block a user