Skill: trpc-patterns
trpc/routers/*.router.ts - Create feature-specific routers (e.g., chat.router.ts, vote.router.ts)useTRPC() hook from @/trpc/reactuseMutation, useQuery, useQueryClient from @tanstack/react-queryconst trpc = useTRPC();
const { data, isLoading, refetch } = useQuery({
...trpc.router.procedure.queryOptions(),
enabled: !!condition,
});
const trpc = useTRPC();
const queryClient = useQueryClient();
const mutation = useMutation(
trpc.router.procedure.mutationOptions({
onSuccess: () => {
// Invalidate related queries
queryClient.invalidateQueries({
queryKey: trpc.router.relatedQuery.queryKey(),
});
},
})
);
// Usage
await mutation.mutateAsync({ input: data });
import { createTRPCRouter, protectedProcedure } from '@/trpc/init';
import { z } from 'zod';
export const featureRouter = createTRPCRouter({
queryName: protectedProcedure.query(async ({ ctx }) => {
return await dbFunction({ userId: ctx.user.id });
}),
mutationName: protectedProcedure
.input(z.object({ /* validation schema */ }))
.mutation(async ({ ctx, input }) => {
// Verify permissions/ownership
// Call database function
return await dbFunction(input);
}),
});
protectedProcedure for authenticated routes