🦁
【Next.js】基礎から始めるNext.js API Routes【8Refactoring2】
【8Refactoring2】
YouTube: https://youtu.be/Z6Kp7LzdqpA
今回も引き続きリファクタリングを進めていきます。
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
}
export const prismaGetUserById = async (id: string | string[] | undefined) => {
const user = await prisma.user.findUnique({
where: {
id: Number(id),
},
select: {
id: true,
name: true,
email: true,
posts: true,
},
})
return user
}
export const prismaDeleteUser = async (id: string | string[] | undefined) => {
const deletedUser = await prisma.user.delete({
where: {
id: Number(id),
},
select: {
id: true,
},
})
return deletedUser
}
export const prismaUpdateUser = async (
id: string | string[] | undefined,
body: Pick<User, 'email' | 'name'>
) => {
const updateUser = await prisma.user.update({
where: {
id: Number(id),
},
data: {
email: body.email,
name: body.name,
},
select: {
id: true,
name: true,
email: true,
},
})
return updateUser
}
pages/api/users/[id].ts
import type { NextApiRequest, NextApiResponse } from 'next'
import {
prismaDeleteUser,
prismaGetUserById,
prismaUpdateUser,
} from '../../../lib/prisma/user'
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
const { method, body, query } = req
switch (method) {
case 'GET':
const user = await prismaGetUserById(query.id)
res.status(200).json(user)
break
case 'DELETE':
const deletedUser = await prismaDeleteUser(query.id)
res.status(200).json({ message: `UserID ${deletedUser.id} was deleted` })
break
case 'PUT':
const updateUser = await prismaUpdateUser(query.id, body)
res.status(200).json(updateUser)
break
default:
res.setHeader('Allow', ['GET', 'DELETE', 'PUT'])
res.status(405).end(`${method} method not allowed`)
}
}
Discussion