refactor(trpc): use ts-pattern for envelope document-data resolution (#3222)

This commit is contained in:
Ephraim Duncan
2026-08-25 18:29:24 +10:00
committed by GitHub
parent 10f2b80025
commit dd08da7ea7
3 changed files with 14 additions and 30 deletions
@@ -8,6 +8,7 @@ import type { ApiRequestMetadata } from '@documenso/lib/universal/extract-reques
import { putPdfFileServerSide } from '@documenso/lib/universal/upload/put-file.server'; import { putPdfFileServerSide } from '@documenso/lib/universal/upload/put-file.server';
import { EnvelopeType } from '@prisma/client'; import { EnvelopeType } from '@prisma/client';
import type { Logger } from 'pino'; import type { Logger } from 'pino';
import { match, P } from 'ts-pattern';
import { insertFormValuesInPdf } from '../../../lib/server-only/pdf/insert-form-values-in-pdf'; import { insertFormValuesInPdf } from '../../../lib/server-only/pdf/insert-form-values-in-pdf';
import { authenticatedProcedure } from '../trpc'; import { authenticatedProcedure } from '../trpc';
@@ -148,19 +149,11 @@ export const createEnvelopeRouteCaller = async ({
accessAuth: recipient.accessAuth, accessAuth: recipient.accessAuth,
actionAuth: recipient.actionAuth, actionAuth: recipient.actionAuth,
fields: recipient.fields?.map((field) => { fields: recipient.fields?.map((field) => {
let documentDataId: string | undefined; const documentDataId = match(field.identifier)
.with(P.string, (title) => envelopeItems.find((item) => item.title === title)?.documentDataId)
if (typeof field.identifier === 'string') { .with(P.number, (index) => envelopeItems.at(index)?.documentDataId)
documentDataId = envelopeItems.find((item) => item.title === field.identifier)?.documentDataId; .with(undefined, () => envelopeItems.at(0)?.documentDataId)
} .exhaustive();
if (typeof field.identifier === 'number') {
documentDataId = envelopeItems.at(field.identifier)?.documentDataId;
}
if (field.identifier === undefined) {
documentDataId = envelopeItems.at(0)?.documentDataId;
}
if (!documentDataId) { if (!documentDataId) {
throw new AppError(AppErrorCode.NOT_FOUND, { throw new AppError(AppErrorCode.NOT_FOUND, {
@@ -39,8 +39,8 @@ export const signEnvelopeFieldRoute = procedure
const field = await prisma.field.findFirst({ const field = await prisma.field.findFirst({
where: { where: {
id: fieldId, id: fieldId,
recipient: { recipient:
...(recipient.role === RecipientRole.ASSISTANT recipient.role === RecipientRole.ASSISTANT
? { ? {
signingStatus: { signingStatus: {
not: SigningStatus.SIGNED, not: SigningStatus.SIGNED,
@@ -52,7 +52,6 @@ export const signEnvelopeFieldRoute = procedure
} }
: { : {
id: recipient.id, id: recipient.id,
}),
}, },
}, },
include: { include: {
@@ -6,6 +6,7 @@ import { createDocumentFromTemplate } from '@documenso/lib/server-only/template/
import { putNormalizedPdfFileServerSide } from '@documenso/lib/universal/upload/put-file.server'; import { putNormalizedPdfFileServerSide } from '@documenso/lib/universal/upload/put-file.server';
import { formatSigningLink } from '@documenso/lib/utils/recipients'; import { formatSigningLink } from '@documenso/lib/utils/recipients';
import { EnvelopeType } from '@prisma/client'; import { EnvelopeType } from '@prisma/client';
import { match, P } from 'ts-pattern';
import { authenticatedProcedure } from '../trpc'; import { authenticatedProcedure } from '../trpc';
import { useEnvelopeMeta, ZUseEnvelopeRequestSchema, ZUseEnvelopeResponseSchema } from './use-envelope.types'; import { useEnvelopeMeta, ZUseEnvelopeRequestSchema, ZUseEnvelopeResponseSchema } from './use-envelope.types';
@@ -87,20 +88,11 @@ export const useEnvelopeRoute = authenticatedProcedure
// Map custom document data using identifiers // Map custom document data using identifiers
const customDocumentDataMapped = customDocumentData?.map((mapping) => { const customDocumentDataMapped = customDocumentData?.map((mapping) => {
let documentDataId: string | undefined;
// Find the uploaded file by identifier // Find the uploaded file by identifier
if (typeof mapping.identifier === 'string') { const documentDataId = match(mapping.identifier)
documentDataId = uploadedFiles.find((file) => file.name === mapping.identifier)?.documentDataId; .with(P.string, (name) => uploadedFiles.find((file) => file.name === name)?.documentDataId)
} .with(P.number, (index) => uploadedFiles.at(index)?.documentDataId)
.exhaustive();
if (typeof mapping.identifier === 'number') {
documentDataId = uploadedFiles.at(mapping.identifier)?.documentDataId;
}
if (mapping.identifier === undefined) {
documentDataId = uploadedFiles.at(0)?.documentDataId;
}
if (!documentDataId) { if (!documentDataId) {
throw new AppError(AppErrorCode.NOT_FOUND, { throw new AppError(AppErrorCode.NOT_FOUND, {