From 3fb57c877ef0f71910f9b86e22641c1334f778f0 Mon Sep 17 00:00:00 2001 From: Rohit Saluja Date: Wed, 13 Mar 2024 10:54:53 +0530 Subject: [PATCH] feat: send delete email is added --- .../template-document-delete.tsx | 2 - packages/email/templates/document-delete.tsx | 10 ++-- .../server-only/document/send-delete-email.ts | 51 +++++++++++++++++++ 3 files changed, 54 insertions(+), 9 deletions(-) create mode 100644 packages/lib/server-only/document/send-delete-email.ts diff --git a/packages/email/template-components/template-document-delete.tsx b/packages/email/template-components/template-document-delete.tsx index 99cbe9706..b87b4d5bd 100644 --- a/packages/email/template-components/template-document-delete.tsx +++ b/packages/email/template-components/template-document-delete.tsx @@ -2,8 +2,6 @@ import { Section, Text } from '../components'; import { TemplateDocumentImage } from './template-document-image'; export interface TemplateDocumentDeleteProps { - inviterName: string; - inviterEmail: string; reason: string; documentName: string; assetBaseUrl: string; diff --git a/packages/email/templates/document-delete.tsx b/packages/email/templates/document-delete.tsx index 79e40e3d8..87e6b6e9a 100644 --- a/packages/email/templates/document-delete.tsx +++ b/packages/email/templates/document-delete.tsx @@ -9,14 +9,12 @@ import { TemplateFooter } from '../template-components/template-footer'; export type DocumentDeleteEmailTemplateProps = Partial; -export const DocumentDeleteTemplate = ({ - inviterName = 'Lucas Smith', - inviterEmail = 'lucas@documenso.com', +export const DocumentDeleteEmailTemplate = ({ documentName = 'Open Source Pledge.pdf', assetBaseUrl = 'http://localhost:3002', reason = 'Unknown', }: DocumentDeleteEmailTemplateProps) => { - const previewText = `${inviterName} has cancelled the document ${documentName}, you don't need to sign it anymore.`; + const previewText = `Admin has deleted your document ${documentName}.`; const getAssetUrl = (path: string) => { return new URL(path, assetBaseUrl).toString(); @@ -45,11 +43,9 @@ export const DocumentDeleteTemplate = ({ className="mb-4 h-6" /> @@ -66,4 +62,4 @@ export const DocumentDeleteTemplate = ({ ); }; -export default DocumentDeleteTemplate; +export default DocumentDeleteEmailTemplate; diff --git a/packages/lib/server-only/document/send-delete-email.ts b/packages/lib/server-only/document/send-delete-email.ts new file mode 100644 index 000000000..8594a1c3c --- /dev/null +++ b/packages/lib/server-only/document/send-delete-email.ts @@ -0,0 +1,51 @@ +import { createElement } from 'react'; + +import { mailer } from '@documenso/email/mailer'; +import { render } from '@documenso/email/render'; +import { DocumentDeleteEmailTemplate } from '@documenso/email/templates/document-delete'; +import { prisma } from '@documenso/prisma'; + +import { NEXT_PUBLIC_WEBAPP_URL } from '../../constants/app'; + +export interface SendDeleteEmailOptions { + documentId: number; + reason: string; +} + +export const sendDeleteEmail = async ({ documentId, reason }: SendDeleteEmailOptions) => { + const document = await prisma.document.findFirst({ + where: { + id: documentId, + }, + include: { + User: true, + }, + }); + + if (!document) { + throw new Error('Document not found'); + } + + const { email, name } = document.User; + + const assetBaseUrl = NEXT_PUBLIC_WEBAPP_URL() || 'http://localhost:3000'; + + const template = createElement(DocumentDeleteEmailTemplate, { + documentName: document.title, + assetBaseUrl, + }); + + await mailer.sendMail({ + to: { + address: email, + name: name || '', + }, + from: { + name: process.env.NEXT_PRIVATE_SMTP_FROM_NAME || 'Documenso', + address: process.env.NEXT_PRIVATE_SMTP_FROM_ADDRESS || 'noreply@documenso.com', + }, + subject: 'Document Deleted!', + html: render(template), + text: render(template, { plainText: true }), + }); +};