1. 메뉴
- 기획 의도
- 레스토랑에 해당하는 메뉴를 보여준다.
- 화면
- 코드
def get_restaurants(**kwargs):
restaurant_id = kwargs['restaurant_id']
category_id = kwargs['category_id']
menu = Menu.objects.filter(restaurant=restaurant_id).values(
'restaurant', 'pk', 'name', 'img', 'detail', 'price', 'type',
)
if not menu:
return JsonResponse(
{
"message": "메뉴가 존재하지 않습니다.",
},
status=HTTPStatus.NOT_FOUND,
)
menu = list(menu, )
data = {
'menu': menu,
'category_id': category_id,
}
return JsonResponse(data)
helpers.py에 있는 메뉴 리스트를 구하는 부분이다.
메뉴 테이블에서 필드가 restaurant_id인 메뉴들을 구해온다.
- 테스트 코드
def test_menu_list_api_should_return_datas_on_valid_request(self):
'''
유효한 restaurant id 보낼 경우 데이터 응답
'''
# Given
url = reverse("menu_api:menu_list_api", kwargs={
'category_id': self.category.id,
'restaurant_id': self.restaurant.id,
})
# When
response = self.client.get(url)
# Then
self.assertEqual(response.status_code, HTTPStatus.OK)
- 어려웠던 점
딱히 기억이 안난다. api 호출 후 view에서 적절하고 단순한 ORM 짜서 리턴해주는 것이라서.
- 해결방법
- 느낀점
- 단순한 부분이라 그런지 오히려 템플릿에서 구조 잡는 게 어려웠다..
2. 메뉴 디테일
- 기획 의도
- 메뉴를 클릭하면 상세 메뉴가 나온다.
- 화면
- 코드
class MenuDetailAPIView(LoginRequiredMixin, View):
def get(self, request, *args, **kwargs):
user = request.user
menu_id = kwargs['menu_id']
menu = get_object_or_404(Menu, id=menu_id)
cart = user.cart_set.order_by("-created_time")[0]
try:
data = {
'id': menu.id,
'name': menu.name,
'img': menu.img.url,
'detail': menu.detail,
'price': menu.price,
'cart_id': str(cart.id),
}
return JsonResponse(data)
except ValueError:
return JsonResponse(
{
"message": "메뉴가 존재하지 않습니다.",
},
status=HTTPStatus.NOT_FOUND,
)
url에서 받아온 menu_id 값을 가지고 메뉴에 대한 상세 정보를 출력한다.
- 테스트 코드
def test_menu_detail_page_should_be_open_on_request(self):
'''
메뉴 클릭 시 메뉴에 대한 상세 페이지 열기
'''
# Given
url = reverse("menu:menu_detail", kwargs={
'category_id': self.category.id,
'restaurant_id': self.restaurant.id,
'menu_id': self.menu.id,
})
# When
response = self.client.get(url)
# Then
self.assertEqual(response.status_code, HTTPStatus.OK)
메뉴 디테일 페이지를 요청하면 성공이 떠야한다.
def test_menu_detail_api_should_return_datas_on_valid_request(self):
'''
유효한 menu id 보낼 경우 데이터 응답
'''
# Given
kwargs = {
'category_id': self.category.id,
'restaurant_id': self.restaurant.id,
'menu_id': self.menu.id,
}
self.client.login(username='mike', password='2')
# When
response = self.client.get(reverse("menu_api:menu_detail_api", kwargs=kwargs))
# Then
self.assertEqual(response.status_code, HTTPStatus.OK)
메뉴 디테일 api를 요청하면 성공해야 한다.
- 어려웠던 점
- 없다.
- 해결방법
- 느낀점
- 어느 정도 반복을 해서 할만하다는 생각이 들었던 것 같다.
'인턴 프로젝트' 카테고리의 다른 글
미니 요기요 프로젝트(5) - 레스토랑 구독하기, 구독 중인 레스토랑 (0) | 2019.07.24 |
---|---|
미니 요기요 프로젝트(4) - 날씨별 잘 팔린 메뉴 (0) | 2019.07.24 |
미니 요기요 프로젝트(2) - 레스토랑, 레스토랑 디테일 (0) | 2019.07.23 |
미니 요기요 프로젝트(1) - 카테고리 (0) | 2019.07.23 |
미니 요기요 프로젝트(0) - 개요 (0) | 2019.07.23 |