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';
|
'use server';
|
||||||
|
|
||||||
import { getRequiredServerComponentSession } from '@documenso/lib/next-auth/get-server-session';
|
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 { 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';
|
import { TAddSubjectFormSchema } from '@documenso/ui/primitives/document-flow/add-subject.types';
|
||||||
|
|
||||||
export type CompleteDocumentActionInput = TAddSubjectFormSchema & {
|
export type CompleteDocumentActionInput = TAddSubjectFormSchema & {
|
||||||
@@ -13,9 +15,26 @@ export const completeDocument = async ({ documentId, email }: CompleteDocumentAc
|
|||||||
|
|
||||||
const { id: userId } = await getRequiredServerComponentSession();
|
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({
|
await sendDocument({
|
||||||
userId,
|
userId,
|
||||||
documentId,
|
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 { DocumentInviteEmailTemplate } from '@documenso/email/templates/document-invite';
|
||||||
import { prisma } from '@documenso/prisma';
|
import { prisma } from '@documenso/prisma';
|
||||||
import { DocumentStatus, SendStatus } from '@documenso/prisma/client';
|
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;
|
documentId: number;
|
||||||
userId: number;
|
userId: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const sendDocument = async ({ documentId, userId, email }: SendDocumentOptions) => {
|
export const sendDocument = async ({ documentId, userId }: SendDocumentOptions) => {
|
||||||
const customEmail = email;
|
|
||||||
|
|
||||||
const user = await prisma.user.findFirstOrThrow({
|
const user = await prisma.user.findFirstOrThrow({
|
||||||
where: {
|
where: {
|
||||||
id: userId,
|
id: userId,
|
||||||
@@ -28,9 +25,12 @@ export const sendDocument = async ({ documentId, userId, email }: SendDocumentOp
|
|||||||
},
|
},
|
||||||
include: {
|
include: {
|
||||||
Recipient: true,
|
Recipient: true,
|
||||||
|
DocumentMeta: true,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const customEmail = document?.DocumentMeta;
|
||||||
|
|
||||||
if (!document) {
|
if (!document) {
|
||||||
throw new Error('Document not found');
|
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',
|
name: process.env.NEXT_PRIVATE_SMTP_FROM_NAME || 'Documenso',
|
||||||
address: process.env.NEXT_PRIVATE_SMTP_FROM_ADDRESS || 'noreply@documenso.com',
|
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),
|
html: render(template),
|
||||||
text: render(template, { plainText: true }),
|
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