fix: timeout issues

This commit is contained in:
David Nguyen
2023-09-20 15:30:57 +10:00
committed by Mythie
parent 34232c79e5
commit db1d6478a1

View File

@ -89,77 +89,83 @@ export const createSinglePlayerDocument = async (
const pdfBytes = await doc.save(); const pdfBytes = await doc.save();
const documentToken = await prisma.$transaction(async (tx) => { const documentToken = await prisma.$transaction(
const documentToken = nanoid(); async (tx) => {
const documentToken = nanoid();
// Fetch service user who will be the owner of the document. // Fetch service user who will be the owner of the document.
const serviceUser = await tx.user.findFirstOrThrow({ const serviceUser = await tx.user.findFirstOrThrow({
where: { where: {
email: SERVICE_USER_EMAIL, email: SERVICE_USER_EMAIL,
}, },
}); });
const documentDataBytes = Buffer.from(pdfBytes).toString('base64'); const documentDataBytes = Buffer.from(pdfBytes).toString('base64');
const { id: documentDataId } = await tx.documentData.create({ const { id: documentDataId } = await tx.documentData.create({
data: { data: {
type: DocumentDataType.BYTES_64, type: DocumentDataType.BYTES_64,
data: documentDataBytes, data: documentDataBytes,
initialData: documentDataBytes, initialData: documentDataBytes,
}, },
}); });
// Create document. // Create document.
const document = await tx.document.create({ const document = await tx.document.create({
data: { data: {
title: documentName, title: documentName,
status: DocumentStatus.COMPLETED, status: DocumentStatus.COMPLETED,
documentDataId, documentDataId,
userId: serviceUser.id, userId: serviceUser.id,
createdAt, createdAt,
}, },
}); });
// Create recipient. // Create recipient.
const recipient = await tx.recipient.create({ const recipient = await tx.recipient.create({
data: { data: {
documentId: document.id, documentId: document.id,
name: signer.name, name: signer.name,
email: signer.email, email: signer.email,
token: documentToken, token: documentToken,
signedAt: createdAt, signedAt: createdAt,
readStatus: ReadStatus.OPENED, readStatus: ReadStatus.OPENED,
signingStatus: SigningStatus.SIGNED, signingStatus: SigningStatus.SIGNED,
sendStatus: SendStatus.SENT, sendStatus: SendStatus.SENT,
}, },
}); });
// Create fields and signatures. // Create fields and signatures.
await Promise.all( await Promise.all(
fields.map(async (field) => { fields.map(async (field) => {
const insertedField = await tx.field.create({ const insertedField = await tx.field.create({
data: {
documentId: document.id,
recipientId: recipient.id,
...mapField(field, signer),
},
});
if (field.type === FieldType.SIGNATURE || field.type === FieldType.FREE_SIGNATURE) {
await tx.signature.create({
data: { data: {
fieldId: insertedField.id, documentId: document.id,
signatureImageAsBase64,
typedSignature,
recipientId: recipient.id, recipientId: recipient.id,
...mapField(field, signer),
}, },
}); });
}
}),
);
return documentToken; if (field.type === FieldType.SIGNATURE || field.type === FieldType.FREE_SIGNATURE) {
}); await tx.signature.create({
data: {
fieldId: insertedField.id,
signatureImageAsBase64,
typedSignature,
recipientId: recipient.id,
},
});
}
}),
);
return documentToken;
},
{
maxWait: 5000,
timeout: 30000,
},
);
// Todo: Handle `downloadLink` // Todo: Handle `downloadLink`
const template = createElement(DocumentSelfSignedEmailTemplate, { const template = createElement(DocumentSelfSignedEmailTemplate, {