feat: add get documents and templates by IDs routes with validation schemas

This commit is contained in:
Catalin Pit
2025-11-20 15:55:53 +02:00
parent 29baa3e0d1
commit 45b2f51462
6 changed files with 257 additions and 0 deletions

View File

@ -0,0 +1,74 @@
import { EnvelopeType } from '@prisma/client';
import { getEnvelopeWhereInput } from '@documenso/lib/server-only/envelope/get-envelope-by-id';
import { mapEnvelopesToDocumentMany } from '@documenso/lib/utils/document';
import { mapDocumentIdToSecondaryId } from '@documenso/lib/utils/envelope';
import { prisma } from '@documenso/prisma';
import { authenticatedProcedure } from '../trpc';
import {
ZGetDocumentsByIdsRequestSchema,
ZGetDocumentsByIdsResponseSchema,
getDocumentsByIdsMeta,
} from './get-documents-by-ids.types';
export const getDocumentsByIdsRoute = authenticatedProcedure
.meta(getDocumentsByIdsMeta)
.input(ZGetDocumentsByIdsRequestSchema)
.output(ZGetDocumentsByIdsResponseSchema)
.mutation(async ({ input, ctx }) => {
const { teamId, user } = ctx;
const { documentIds } = input;
ctx.logger.info({
input: {
documentIds,
},
});
const { envelopeWhereInput } = await getEnvelopeWhereInput({
id: {
type: 'documentId',
id: documentIds[0],
},
userId: user.id,
teamId,
type: EnvelopeType.DOCUMENT,
});
const envelopeOrInput = envelopeWhereInput.OR!;
const secondaryIds = documentIds.map((documentId) => mapDocumentIdToSecondaryId(documentId));
const envelopes = await prisma.envelope.findMany({
where: {
type: EnvelopeType.DOCUMENT,
secondaryId: {
in: secondaryIds,
},
OR: envelopeOrInput,
},
include: {
user: {
select: {
id: true,
name: true,
email: true,
},
},
recipients: {
orderBy: {
id: 'asc',
},
},
team: {
select: {
id: true,
url: true,
},
},
},
});
return envelopes.map((envelope) => mapEnvelopesToDocumentMany(envelope));
});

View File

@ -0,0 +1,24 @@
import { z } from 'zod';
import { ZDocumentManySchema } from '@documenso/lib/types/document';
import type { TrpcRouteMeta } from '../trpc';
export const getDocumentsByIdsMeta: TrpcRouteMeta = {
openapi: {
method: 'POST',
path: '/document/get-many',
summary: 'Get multiple documents',
description: 'Retrieve multiple documents by their IDs',
tags: ['Document'],
},
};
export const ZGetDocumentsByIdsRequestSchema = z.object({
documentIds: z.array(z.number()).min(1),
});
export const ZGetDocumentsByIdsResponseSchema = z.array(ZDocumentManySchema);
export type TGetDocumentsByIdsRequest = z.infer<typeof ZGetDocumentsByIdsRequestSchema>;
export type TGetDocumentsByIdsResponse = z.infer<typeof ZGetDocumentsByIdsResponseSchema>;

View File

@ -19,6 +19,7 @@ import { findDocumentsInternalRoute } from './find-documents-internal';
import { findInboxRoute } from './find-inbox';
import { getDocumentRoute } from './get-document';
import { getDocumentByTokenRoute } from './get-document-by-token';
import { getDocumentsByIdsRoute } from './get-documents-by-ids';
import { getInboxCountRoute } from './get-inbox-count';
import { redistributeDocumentRoute } from './redistribute-document';
import { searchDocumentRoute } from './search-document';
@ -27,6 +28,7 @@ import { updateDocumentRoute } from './update-document';
export const documentRouter = router({
get: getDocumentRoute,
getMany: getDocumentsByIdsRoute,
find: findDocumentsRoute,
create: createDocumentRoute,
update: updateDocumentRoute,