ChatJS tRPC patterns
Backend
- Add feature routers under
apps/chat/trpc/routers/*.router.tsand register them inapps/chat/trpc/routers/_app.ts. - Use
protectedProcedurefor authenticated operations. - Validate inputs with Zod and verify ownership before mutations.
- Keep database access in
apps/chat/lib/db/queries.ts.
React queries
Use useTRPC() with TanStack Query:
const trpc = useTRPC();
const query = useQuery({
...trpc.feature.list.queryOptions(),
enabled: Boolean(condition),
});
For mutations, use generated mutation options and invalidate related keys after success:
const trpc = useTRPC();
const queryClient = useQueryClient();
const mutation = useMutation(
trpc.feature.update.mutationOptions({
onSuccess: () =>
queryClient.invalidateQueries({
queryKey: trpc.feature.list.queryKey(),
}),
})
);
Handle loading and error states in the consumer.