feat: add find envelopes endpoint

This commit is contained in:
Ephraim Atta-Duncan
2025-11-25 14:18:35 +00:00
parent 6ae672c16b
commit 4d29a66ba1
6 changed files with 527 additions and 1 deletions

View File

@@ -0,0 +1,56 @@
import { findEnvelopes } from '@documenso/lib/server-only/envelope/find-envelopes';
import { authenticatedProcedure } from '../trpc';
import {
ZFindEnvelopesRequestSchema,
ZFindEnvelopesResponseSchema,
findEnvelopesMeta,
} from './find-envelopes.types';
export const findEnvelopesRoute = authenticatedProcedure
.meta(findEnvelopesMeta)
.input(ZFindEnvelopesRequestSchema)
.output(ZFindEnvelopesResponseSchema)
.query(async ({ input, ctx }) => {
const { user, teamId } = ctx;
const {
query,
type,
templateId,
page,
perPage,
orderByDirection,
orderByColumn,
source,
status,
folderId,
} = input;
ctx.logger.info({
input: {
query,
type,
templateId,
source,
status,
folderId,
page,
perPage,
},
});
return await findEnvelopes({
userId: user.id,
teamId,
type,
templateId,
query,
source,
status,
page,
perPage,
folderId,
orderBy: orderByColumn ? { column: orderByColumn, direction: orderByDirection } : undefined,
});
});

View File

@@ -0,0 +1,46 @@
import { DocumentSource, DocumentStatus, EnvelopeType } from '@prisma/client';
import { z } from 'zod';
import { ZEnvelopeSchema } from '@documenso/lib/types/envelope';
import { ZFindResultResponse, ZFindSearchParamsSchema } from '@documenso/lib/types/search-params';
import type { TrpcRouteMeta } from '../trpc';
export const findEnvelopesMeta: TrpcRouteMeta = {
openapi: {
method: 'GET',
path: '/envelope',
summary: 'Find envelopes',
description: 'Find envelopes based on search criteria',
tags: ['Envelope'],
},
};
export const ZFindEnvelopesRequestSchema = ZFindSearchParamsSchema.extend({
type: z
.nativeEnum(EnvelopeType)
.describe('Filter envelopes by type (DOCUMENT or TEMPLATE).')
.optional(),
templateId: z
.number()
.describe('Filter envelopes by the template ID used to create it.')
.optional(),
source: z
.nativeEnum(DocumentSource)
.describe('Filter envelopes by how it was created.')
.optional(),
status: z
.nativeEnum(DocumentStatus)
.describe('Filter envelopes by the current status.')
.optional(),
folderId: z.string().describe('Filter envelopes by folder ID.').optional(),
orderByColumn: z.enum(['createdAt']).optional(),
orderByDirection: z.enum(['asc', 'desc']).describe('Sort direction.').default('desc'),
});
export const ZFindEnvelopesResponseSchema = ZFindResultResponse.extend({
data: ZEnvelopeSchema.array(),
});
export type TFindEnvelopesRequest = z.infer<typeof ZFindEnvelopesRequestSchema>;
export type TFindEnvelopesResponse = z.infer<typeof ZFindEnvelopesResponseSchema>;

View File

@@ -18,6 +18,7 @@ import { createEnvelopeRecipientsRoute } from './envelope-recipients/create-enve
import { deleteEnvelopeRecipientRoute } from './envelope-recipients/delete-envelope-recipient';
import { getEnvelopeRecipientRoute } from './envelope-recipients/get-envelope-recipient';
import { updateEnvelopeRecipientsRoute } from './envelope-recipients/update-envelope-recipients';
import { findEnvelopesRoute } from './find-envelopes';
import { getEnvelopeRoute } from './get-envelope';
import { getEnvelopeItemsRoute } from './get-envelope-items';
import { getEnvelopeItemsByTokenRoute } from './get-envelope-items-by-token';
@@ -65,6 +66,7 @@ export const envelopeRouter = router({
set: setEnvelopeFieldsRoute,
sign: signEnvelopeFieldRoute,
},
find: findEnvelopesRoute,
get: getEnvelopeRoute,
create: createEnvelopeRoute,
use: useEnvelopeRoute,