feat: send email when all recipients have signed

This commit is contained in:
Ephraim Atta-Duncan
2023-09-07 20:14:04 +00:00
parent dbbe17a0a8
commit da2033692c
3 changed files with 61 additions and 0 deletions

View File

@ -70,6 +70,7 @@ export const completeDocumentWithToken = async ({
}, },
}); });
// TODO: Send email to documents with two or more recipients
await sendPendingEmail({ document, recipient }); await sendPendingEmail({ document, recipient });
const documents = await prisma.document.updateMany({ const documents = await prisma.document.updateMany({

View File

@ -6,6 +6,7 @@ import { prisma } from '@documenso/prisma';
import { DocumentStatus, SigningStatus } from '@documenso/prisma/client'; import { DocumentStatus, SigningStatus } from '@documenso/prisma/client';
import { insertFieldInPDF } from '../pdf/insert-field-in-pdf'; import { insertFieldInPDF } from '../pdf/insert-field-in-pdf';
import { sendCompletedEmail } from './send-completed-email';
export type SealDocumentOptions = { export type SealDocumentOptions = {
documentId: number; documentId: number;
@ -67,4 +68,6 @@ export const sealDocument = async ({ documentId }: SealDocumentOptions) => {
document: Buffer.from(pdfBytes).toString('base64'), document: Buffer.from(pdfBytes).toString('base64'),
}, },
}); });
await sendCompletedEmail({ documentId });
}; };

View File

@ -0,0 +1,57 @@
import { createElement } from 'react';
import { mailer } from '@documenso/email/mailer';
import { render } from '@documenso/email/render';
import { DocumentCompletedEmailTemplate } from '@documenso/email/templates/document-completed';
import { prisma } from '@documenso/prisma';
export interface SendDocumentOptions {
documentId: number;
}
export const sendCompletedEmail = async ({ documentId }: SendDocumentOptions) => {
const document = await prisma.document.findUnique({
where: {
id: documentId,
},
include: {
Recipient: true,
},
});
if (!document) {
throw new Error('Document not found');
}
if (document.Recipient.length === 0) {
throw new Error('Document has no recipients');
}
await Promise.all([
document.Recipient.map(async (recipient) => {
const { email, name } = recipient;
const assetBaseUrl = process.env.NEXT_PUBLIC_SITE_URL || 'http://localhost:3000';
const template = createElement(DocumentCompletedEmailTemplate, {
documentName: document.title,
assetBaseUrl,
downloadLink: 'https://documenso.com',
});
await mailer.sendMail({
to: {
address: email,
name,
},
from: {
name: process.env.NEXT_PRIVATE_SMTP_FROM_NAME || 'Documenso',
address: process.env.NEXT_PRIVATE_SMTP_FROM_ADDRESS || 'noreply@documenso.com',
},
subject: 'Everyone has signed!',
html: render(template),
text: render(template, { plainText: true }),
});
}),
]);
};