menu라우터 생성!
import { Prisma } from '@prisma/client';
import express from 'express';
const menuRouter = express.Router();
// 메뉴 등록(사장님용)
menuRouter.post('/partners/menu', async (req, res) => {
// 등록 로직 작성
const { name, price, spicyLevel, restaurantId } = req.body;
if (!name && !price && !restaurantId) {
return res.status(500).send('값이 전부다 입력되지 않았습니다.');
}
try {
// Prisma를 사용하여 'menu' 테이블에 새로운 메뉴를 생성합니다.
const menu = await prisma.menu.create({
data: {
name, // 메뉴 이름
price, // 가격
spicyLevel, // 매운맛 레벨 (옵션)
restaurantId, // 레스토랑 ID (필수)
},
});
// 생성된 메뉴 데이터를 클라이언트에 반환합니다.
res.status(200).json(menu);
} catch (error) {
// 데이터베이스 작업 중 오류가 발생하면 에러를 로그로 출력하고, 클라이언트에 에러 메시지를 반환합니다.
console.error(error);
res.status(500).send('메뉴 등록 중 오류가 발생했습니다.');
}
});
// 메뉴 목록(소비자용)
menuRouter.get('/users/restaurants/:restaurantId/menu', async (req, res) => {
// 소비자용 메뉴 목록 로직 작성
const { restaurantId } = req.params;
try {
// 'restaurantId'에 해당하는 모든 메뉴를 데이터베이스에서 조회합니다.
const menus = await prisma.menu.findMany({
where: { restaurantId }, //+restaurantId
});
// 조회된 메뉴 목록을 JSON 형식으로 클라이언트에 반환합니다.
res.status(200).json(menus);
} catch (error) {
// 데이터베이스 작업 중 오류가 발생하면 에러를 로그로 출력하고, 클라이언트에 에러 메시지를 반환합니다.
console.error(error);
res.status(500).send('메뉴를 불러오는 중 오류가 발생했습니다.');
}
});
// 메뉴 목록(사장님용)
menuRouter.get('/partners/restaurants/:restaurantId/menu', async (req, res) => {
const { restaurantId } = req.params; // URL 경로에서 'restaurantId'를 추출합니다.
try {
// 'restaurantId'에 해당하는 모든 메뉴를 데이터베이스에서 조회합니다.
const menus = await prisma.menu.findMany({
where: { restaurantId },
});
// 조회된 메뉴 목록을 JSON 형식으로 클라이언트에 반환합니다.
res.status(201).json(menus);
} catch (error) {
// 데이터베이스 작업 중 오류가 발생하면 에러를 로그로 출력하고, 클라이언트에 에러 메시지를 반환합니다.
console.error(error);
res.status(500).send('메뉴를 불러오는 중 오류가 발생했습니다.');
}
});
// 메뉴 수정(사장님용)
menuRouter.patch('/partners/menu/:menuId', async (req, res) => {
const { menuId } = req.params; // URL 경로에서 'menuId'를 추출합니다.
const { name, price, spicyLevel } = req.body; // 요청 본문에서 수정할 데이터를 추출합니다.
// 메뉴나 가격이 없을때의 경우만들기
if (!name || price === undefined) {
return res.status(500).send('메뉴 이름과 가격은 필수 입력 사항입니다.');
}
// price가 0보다 작은 경우 만들기
if (price < 0) {
return res.status(500).send('가격은 0보다 작을 수 없습니다.');
}
try {
// Prisma를 사용하여 'menuId'에 해당하는 메뉴 데이터를 업데이트합니다.
const updatedMenu = await prisma.menu.update({
where: { menuId },
data: { name, price, spicyLevel }, // 수정할 데이터를 전달합니다.
});
// 수정된 메뉴 데이터를 클라이언트에 반환합니다.
res.status(201).json(updatedMenu);
} catch (error) {
// 데이터베이스 작업 중 오류가 발생하면 에러를 로그로 출력하고, 클라이언트에 에러 메시지를 반환합니다.
console.error(error);
res.status(500).send('메뉴 수정 중 오류가 발생했습니다.');
}
});
// 메뉴 삭제(사장님용)
menuRouter.delete('/partners/menu/:menuId', async (req, res) => {
const { menuId } = req.params; // URL 경로에서 'menuId'를 추출합니다.
try {
// Prisma를 사용하여 'menuId'에 해당하는 메뉴 데이터를 삭제합니다.
await prisma.menu.delete({
where: { menuId }, // 삭제 대상 메뉴의 ID를 지정합니다.
});
// 삭제 성공 메시지를 클라이언트에 반환합니다.
res.status(200).send(`메뉴 ${menuId}가 삭제되었습니다.`);
} catch (error) {
// 데이터베이스 작업 중 오류가 발생하면 에러를 로그로 출력하고, 클라이언트에 에러 메시지를 반환합니다.
console.error(error);
res.status(500).send('메뉴 삭제 중 오류가 발생했습니다.');
}
});
export default menuRouter; // 작성된 라우터를 외부에서 사용할 수 있도록 내보냅니다.
라우터를 완성했으니까 한번 이제 이걸 3Layer로 나눠보고 jest를 사용하는게 다음 목표입니다!
주석을 더 자세하게 작성해서 다음에도 헷갈리지 않게 하는게 목표였는데 나름 잘 작성된것 같아서 만족합니다.