feat: rework command search (#3109)

This commit is contained in:
David Nguyen
2026-07-23 13:16:44 +09:00
committed by GitHub
parent 54befb5962
commit c02dfaba1a
11 changed files with 2064 additions and 233 deletions
@@ -0,0 +1,15 @@
import { adminGlobalSearch } from '@documenso/lib/server-only/admin/admin-global-search';
import { adminProcedure } from '../trpc';
import { ZAdminSearchRequestSchema, ZAdminSearchResponseSchema } from './admin-search.types';
export const adminSearchRoute = adminProcedure
.input(ZAdminSearchRequestSchema)
.output(ZAdminSearchResponseSchema)
.query(async ({ input }) => {
const { query } = input;
const groups = await adminGlobalSearch({ query });
return { groups };
});
@@ -0,0 +1,37 @@
import { z } from 'zod';
export const ZAdminSearchResultTypeSchema = z.enum([
'document',
'user',
'organisation',
'team',
'recipient',
'subscription',
]);
export const ZAdminSearchResultSchema = z.object({
label: z.string(),
sublabel: z.string().optional(),
path: z.string(),
value: z.string(),
});
export const ADMIN_SEARCH_MAX_QUERY_LENGTH = 100;
export const ZAdminSearchRequestSchema = z.object({
query: z.string().trim().min(1).max(ADMIN_SEARCH_MAX_QUERY_LENGTH),
});
export const ZAdminSearchResponseSchema = z.object({
groups: z.array(
z.object({
type: ZAdminSearchResultTypeSchema,
results: ZAdminSearchResultSchema.array(),
}),
),
});
export type TAdminSearchResultType = z.infer<typeof ZAdminSearchResultTypeSchema>;
export type TAdminSearchResult = z.infer<typeof ZAdminSearchResultSchema>;
export type TAdminSearchRequest = z.infer<typeof ZAdminSearchRequestSchema>;
export type TAdminSearchResponse = z.infer<typeof ZAdminSearchResponseSchema>;
@@ -1,4 +1,5 @@
import { router } from '../trpc';
import { adminSearchRoute } from './admin-search';
import { createAdminOrganisationRoute } from './create-admin-organisation';
import { createStripeCustomerRoute } from './create-stripe-customer';
import { createSubscriptionClaimRoute } from './create-subscription-claim';
@@ -118,5 +119,6 @@ export const adminRouter = router({
teamMember: {
delete: deleteAdminTeamMemberRoute,
},
search: adminSearchRoute,
updateSiteSetting: updateSiteSettingRoute,
});