Files
documenso/packages/lib/server-only/field/remove-signed-field-with-token.ts
2023-11-06 13:01:09 +11:00

60 lines
1.3 KiB
TypeScript

'use server';
import { prisma } from '@documenso/prisma';
import { DocumentStatus, SigningStatus } from '@documenso/prisma/client';
export type RemovedSignedFieldWithTokenOptions = {
token: string;
fieldId: number;
};
export const removeSignedFieldWithToken = async ({
token,
fieldId,
}: RemovedSignedFieldWithTokenOptions) => {
const field = await prisma.field.findFirstOrThrow({
where: {
id: fieldId,
Recipient: {
token,
},
},
include: {
Document: true,
Recipient: true,
},
});
const { Document: document, Recipient: recipient } = field;
if (document.status === DocumentStatus.COMPLETED) {
throw new Error(`Document ${document.id} has already been completed`);
}
if (recipient?.signingStatus === SigningStatus.SIGNED) {
throw new Error(`Recipient ${recipient.id} has already signed`);
}
// Unreachable code based on the above query but we need to satisfy TypeScript
if (field.recipientId === null) {
throw new Error(`Field ${fieldId} has no recipientId`);
}
await Promise.all([
prisma.field.update({
where: {
id: field.id,
},
data: {
customText: '',
inserted: false,
},
}),
prisma.signature.deleteMany({
where: {
fieldId: field.id,
},
}),
]);
};