feat: persist document metadata in database for a specific user

This commit is contained in:
Ephraim Atta-Duncan
2023-09-20 09:51:04 +00:00
committed by Mythie
parent 9521d1df4c
commit a3baf2ed8b
4 changed files with 85 additions and 7 deletions

View File

@ -1,7 +1,9 @@
'use server';
import { getRequiredServerComponentSession } from '@documenso/lib/next-auth/get-server-session';
import { createDocumentMeta } from '@documenso/lib/server-only/document-meta/create-document-meta';
import { sendDocument } from '@documenso/lib/server-only/document/send-document';
import { updateDocument } from '@documenso/lib/server-only/document/update-document';
import { TAddSubjectFormSchema } from '@documenso/ui/primitives/document-flow/add-subject.types';
export type CompleteDocumentActionInput = TAddSubjectFormSchema & {
@ -13,9 +15,26 @@ export const completeDocument = async ({ documentId, email }: CompleteDocumentAc
const { id: userId } = await getRequiredServerComponentSession();
const createDocumentMetaResponse = await createDocumentMeta({
emailBody: email.message,
emailSubject: email.subject,
});
if (createDocumentMetaResponse) {
await updateDocument({
documentId,
data: {
DocumentMeta: {
connect: {
id: createDocumentMetaResponse.id,
},
},
},
});
}
await sendDocument({
userId,
documentId,
email,
});
};

View File

@ -0,0 +1,36 @@
'use server';
import { prisma } from '@documenso/prisma';
export type CreateDocumentMetaOptions = {
emailSubject: string;
emailBody: string;
};
export const createDocumentMeta = async ({
emailBody,
emailSubject,
}: CreateDocumentMetaOptions) => {
const documentMeta = await prisma.documentMeta.findFirst();
if (!documentMeta) {
return await prisma.documentMeta.create({
data: {
customEmailBody: emailBody,
customEmailSubject: emailSubject,
},
});
}
if (emailBody && emailSubject) {
return await prisma.documentMeta.update({
where: {
id: documentMeta.id,
},
data: {
customEmailBody: emailBody,
customEmailSubject: emailSubject,
},
});
}
};

View File

@ -5,16 +5,13 @@ import { render } from '@documenso/email/render';
import { DocumentInviteEmailTemplate } from '@documenso/email/templates/document-invite';
import { prisma } from '@documenso/prisma';
import { DocumentStatus, SendStatus } from '@documenso/prisma/client';
import { TAddSubjectFormSchema } from '@documenso/ui/primitives/document-flow/add-subject.types';
export type SendDocumentOptions = TAddSubjectFormSchema & {
export type SendDocumentOptions = {
documentId: number;
userId: number;
};
export const sendDocument = async ({ documentId, userId, email }: SendDocumentOptions) => {
const customEmail = email;
export const sendDocument = async ({ documentId, userId }: SendDocumentOptions) => {
const user = await prisma.user.findFirstOrThrow({
where: {
id: userId,
@ -28,9 +25,12 @@ export const sendDocument = async ({ documentId, userId, email }: SendDocumentOp
},
include: {
Recipient: true,
DocumentMeta: true,
},
});
const customEmail = document?.DocumentMeta;
if (!document) {
throw new Error('Document not found');
}
@ -71,7 +71,9 @@ export const sendDocument = async ({ documentId, userId, email }: SendDocumentOp
name: process.env.NEXT_PRIVATE_SMTP_FROM_NAME || 'Documenso',
address: process.env.NEXT_PRIVATE_SMTP_FROM_ADDRESS || 'noreply@documenso.com',
},
subject: customEmail.subject ? customEmail.subject : 'Please sign this document',
subject: customEmail?.customEmailSubject
? customEmail.customEmailSubject
: 'Please sign this document',
html: render(template),
text: render(template, { plainText: true }),
});

View File

@ -0,0 +1,21 @@
'use server';
import { Prisma } from '@prisma/client';
import { prisma } from '@documenso/prisma';
export type UpdateDocumentOptions = {
documentId: number;
data: Prisma.DocumentUpdateInput;
};
export const updateDocument = async ({ documentId, data }: UpdateDocumentOptions) => {
return await prisma.document.update({
where: {
id: documentId,
},
data: {
...data,
},
});
};