【Next.js】基礎から始めるNext.js API Routes【6Dynamic API Routes】

2022/12/14に公開

【6Dynamic API Routes】

YouTube: https://youtu.be/bcjlbJdVf-k

https://youtu.be/bcjlbJdVf-k

今回は「Dynamic API Routes」を使用して、
個別のユーザーデータの処理についての実装を進めていきます。

pages/api/users/[id].ts
import type { NextApiRequest, NextApiResponse } from 'next'
import { prisma } from '../../../utils/prismaClient'

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

  switch (method) {
    case 'GET':
      const user = await prisma.user.findUnique({
        where: {
          id: Number(query.id),
        },
        select: {
          id: true,
          name: true,
          email: true,
        },
      })
      res.status(200).json(user)
      break

    case 'DELETE':
      const deletedUser = await prisma.user.delete({
        where: {
          id: Number(query.id),
        },
        select: {
          id: true,
        },
      })
      res.status(200).json({ message: `UserID ${deletedUser.id} was deleted` })
      break

    case 'PUT':
      const updateUser = await prisma.user.update({
        where: {
          id: Number(query.id),
        },
        data: {
          email: body.email,
          name: body.name,
        },
        select: {
          id: true,
          name: true,
          email: true,
        },
      })
      res.status(200).json(updateUser)
      break

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

Discussion