Writing all API-code in your code in the same file is not a great idea. It's easy to merge routers with other routers.
Thanks to TypeScript 4.1 template literal types we can also prefix the procedures without breaking typesafety.
server.ts
ts
const createRouter = () => {
return trpc.router<Context>();
};
const posts = createRouter()
.mutation('create', {
`input: z.object({`
`title: z.string(),`
`}),`
`resolve: ({ input }) => {`
`// ..`
`return {`
`id: 'xxxx',`
`...input,`
`};`
`},`
})
.query('list', {
`resolve() {`
`// ..`
`return [];`
`},`
});
const users = createRouter().query('list', {
resolve() {
`// ..`
`return [];`
},
});
const appRouter = createRouter()
.merge('user.', users) // prefix user procedures with "user."
.merge('post.', posts); // prefix post procedures with "post."
server.ts
ts
const createRouter = () => {
return trpc.router<Context>();
};
const posts = createRouter()
.mutation('create', {
`input: z.object({`
`title: z.string(),`
`}),`
`resolve: ({ input }) => {`
`// ..`
`return {`
`id: 'xxxx',`
`...input,`
`};`
`},`
})
.query('list', {
`resolve() {`
`// ..`
`return [];`
`},`
});
const users = createRouter().query('list', {
resolve() {
`// ..`
`return [];`
},
});
const appRouter = createRouter()
.merge('user.', users) // prefix user procedures with "user."
.merge('post.', posts); // prefix post procedures with "post."