Files
documenso/packages/trpc/server/document-router/get-document-by-token.ts
David Nguyen 7f09ba72f4 feat: add envelopes (#2025)
This PR is handles the changes required to support envelopes. The new
envelope editor/signing page will be hidden during release.

The core changes here is to migrate the documents and templates model to
a centralized envelopes model.

Even though Documents and Templates are removed, from the user
perspective they will still exist as we remap envelopes to documents and
templates.
2025-10-14 21:56:36 +11:00

59 lines
1.4 KiB
TypeScript

import { EnvelopeType } from '@prisma/client';
import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error';
import { prisma } from '@documenso/prisma';
import { authenticatedProcedure } from '../trpc';
import {
ZGetDocumentByTokenRequestSchema,
ZGetDocumentByTokenResponseSchema,
} from './get-document-by-token.types';
export const getDocumentByTokenRoute = authenticatedProcedure
.input(ZGetDocumentByTokenRequestSchema)
.output(ZGetDocumentByTokenResponseSchema)
.query(async ({ input, ctx }) => {
const { token } = input;
const envelope = await prisma.envelope.findFirst({
where: {
type: EnvelopeType.DOCUMENT,
recipients: {
some: {
token,
email: ctx.user.email,
},
},
},
include: {
envelopeItems: {
include: {
documentData: true,
},
},
},
});
const firstDocumentData = envelope?.envelopeItems[0].documentData;
if (!envelope || !firstDocumentData) {
throw new AppError(AppErrorCode.NOT_FOUND, {
message: 'Document not found',
});
}
if (envelope.envelopeItems.length !== 1) {
throw new AppError(AppErrorCode.INVALID_REQUEST, {
message: 'This endpoint does not support multiple items',
});
}
ctx.logger.info({
documentId: envelope.id,
});
return {
documentData: firstDocumentData,
};
});