메뉴 생성
메뉴 조회
메뉴 수정
메뉴 삭제
메뉴 부분 무사히 완료!
menu.router.js
import Menucontrolleruser from '../../controllers/user/user.restaurants.controller.js';
import Menucontrollerpartner from '../../controllers/partner/menu.controller.js';
import express from 'express';
// Express Router 설정
const menuRouter = express.Router();
// 메뉴 생성
menuRouter.post('/', Menucontrollerpartner.createMenu);
// 유저와 업주 둘다 사용가능한 메뉴조회
menuRouter.get('/:restaurantId', Menucontrollerpartner.getRestaurantMenus);
// 메뉴 수정
menuRouter.patch('/:menuId', Menucontrollerpartner.updateMenu);
// 메뉴 삭제
menuRouter.delete('/:menuId', Menucontrollerpartner.deleteMenu);
export default menuRouter;
menu.repository.js
import { prisma } from '../../utils/prisma/index.js';
class Menurepository {
#orm;
constructor(prisma) {
this.#orm = prisma;
}
// 메뉴 등록(사장님용)
createMenu = async ({ name, price, spicyLevel, restaurantId }) => {
const menu = await this.#orm.menu.create({
data: {
name,
price: Number(price),
spicyLevel: Number(spicyLevel),
restaurantId: Number(restaurantId),
},
});
return menu;
};
// 메뉴 목록 조회(소비자/사장님 공용)
restaurantIdMenu = async ({ restaurantId }) => {
const restaurantIdMenu = await this.#orm.menu.findMany({
where: {
restaurantId: { equals: Number(restaurantId) },
},
});
return restaurantIdMenu;
};
// 메뉴 수정(사장님용)
updateMenu = async ({ menuId, data }) => {
const updateMenu = await this.#orm.menu.update({
where: {
id: Number(menuId),
},
data: {
name: data.name,
price: Number(data.price),
spicyLevel: Number(data.spicyLevel),
restaurantId: Number(data.restaurantId),
},
});
return updateMenu;
};
// 메뉴 삭제(사장님용)
deleteMenu = async ({ menuId }) => {
console.log('메뉴아이디', menuId);
const deleteMenu = await this.#orm.menu.delete({
where: {
id: Number(menuId),
},
});
return deleteMenu;
};
}
export default new Menurepository(prisma);
menu.service.js
import menuRepository from '../../repositories/partner/menu.repository.js';
class Menuservice {
#repository;
constructor(menuRepository) {
this.#repository = menuRepository;
}
createMenu = async ({ name, price, spicyLevel, restaurantId }) => {
if (!name || price === undefined || restaurantId === undefined) {
throw new Error('메뉴 이름, 가격, 레스토랑 ID는 필수입니다.');
}
const menu = this.#repository.createMenu({
name,
price: +price,
spicyLevel: +spicyLevel,
restaurantId: +restaurantId,
});
return menu;
};
// 메뉴 목록 조회(소비자/사장님 공용)
restaurantIdMenu = async ({ restaurantId }) => {
const menus = this.#repository.restaurantIdMenu({
restaurantId: +restaurantId,
});
return menus;
};
updateMenu = async ({ menuId, data }) => {
const menu = this.#repository.updateMenu({
menuId: +menuId,
data,
});
return menu;
};
deleteMenu = async ({ menuId }) => {
const menu = this.#repository.deleteMenu({
menuId: +menuId,
});
return menu;
};
}
export default new Menuservice(menuRepository);
menu.controller.js
import menuService from '../../services/partner/menu.service.js';
class Menucontrollerpartner {
#service;
constructor(menuService) {
this.#service = menuService;
}
// 메뉴 등록(사장님용)
createMenu = async (req, res) => {
try {
const menu = await this.#service.createMenu(req.body);
res.status(201).json(menu);
} catch (error) {
console.error(error.message);
res.status(400).send('메뉴 등록 중 오류가 발생했습니다.');
}
};
// 메뉴 목록 조회(소비자/사장님 공용)
getRestaurantMenus = async (req, res) => {
try {
// console.log(req.params);
const menus = await this.#service.restaurantIdMenu({ restaurantId: req.params.restaurantId });
res.status(200).json(menus);
} catch (error) {
console.error(error.message);
res.status(400).send('메뉴 목록 조회 중 오류가 발생했습니다.');
}
};
// 메뉴 수정(사장님용)
updateMenu = async (req, res) => {
try {
const updatedMenu = await this.#service.updateMenu({
menuId: req.params.menuId,
data: req.body,
});
res.status(200).json(updatedMenu);
} catch (error) {
console.error(error.message);
res.status(400).send('메뉴 수정 중 오류가 발생했습니다.');
}
};
// 메뉴 삭제(사장님용)
deleteMenu = async (req, res) => {
try {
await this.#service.deleteMenu({ menuId: req.params.menuId });
res.status(200).send(`메뉴 ${req.params.menuId}가 삭제되었습니다.`);
} catch (error) {
console.error(error.message);
res.status(400).send('메뉴 삭제 중 오류가 발생했습니다.');
}
};
}
export default new Menucontrollerpartner(menuService);
일단 코드는 작성 완료했는데 검증 부분을 좀 더 채워 넣어야 할 것 같아서 수정해 보는 걸로 진행될 것 같습니다.
createMenu = async ({ name, price, spicyLevel, restaurantId }) => {
const menu = await this.#orm.menu.create({
data: {
name,
price: Number(price),
spicyLevel: Number(spicyLevel),
restaurantId: Number(restaurantId),
},
});
return menu;
};
메뉴가 담고있는 객체를 data가 받아온다는 것 기본적인 구조를 잘 이해하지 못해서 메뉴 수정 부분에서 어려움이 있었던 것.. 너무 아쉽고 왜 못 봤을까 싶었습니다..
updateMenu = async ({ menuId, data }) => {
const updateMenu = await this.#orm.menu.update({
where: {
id: Number(menuId),
},
data: {
name: data.name,
price: Number(data.price),
spicyLevel: Number(data.spicyLevel),
restaurantId: Number(data.restaurantId),
},
});
return updateMenu;
};
잘 수정해서 number로 int로 잘 받아오도록 수정을 완료했고 data를 가져올때 바로 가져오는 것이 아닌 data.name 등등으로 받아온다는 것도 명심해 보도록 하겠습니다.