notification implemented
This commit is contained in:
+210
@@ -0,0 +1,210 @@
|
||||
ALTER TYPE "NotificationType" ADD VALUE IF NOT EXISTS 'ACCOUNT_CREATED';
|
||||
|
||||
ALTER TABLE "billing_accounts"
|
||||
ADD COLUMN "preferredLanguage" TEXT NOT NULL DEFAULT 'en';
|
||||
|
||||
ALTER TABLE "notifications"
|
||||
ADD COLUMN "templateKey" TEXT,
|
||||
ADD COLUMN "locale" TEXT NOT NULL DEFAULT 'en';
|
||||
|
||||
CREATE TABLE "notification_templates" (
|
||||
"id" TEXT NOT NULL,
|
||||
"templateKey" TEXT NOT NULL,
|
||||
"category" TEXT NOT NULL,
|
||||
"channel" "NotificationChannel" NOT NULL,
|
||||
"locale" TEXT NOT NULL,
|
||||
"subject" TEXT,
|
||||
"body" TEXT NOT NULL,
|
||||
"requiredVariables" JSONB,
|
||||
"optionalVariables" JSONB,
|
||||
"version" INTEGER NOT NULL DEFAULT 1,
|
||||
"isActive" BOOLEAN NOT NULL DEFAULT TRUE,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "notification_templates_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX "notification_templates_templateKey_channel_locale_version_key"
|
||||
ON "notification_templates"("templateKey", "channel", "locale", "version");
|
||||
|
||||
CREATE INDEX "notification_templates_templateKey_channel_locale_isActive_idx"
|
||||
ON "notification_templates"("templateKey", "channel", "locale", "isActive");
|
||||
|
||||
INSERT INTO "notification_templates" (
|
||||
"id",
|
||||
"templateKey",
|
||||
"category",
|
||||
"channel",
|
||||
"locale",
|
||||
"subject",
|
||||
"body",
|
||||
"requiredVariables",
|
||||
"optionalVariables"
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
'notif_tpl_account_created_email_en',
|
||||
'account.created',
|
||||
'account',
|
||||
'EMAIL',
|
||||
'en',
|
||||
'Your workspace is ready - RentalDriveGo',
|
||||
E'Hi {{firstName}},\n\nYour RentalDriveGo workspace for {{companyName}} has been created successfully.\nPlan: {{planName}} ({{billingPeriodLabel}})\nCurrency: {{currency}}\nPrimary payment provider: {{paymentProvider}}\nFree trial ends on {{trialEndDate}}.\n\nYour workspace is ready. Sign in with the email and password you chose during signup.\n\nRentalDriveGo',
|
||||
'["firstName","companyName","planName","billingPeriodLabel","currency","paymentProvider","trialEndDate"]'::jsonb,
|
||||
'[]'::jsonb
|
||||
),
|
||||
(
|
||||
'notif_tpl_account_created_email_fr',
|
||||
'account.created',
|
||||
'account',
|
||||
'EMAIL',
|
||||
'fr',
|
||||
'Votre espace de travail est pret - RentalDriveGo',
|
||||
E'Bonjour {{firstName}},\n\nVotre espace de travail RentalDriveGo pour {{companyName}} a ete cree avec succes.\nForfait : {{planName}} ({{billingPeriodLabel}})\nDevise : {{currency}}\nFournisseur de paiement principal : {{paymentProvider}}\nLa periode d''essai gratuit se termine le {{trialEndDate}}.\n\nVotre espace de travail est pret. Connectez-vous avec l''e-mail et le mot de passe choisis lors de l''inscription.\n\nRentalDriveGo',
|
||||
'["firstName","companyName","planName","billingPeriodLabel","currency","paymentProvider","trialEndDate"]'::jsonb,
|
||||
'[]'::jsonb
|
||||
),
|
||||
(
|
||||
'notif_tpl_account_created_email_ar',
|
||||
'account.created',
|
||||
'account',
|
||||
'EMAIL',
|
||||
'ar',
|
||||
'مساحة عملك جاهزة - RentalDriveGo',
|
||||
E'مرحباً {{firstName}}،\n\nتم إنشاء مساحة عمل RentalDriveGo الخاصة بـ {{companyName}} بنجاح.\nالخطة: {{planName}} ({{billingPeriodLabel}})\nالعملة: {{currency}}\nمزود الدفع الرئيسي: {{paymentProvider}}\nتنتهي الفترة التجريبية المجانية في {{trialEndDate}}.\n\nمساحة عملك جاهزة. سجّل الدخول باستخدام البريد الإلكتروني وكلمة المرور التي اخترتهما عند التسجيل.\n\nRentalDriveGo',
|
||||
'["firstName","companyName","planName","billingPeriodLabel","currency","paymentProvider","trialEndDate"]'::jsonb,
|
||||
'[]'::jsonb
|
||||
),
|
||||
(
|
||||
'notif_tpl_account_created_in_app_en',
|
||||
'account.created',
|
||||
'account',
|
||||
'IN_APP',
|
||||
'en',
|
||||
'Workspace ready',
|
||||
E'Your RentalDriveGo workspace for {{companyName}} is ready. Your free trial ends on {{trialEndDate}}.',
|
||||
'["companyName","trialEndDate"]'::jsonb,
|
||||
'[]'::jsonb
|
||||
),
|
||||
(
|
||||
'notif_tpl_account_created_in_app_fr',
|
||||
'account.created',
|
||||
'account',
|
||||
'IN_APP',
|
||||
'fr',
|
||||
'Espace pret',
|
||||
E'Votre espace de travail RentalDriveGo pour {{companyName}} est pret. Votre essai gratuit se termine le {{trialEndDate}}.',
|
||||
'["companyName","trialEndDate"]'::jsonb,
|
||||
'[]'::jsonb
|
||||
),
|
||||
(
|
||||
'notif_tpl_account_created_in_app_ar',
|
||||
'account.created',
|
||||
'account',
|
||||
'IN_APP',
|
||||
'ar',
|
||||
'مساحة العمل جاهزة',
|
||||
E'مساحة عمل RentalDriveGo الخاصة بـ {{companyName}} جاهزة. تنتهي الفترة التجريبية المجانية في {{trialEndDate}}.',
|
||||
'["companyName","trialEndDate"]'::jsonb,
|
||||
'[]'::jsonb
|
||||
),
|
||||
(
|
||||
'notif_tpl_booking_confirmed_email_en',
|
||||
'booking.confirmed',
|
||||
'reservation',
|
||||
'EMAIL',
|
||||
'en',
|
||||
'Booking confirmed - {{companyName}}',
|
||||
E'Hi {{firstName}},\n\nYour booking with {{companyName}} has been confirmed.\nPickup: {{startDate}}\nReturn: {{endDate}}\nVehicle: {{vehicleName}}\n\nThank you for choosing RentalDriveGo.',
|
||||
'["firstName","companyName","startDate","endDate","vehicleName"]'::jsonb,
|
||||
'[]'::jsonb
|
||||
),
|
||||
(
|
||||
'notif_tpl_booking_confirmed_email_fr',
|
||||
'booking.confirmed',
|
||||
'reservation',
|
||||
'EMAIL',
|
||||
'fr',
|
||||
'Reservation confirmee - {{companyName}}',
|
||||
E'Bonjour {{firstName}},\n\nVotre reservation chez {{companyName}} a ete confirmee.\nPrise en charge : {{startDate}}\nRetour : {{endDate}}\nVehicule : {{vehicleName}}\n\nMerci d''avoir choisi RentalDriveGo.',
|
||||
'["firstName","companyName","startDate","endDate","vehicleName"]'::jsonb,
|
||||
'[]'::jsonb
|
||||
),
|
||||
(
|
||||
'notif_tpl_booking_confirmed_email_ar',
|
||||
'booking.confirmed',
|
||||
'reservation',
|
||||
'EMAIL',
|
||||
'ar',
|
||||
'تم تأكيد الحجز - {{companyName}}',
|
||||
E'مرحباً {{firstName}}،\n\nتم تأكيد حجزك مع {{companyName}}.\nالاستلام: {{startDate}}\nالإرجاع: {{endDate}}\nالمركبة: {{vehicleName}}\n\nشكراً لاختيار RentalDriveGo.',
|
||||
'["firstName","companyName","startDate","endDate","vehicleName"]'::jsonb,
|
||||
'[]'::jsonb
|
||||
),
|
||||
(
|
||||
'notif_tpl_booking_confirmed_in_app_en',
|
||||
'booking.confirmed',
|
||||
'reservation',
|
||||
'IN_APP',
|
||||
'en',
|
||||
'Booking confirmed',
|
||||
E'Your booking with {{companyName}} has been confirmed.',
|
||||
'["companyName"]'::jsonb,
|
||||
'[]'::jsonb
|
||||
),
|
||||
(
|
||||
'notif_tpl_booking_confirmed_in_app_fr',
|
||||
'booking.confirmed',
|
||||
'reservation',
|
||||
'IN_APP',
|
||||
'fr',
|
||||
'Reservation confirmee',
|
||||
E'Votre reservation chez {{companyName}} a ete confirmee.',
|
||||
'["companyName"]'::jsonb,
|
||||
'[]'::jsonb
|
||||
),
|
||||
(
|
||||
'notif_tpl_booking_confirmed_in_app_ar',
|
||||
'booking.confirmed',
|
||||
'reservation',
|
||||
'IN_APP',
|
||||
'ar',
|
||||
'تم تأكيد الحجز',
|
||||
E'تم تأكيد حجزك مع {{companyName}}.',
|
||||
'["companyName"]'::jsonb,
|
||||
'[]'::jsonb
|
||||
),
|
||||
(
|
||||
'notif_tpl_subscription_trial_ending_in_app_en',
|
||||
'subscription.trial_ending',
|
||||
'subscription',
|
||||
'IN_APP',
|
||||
'en',
|
||||
'Your trial ends soon',
|
||||
E'Your free trial ends on {{trialEndDate}}. Add a payment method to keep access.',
|
||||
'["trialEndDate"]'::jsonb,
|
||||
'[]'::jsonb
|
||||
),
|
||||
(
|
||||
'notif_tpl_subscription_trial_ending_in_app_fr',
|
||||
'subscription.trial_ending',
|
||||
'subscription',
|
||||
'IN_APP',
|
||||
'fr',
|
||||
'Votre essai se termine bientot',
|
||||
E'Votre essai gratuit se termine le {{trialEndDate}}. Ajoutez un moyen de paiement pour conserver l''acces.',
|
||||
'["trialEndDate"]'::jsonb,
|
||||
'[]'::jsonb
|
||||
),
|
||||
(
|
||||
'notif_tpl_subscription_trial_ending_in_app_ar',
|
||||
'subscription.trial_ending',
|
||||
'subscription',
|
||||
'IN_APP',
|
||||
'ar',
|
||||
'ستنتهي الفترة التجريبية قريباً',
|
||||
E'تنتهي فترتك التجريبية المجانية في {{trialEndDate}}. أضف وسيلة دفع للحفاظ على الوصول.',
|
||||
'["trialEndDate"]'::jsonb,
|
||||
'[]'::jsonb
|
||||
);
|
||||
@@ -377,6 +377,7 @@ enum AdminAction {
|
||||
}
|
||||
|
||||
enum NotificationType {
|
||||
ACCOUNT_CREATED
|
||||
NEW_BOOKING
|
||||
BOOKING_CANCELLED
|
||||
PAYMENT_RECEIVED
|
||||
@@ -540,6 +541,7 @@ model BillingAccount {
|
||||
isPrimary Boolean @default(true)
|
||||
legalName String
|
||||
billingEmail String
|
||||
preferredLanguage String @default("en")
|
||||
billingAddress Json?
|
||||
taxId String?
|
||||
taxExempt Boolean @default(false)
|
||||
@@ -1218,6 +1220,8 @@ model Notification {
|
||||
body String
|
||||
data Json?
|
||||
channel NotificationChannel
|
||||
templateKey String?
|
||||
locale String @default("en")
|
||||
status NotificationStatus @default(PENDING)
|
||||
sentAt DateTime?
|
||||
failReason String?
|
||||
@@ -1231,6 +1235,26 @@ model Notification {
|
||||
@@map("notifications")
|
||||
}
|
||||
|
||||
model NotificationTemplate {
|
||||
id String @id @default(cuid())
|
||||
templateKey String
|
||||
category String
|
||||
channel NotificationChannel
|
||||
locale String
|
||||
subject String?
|
||||
body String
|
||||
requiredVariables Json?
|
||||
optionalVariables Json?
|
||||
version Int @default(1)
|
||||
isActive Boolean @default(true)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
@@unique([templateKey, channel, locale, version])
|
||||
@@index([templateKey, channel, locale, isActive])
|
||||
@@map("notification_templates")
|
||||
}
|
||||
|
||||
model NotificationPreference {
|
||||
id String @id @default(cuid())
|
||||
employeeId String?
|
||||
|
||||
Reference in New Issue
Block a user