rembrembdocs

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.

server.ts

ts

// @filename: trpc.ts

import { initTRPC } from '@trpc/server';

const t = initTRPC.create();

export const router = t.router;

export const publicProcedure = t.procedure;

// @filename: routers/_app.ts

import { router } from '../trpc';

import { z } from 'zod';

import { userRouter } from './user';

import { postRouter } from './post';

const appRouter = router({

user: userRouter, // put procedures under "user" namespace

post: postRouter, // put procedures under "post" namespace

});

// You can then access the merged route with

// http://localhost:3000/trpc/<NAMESPACE>.<PROCEDURE>

export type AppRouter = typeof appRouter;

// @filename: routers/post.ts

import { router, publicProcedure } from '../trpc';

import { z } from 'zod';

export const postRouter = router({

create: publicProcedure

`.input(`

  `z.object({`

    `title: z.string(),`

  `}),`

`)`

`.mutation((opts) => {`

  `const { input } = opts;`

           `const input: {     title: string; }`

  `// [...]`

`}),`

list: publicProcedure.query(() => {

`// ...`

`return [];`

}),

});

// @filename: routers/user.ts

import { router, publicProcedure } from '../trpc';

import { z } from 'zod';

export const userRouter = router({

list: publicProcedure.query(() => {

`// [..]`

`return [];`

}),

});

If you prefer having all procedures flat in one single namespace, you can instead use t.mergeRouters

server.ts

ts

// @filename: trpc.ts

import { initTRPC } from '@trpc/server';

const t = initTRPC.create();

export const router = t.router;

export const publicProcedure = t.procedure;

export const mergeRouters = t.mergeRouters;

// @filename: routers/_app.ts

import { router, publicProcedure, mergeRouters } from '../trpc';

import { z } from 'zod';

import { userRouter } from './user';

import { postRouter } from './post';

const appRouter = mergeRouters(userRouter, postRouter)

export type AppRouter = typeof appRouter;

// @filename: routers/post.ts

import { router, publicProcedure } from '../trpc';

import { z } from 'zod';

export const postRouter = router({

postCreate: publicProcedure

`.input(`

  `z.object({`

    `title: z.string(),`

  `}),`

`)`

`.mutation((opts) => {`

  `const { input } = opts;`

           `const input: {     title: string; }`

  `// [...]`

`}),`

postList: publicProcedure.query(() => {

`// ...`

`return [];`

}),

});

// @filename: routers/user.ts

import { router, publicProcedure } from '../trpc';

import { z } from 'zod';

export const userRouter = router({

userList: publicProcedure.query(() => {

`// [..]`

`return [];`

}),

});