728x90
기능 | method | URL | response header | response |
랭킹 조회(매출별) | GET | /api/restaurants/ranking | Content-Type: application/json | 404 {"messege" : "매장 매출 정보가 존재하지 않습니다"} 500 {"messege" : "서버에 문제가 발생했습니다."} 성공 200 "랭킹 10위"{ "data":{{ "id": 1, "name": "맛있는 중국집", "type": "중국집", "image":"http...이미지URL..." "address": "서울특별시 강남구 ...", "phone_number":"070-1234-1234" } ...9개 매장 추가 } |
매장 조회(영역별) | GET | /api/restaurants?type=type type 예시 city = seoul dong = 강남 |
Content-Type: application/json | 404 {"messege" : "선택한 매장의 정보가 존재하지 않습니다"} 500 {"messege" : "서버에 문제가 발생했습니다."} 성공 200 "data":{ "id": 1, "name": "맛있는 중국집", "type": "중국집", "image":"http...이미지URL..." "address": "서울특별시 강남구 ...", "phone_number":"070-1234-1234" } |
매장 전체 조회 | GET | /api/restaurants | Content-Type: application/json | 404 {"messege" : "매장 정보가 존재하지 않습니다"} 500 {"messege" : "서버에 문제가 발생했습니다."} 성공 200 "data":{ "id": 1, "name": "맛있는 중국집", "type": "중국집", "image":"http...이미지URL...” "address": "서울특별시 강남구 ...", "phone_number":"070-1234-1234" } |
매장검색 | GET | /api/restaurants?search=“맛있는” | Content-Type: application/json | 404 {"messege" : "일치하는 매장이 존재하지 않습니다"} 500 {"messege" : "서버에 문제가 발생했습니다."} 성공 200 "data":{ "id": 1, "name": "맛있는 중국집", "type": "중국집", "image":"http...이미지URL...” "address": "서울특별시 강남구 ...", "phone_number":"070-1234-1234" } |
매장 상세조회 | GET | /api/restaurants/:id | Content-Type: application/json | 404 {"messege" : "일치하는 매장이 존재하지 않습니다"} 500 {"messege" : "서버에 문제가 발생했습니다."} 성공 200 "data":{ "id": 1, "name": "맛있는 중국집", "type": "중국집", "image":"http...이미지URL...” "address": "서울특별시 강남구 ...", "phone_number":"070-1234-1234", "menu":{"1번매뉴","2번매뉴","3번매뉴"} } |
prisma 에서 부분 일치하는 값으로 where조건 사용하기
where: {
menu: {
some: {
menuName: {
contains: nameKeyword, // 검색어
mode: 'insensitive', // 대소문자 구분하지 않음
},
},
},
},
prisma 에서 다수의 where조건 사용하기
where: {
menu: {
some: {
OR: [
{
menuName: {
contains: menuKeyword, // 메뉴 이름에 검색어 포함
mode: 'insensitive', // 대소문자 구분하지 않음
},
},
{
content: {
contains: menuKeyword, // 메뉴 소개에 검색어 포함
mode: 'insensitive', // 대소문자 구분하지 않음
},
},
],
},
},
},
url 쿼리 사용하기
const { type } = req.query; // 쿼리
복수 쿼리 사용
// URL 예시
// GET http://localhost:3000/api/restaurants/search?search=맛있는&type=name
// GET http://localhost:3000/api/restaurants/search?search=짜장&type=menu
// GET http://localhost:3000/api/restaurants/search?search=중국집
// getRestaurants.routes.js
// 매장 검색 (이름, 메뉴 포함)
// (쿼리 파라미터 타입 search(종합검색), name(상호명), menu(메뉴,설명명) 사용)
router.get('/search', GetRestaurantsController.searchRestaurants);
// getRestaurants.controller.js
// 매장검색
searchRestaurants = async (req, res) => {
console.log('Controller searchRestaurants');
try {
const { search, type } = req.query; // 쿼리 파라미터로 전달된 search, type 값
if (!search) {
return res.status(400).json({ message: '검색어를 입력해 주세요.' });
}
// 검색 타입에 따른 분기 처리
let restaurants;
if (type === 'name') {
restaurants = await this.#service.searchRestaurantsByName(search);
} else if (type === 'menu') {
restaurants = await this.#service.searchRestaurantsByMenu(search);
} else {
restaurants = await this.#service.searchRestaurantsByNameMenu(search);
}
if (!restaurants || restaurants.length === 0) {
return res
.status(404)
.json({ message: '일치하는 매장 정보가 존재하지 않습니다.' });
}
return res.status(200).json(restaurants);
} catch (error) {
console.error('Error in searchRestaurants:', error);
return res.status(500).json({ message: '서버에 문제가 발생했습니다.' });
}
};
'내일배움 과제 > CH4-2(배달앱)' 카테고리의 다른 글
테스트 중에 막힌 것 250109 (0) | 2025.01.09 |
---|---|
6조 과제 설계 (0) | 2025.01.06 |