본문 바로가기

인턴 프로젝트

미니 요기요 프로젝트(3) - 메뉴, 메뉴 디테일

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를 요청하면 성공해야 한다.

  • 어려웠던 점
    • 없다.
  • 해결방법
  • 느낀점
    • 어느 정도 반복을 해서 할만하다는 생각이 들었던 것 같다.