🐷

Prisma + tRPCのAPIの返り値の型をZodスキーマに変換する

2023/07/17に公開

多くのサンプルでは、createTRPCRouterを使わない例であった。
createTRPCRouterはcreate-t3-stack@latestの最初のテンプレートで使用されていた。
tRPCのバージョンアップによるもの?かで、ネット上の過去のサンプルコードと違い、困ったため共有する。

import { createTRPCRouter, publicProcedure } from "@/server/api/trpc";
import { z } from "zod";

export const TodoSchema = z.object({
  id: z.string(),
  title: z.string(),
  createdAt: z.date(),
  updatedAt: z.date(),
});
export const TodoListSchema = z.array(TodoSchema);

export const todoRouter = createTRPCRouter({
  getAll: publicProcedure.query(async ({ ctx }) => {
    const todoList = await ctx.prisma.todo.findMany();
    const resultZodParse = TodoListSchema.parse(todoList);
    return resultZodParse;
  }),
})

Discussion