mirror of
https://github.com/documenso/documenso.git
synced 2025-11-10 04:22:32 +10:00
feat: persist document metadata in database for a specific user
This commit is contained in:
committed by
Mythie
parent
9521d1df4c
commit
a3baf2ed8b
@ -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,
|
||||
});
|
||||
};
|
||||
|
||||
@ -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,
|
||||
},
|
||||
});
|
||||
}
|
||||
};
|
||||
@ -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 }),
|
||||
});
|
||||
|
||||
21
packages/lib/server-only/document/update-document.ts
Normal file
21
packages/lib/server-only/document/update-document.ts
Normal 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,
|
||||
},
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user