334 lines
17 KiB
Plaintext
334 lines
17 KiB
Plaintext
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "mysql"
|
|
url = env("DATABASE_URL")
|
|
}
|
|
|
|
model audit {
|
|
auditID Int @id @default(autoincrement())
|
|
auditIP String? @db.VarChar(255)
|
|
auditURL String? @db.VarChar(255)
|
|
auditURLMethod String? @db.VarChar(255)
|
|
auditURLPayload String? @db.VarChar(255)
|
|
auditCreatedDate DateTime? @db.DateTime(0)
|
|
}
|
|
|
|
model lookup {
|
|
lookupID Int @id @default(autoincrement())
|
|
lookupOrder Int?
|
|
lookupTitle String? @db.VarChar(255)
|
|
lookupRefCode String? @db.VarChar(255)
|
|
lookupValue String? @db.VarChar(255)
|
|
lookupType String? @db.VarChar(255)
|
|
lookupStatus String? @db.VarChar(255)
|
|
lookupCreatedDate DateTime? @db.DateTime(0)
|
|
lookupModifiedDate DateTime? @db.DateTime(0)
|
|
}
|
|
|
|
model role {
|
|
roleID Int @id @default(autoincrement())
|
|
roleName String? @db.VarChar(255)
|
|
roleDescription String? @db.VarChar(255)
|
|
roleStatus String? @db.VarChar(255)
|
|
roleCreatedDate DateTime? @db.DateTime(0)
|
|
roleModifiedDate DateTime? @db.DateTime(0)
|
|
userrole userrole[]
|
|
}
|
|
|
|
model user {
|
|
userID Int @id @default(autoincrement())
|
|
userSecretKey String? @db.VarChar(255)
|
|
userUsername String? @db.VarChar(255)
|
|
userPassword String? @db.VarChar(255)
|
|
userFullName String? @db.VarChar(255)
|
|
userEmail String? @db.VarChar(255)
|
|
userPhone String? @db.VarChar(255)
|
|
userStatus String? @db.VarChar(255)
|
|
userCreatedDate DateTime? @db.DateTime(0)
|
|
userModifiedDate DateTime? @db.DateTime(0)
|
|
userrole userrole[]
|
|
}
|
|
|
|
model userrole {
|
|
userRoleID Int @id @default(autoincrement())
|
|
userRoleUserID Int @default(0)
|
|
userRoleRoleID Int @default(0)
|
|
userRoleCreatedDate DateTime @db.DateTime(0)
|
|
role role @relation(fields: [userRoleRoleID], references: [roleID], onDelete: NoAction, onUpdate: NoAction, map: "FK_userrole_role")
|
|
user user @relation(fields: [userRoleUserID], references: [userID], onDelete: NoAction, onUpdate: NoAction, map: "FK_userrole_user")
|
|
|
|
@@index([userRoleRoleID], map: "FK_userrole_role")
|
|
@@index([userRoleUserID], map: "FK_userrole_user")
|
|
}
|
|
|
|
model site_settings {
|
|
settingID Int @id @default(autoincrement())
|
|
siteName String? @db.VarChar(255)
|
|
siteNameFontSize Int? @default(18)
|
|
siteDescription String? @db.Text
|
|
siteLogo String? @db.VarChar(500)
|
|
siteLoadingLogo String? @db.VarChar(500)
|
|
siteFavicon String? @db.VarChar(500)
|
|
showSiteNameInHeader Boolean? @default(true)
|
|
primaryColor String? @db.VarChar(50)
|
|
secondaryColor String? @db.VarChar(50)
|
|
successColor String? @db.VarChar(50)
|
|
infoColor String? @db.VarChar(50)
|
|
warningColor String? @db.VarChar(50)
|
|
dangerColor String? @db.VarChar(50)
|
|
customCSS String? @db.Text
|
|
themeMode String? @db.VarChar(50)
|
|
customThemeFile String? @db.VarChar(500)
|
|
currentFont String? @db.VarChar(255)
|
|
fontSource String? @db.VarChar(500)
|
|
seoTitle String? @db.VarChar(255)
|
|
seoDescription String? @db.Text
|
|
seoKeywords String? @db.Text
|
|
seoAuthor String? @db.VarChar(255)
|
|
seoOgImage String? @db.VarChar(500)
|
|
seoTwitterCard String? @default("summary_large_image") @db.VarChar(50)
|
|
seoCanonicalUrl String? @db.VarChar(500)
|
|
seoRobots String? @default("index, follow") @db.VarChar(100)
|
|
seoGoogleAnalytics String? @db.VarChar(255)
|
|
seoGoogleTagManager String? @db.VarChar(255)
|
|
seoFacebookPixel String? @db.VarChar(255)
|
|
settingCreatedDate DateTime? @db.DateTime(0)
|
|
settingModifiedDate DateTime? @db.DateTime(0)
|
|
siteLoginLogo String? @db.VarChar(500)
|
|
}
|
|
|
|
/// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info.
|
|
model notification_analytics {
|
|
id String @id @default(dbgenerated("(uuid())")) @db.VarChar(36)
|
|
notification_id String @db.VarChar(36)
|
|
channel_type String @db.VarChar(20)
|
|
metric_type String @db.VarChar(30)
|
|
metric_value Int? @default(0)
|
|
recorded_at DateTime? @default(now()) @db.Timestamp(0)
|
|
metadata Json?
|
|
notifications notifications @relation(fields: [notification_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "notification_analytics_ibfk_1")
|
|
|
|
@@index([notification_id], map: "idx_notification_analytics_notification_id")
|
|
}
|
|
|
|
model notification_categories {
|
|
id String @id @default(dbgenerated("(uuid())")) @db.VarChar(36)
|
|
name String @db.VarChar(100)
|
|
value String @unique(map: "value") @db.VarChar(50)
|
|
description String? @db.Text
|
|
created_at DateTime? @default(now()) @db.Timestamp(0)
|
|
updated_at DateTime? @default(now()) @db.Timestamp(0)
|
|
notifications notifications[]
|
|
}
|
|
|
|
/// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info.
|
|
model notification_channels {
|
|
id String @id @default(dbgenerated("(uuid())")) @db.VarChar(36)
|
|
notification_id String @db.VarChar(36)
|
|
channel_type String @db.VarChar(20)
|
|
is_enabled Boolean? @default(true)
|
|
created_at DateTime? @default(now()) @db.Timestamp(0)
|
|
notifications notifications @relation(fields: [notification_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "notification_channels_ibfk_1")
|
|
|
|
@@index([notification_id], map: "notification_id")
|
|
}
|
|
|
|
model notification_delivery {
|
|
id Int @id @default(autoincrement())
|
|
notification_id Int
|
|
channel_type String
|
|
recipient String
|
|
is_success Boolean @default(false)
|
|
error_message String? @db.Text
|
|
attempts Int @default(0)
|
|
sent_at DateTime?
|
|
delivered_at DateTime?
|
|
created_at DateTime @default(now())
|
|
updated_at DateTime
|
|
}
|
|
|
|
model notification_delivery_config {
|
|
id Int @id @default(autoincrement())
|
|
channel_type String @unique
|
|
is_enabled Boolean @default(false)
|
|
provider String
|
|
provider_config Json
|
|
status String @default("Not Configured")
|
|
success_rate Float @default(0) @db.Float
|
|
created_at DateTime @default(now())
|
|
updated_at DateTime
|
|
created_by Int
|
|
updated_by Int
|
|
}
|
|
|
|
model notification_delivery_settings {
|
|
id Int @id @default(1)
|
|
auto_retry Boolean @default(true)
|
|
enable_fallback Boolean @default(true)
|
|
max_retries Int @default(3)
|
|
retry_delay Int @default(30)
|
|
priority String @default("normal")
|
|
enable_reports Boolean @default(true)
|
|
created_at DateTime @default(now())
|
|
updated_at DateTime
|
|
created_by Int
|
|
updated_by Int
|
|
}
|
|
|
|
/// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info.
|
|
model notification_queue {
|
|
id String @id @default(dbgenerated("(uuid())")) @db.VarChar(36)
|
|
notification_id String @db.VarChar(36)
|
|
recipient_id String @db.VarChar(36)
|
|
scheduled_for DateTime @db.Timestamp(0)
|
|
priority Int? @default(5)
|
|
attempts Int? @default(0)
|
|
max_attempts Int? @default(3)
|
|
status String? @default("queued") @db.VarChar(20)
|
|
last_attempt_at DateTime? @db.Timestamp(0)
|
|
error_message String? @db.Text
|
|
created_at DateTime? @default(now()) @db.Timestamp(0)
|
|
updated_at DateTime? @default(now()) @db.Timestamp(0)
|
|
notifications notifications @relation(fields: [notification_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "notification_queue_ibfk_1")
|
|
notification_recipients notification_recipients @relation(fields: [recipient_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "notification_queue_ibfk_2")
|
|
|
|
@@index([scheduled_for], map: "idx_notification_queue_scheduled_for")
|
|
@@index([status], map: "idx_notification_queue_status")
|
|
@@index([notification_id], map: "notification_id")
|
|
@@index([recipient_id], map: "recipient_id")
|
|
}
|
|
|
|
/// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info.
|
|
model notification_recipients {
|
|
id String @id @default(dbgenerated("(uuid())")) @db.VarChar(36)
|
|
notification_id String @db.VarChar(36)
|
|
user_id String @db.VarChar(36)
|
|
email String? @db.VarChar(255)
|
|
channel_type String @db.VarChar(20)
|
|
status String? @default("pending") @db.VarChar(20)
|
|
sent_at DateTime? @db.Timestamp(0)
|
|
delivered_at DateTime? @db.Timestamp(0)
|
|
opened_at DateTime? @db.Timestamp(0)
|
|
clicked_at DateTime? @db.Timestamp(0)
|
|
error_message String? @db.Text
|
|
ab_test_variant String? @db.VarChar(1)
|
|
created_at DateTime? @default(now()) @db.Timestamp(0)
|
|
updated_at DateTime? @default(now()) @db.Timestamp(0)
|
|
notification_queue notification_queue[]
|
|
notifications notifications @relation(fields: [notification_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "notification_recipients_ibfk_1")
|
|
|
|
@@index([status], map: "idx_notification_recipients_status")
|
|
@@index([user_id], map: "idx_notification_recipients_user_id")
|
|
@@index([notification_id], map: "notification_id")
|
|
}
|
|
|
|
model notification_templates {
|
|
id String @id @default(dbgenerated("(uuid())")) @db.VarChar(36)
|
|
name String @db.VarChar(100)
|
|
value String @unique(map: "value") @db.VarChar(50)
|
|
subject String? @db.VarChar(255)
|
|
email_content String? @db.Text
|
|
push_title String? @db.VarChar(100)
|
|
push_body String? @db.VarChar(300)
|
|
variables Json?
|
|
is_active Boolean? @default(true)
|
|
created_at DateTime? @default(now()) @db.Timestamp(0)
|
|
updated_at DateTime? @default(now()) @db.Timestamp(0)
|
|
notifications notifications[]
|
|
}
|
|
|
|
model notification_user_segments {
|
|
id String @id @default(dbgenerated("(uuid())")) @db.VarChar(36)
|
|
notification_id String @db.VarChar(36)
|
|
segment_id String @db.VarChar(36)
|
|
created_at DateTime? @default(now()) @db.Timestamp(0)
|
|
notifications notifications @relation(fields: [notification_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "notification_user_segments_ibfk_1")
|
|
user_segments user_segments @relation(fields: [segment_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "notification_user_segments_ibfk_2")
|
|
|
|
@@index([notification_id], map: "notification_id")
|
|
@@index([segment_id], map: "segment_id")
|
|
}
|
|
|
|
/// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info.
|
|
model notifications {
|
|
id String @id @default(dbgenerated("(uuid())")) @db.VarChar(36)
|
|
title String @db.VarChar(255)
|
|
type String @db.VarChar(20)
|
|
priority String @db.VarChar(20)
|
|
category_id String? @db.VarChar(36)
|
|
status String? @default("draft") @db.VarChar(20)
|
|
delivery_type String @db.VarChar(20)
|
|
scheduled_at DateTime? @db.Timestamp(0)
|
|
timezone String? @default("UTC") @db.VarChar(50)
|
|
expires_at DateTime? @db.Timestamp(0)
|
|
enable_ab_testing Boolean? @default(false)
|
|
ab_test_split Int? @default(50)
|
|
ab_test_name String? @db.VarChar(100)
|
|
enable_tracking Boolean? @default(true)
|
|
audience_type String @db.VarChar(20)
|
|
specific_users String? @db.Text
|
|
user_status String? @db.VarChar(20)
|
|
registration_period String? @db.VarChar(50)
|
|
exclude_unsubscribed Boolean? @default(true)
|
|
respect_do_not_disturb Boolean? @default(true)
|
|
content_type String @db.VarChar(20)
|
|
template_id String? @db.VarChar(36)
|
|
email_subject String? @db.VarChar(255)
|
|
email_content String? @db.Text
|
|
call_to_action_text String? @db.VarChar(100)
|
|
call_to_action_url String? @db.Text
|
|
push_title String? @db.VarChar(100)
|
|
push_body String? @db.VarChar(300)
|
|
push_image_url String? @db.Text
|
|
estimated_reach Int? @default(0)
|
|
actual_sent Int? @default(0)
|
|
created_by String @db.VarChar(36)
|
|
created_at DateTime? @default(now()) @db.Timestamp(0)
|
|
updated_at DateTime? @default(now()) @db.Timestamp(0)
|
|
sent_at DateTime? @db.Timestamp(0)
|
|
notification_analytics notification_analytics[]
|
|
notification_channels notification_channels[]
|
|
notification_queue notification_queue[]
|
|
notification_recipients notification_recipients[]
|
|
notification_user_segments notification_user_segments[]
|
|
notification_categories notification_categories? @relation(fields: [category_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "notifications_ibfk_1")
|
|
notification_templates notification_templates? @relation(fields: [template_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "notifications_ibfk_2")
|
|
|
|
@@index([category_id], map: "category_id")
|
|
@@index([created_by], map: "idx_notifications_created_by")
|
|
@@index([scheduled_at], map: "idx_notifications_scheduled_at")
|
|
@@index([status], map: "idx_notifications_status")
|
|
@@index([template_id], map: "template_id")
|
|
}
|
|
|
|
model user_notification_preferences {
|
|
id String @id @default(dbgenerated("(uuid())")) @db.VarChar(36)
|
|
user_id String @db.VarChar(36)
|
|
channel_type String @db.VarChar(20)
|
|
category_value String? @db.VarChar(50)
|
|
is_enabled Boolean? @default(true)
|
|
do_not_disturb_start DateTime? @db.Time(0)
|
|
do_not_disturb_end DateTime? @db.Time(0)
|
|
timezone String? @default("UTC") @db.VarChar(50)
|
|
created_at DateTime? @default(now()) @db.Timestamp(0)
|
|
updated_at DateTime? @default(now()) @db.Timestamp(0)
|
|
|
|
@@unique([user_id, channel_type, category_value], map: "user_id")
|
|
@@index([user_id], map: "idx_user_notification_preferences_user_id")
|
|
}
|
|
|
|
model user_segments {
|
|
id String @id @default(dbgenerated("(uuid())")) @db.VarChar(36)
|
|
name String @db.VarChar(100)
|
|
value String @unique(map: "value") @db.VarChar(50)
|
|
description String? @db.Text
|
|
criteria Json
|
|
is_active Boolean? @default(true)
|
|
created_at DateTime? @default(now()) @db.Timestamp(0)
|
|
updated_at DateTime? @default(now()) @db.Timestamp(0)
|
|
notification_user_segments notification_user_segments[]
|
|
}
|