🐷

【Next.js】基礎から始めるNext.js API Routes【7Refactoring1】

2022/12/15に公開

【7Refactoring1】

YouTube: https://youtu.be/XOppEfG8hXw

https://youtu.be/XOppEfG8hXw

今回はswitch文の内部のコードをリファクタリングして、
コードの見通しを良くします。

まずは、フォルダの一番上の階層に「lib」というフォルダを作成して、
さらに内部に「prisma」というフォルダを作成します。
こちらに「user.ts」を作成します。

lib/prisma/users.ts
import { prisma } from '../../utils/prismaClient'
import { User } from '@prisma/client'

export const prismaGetUsers = async () => {
  const users = await prisma.user.findMany({
    select: {
      id: true,
      name: true,
      email: true,
    },
  })
  return users
}

export const prismaCreateUser = async (
  body: Omit<User, 'id' | 'createdAt' | 'updatedAt'>
) => {
  const createdUser = await prisma.user.create({
    data: {
      email: body.email,
      name: body.name,
      password: body.password,
    },
    select: {
      id: true,
      name: true,
      email: true,
    },
  })
  return createdUser
}

上記のファイルが作成できましたら、
prismaでデータを処理する部分のメソッドを
上記で作成したメソッドに変更します。

pages/api/users/index.ts
import type { NextApiRequest, NextApiResponse } from 'next'
import { prismaCreateUser, prismaGetUsers } from '../../../lib/prisma/user'

export default async function handler(
  req: NextApiRequest,
  res: NextApiResponse
) {
  const { method, body } = req

  switch (method) {
    case 'GET':
      const users = await prismaGetUsers()
      res.status(200).json(users)
      break

    case 'POST':
      const createdUser = await prismaCreateUser(body)
      res.status(200).json(createdUser)
      break

    default:
      res.setHeader('Allow', ['GET', 'POST'])
      res.status(405).end(`${method} method not allowed`)
  }
}

Discussion