Example #1
0
def validate_sign_up_sign_in_fields(request):
    email = request.data.get('email')
    if email is None or len(email) == 0:
        raise HttpException(errors.EMAIL_IS_REQUIRED)
    password = request.data.get('password')
    if email is None or len(email) == 0:
        raise HttpException(errors.PASSWORD_IS_REQUIRED)
    return (email, password)
Example #2
0
 def post(self, request):
     try:
         validator.validate_admin(request)
         name = validator.validate_menu_name_field(request)
         if Menu.objects.filter(name=name).count() > 0:
             raise HttpException(errors.MENU_IS_DUPLICATED)
         Menu.objects.create(name=name)
         response = Response({'data': 'OK'}, status=status.HTTP_201_CREATED)
         response['Cache-Control'] = 'max-age=0, must-revalidate'
         return response
     except HttpException as e:
         return e.get_response()
     except Exception as e:
         Logger.log_exception(e)
         return HttpException(errors.INTERNAL_SERVER_ERROR).get_response()
Example #3
0
def sigin(request):
    try:
        email, password = validator.validate_sign_up_sign_in_fields(request)
        user = authenticate(username=email, password=password)
        if user is None:
            raise HttpException(errors.AUTHENTICATION_FAILURE)
        user_logged_in.send(sender=user.__class__,
                            request=request, user=user)
        response = Response({'data': auth.create_jwt(user)})
        response['Cache-Control'] = 'max-age=0, must-revalidate'
        return response
    except HttpException as e:
        return e.get_response()
    except Exception as e:
        Logger.log_exception(e)
        return HttpException(errors.INTERNAL_SERVER_ERROR).get_response()
Example #4
0
def validate_order_date(request):
    timestamp = request.data.get('orderDate')
    order_date = get_date_from_timestamp(timestamp)
    start_date = timezone.make_aware(datetime.now()).date()
    end_date = start_date + timedelta(days=ORDER_DATE_DELTA)
    if order_date < start_date or order_date > end_date:
        raise HttpException(errors.INVALID_ORDER_DATE)
    return order_date
Example #5
0
 def put(self, request, id):
     try:
         validator.validate_admin(request)
         name = validator.validate_menu_name_field(request)
         if Menu.objects.filter(~Q(id=id), name=name).count() > 0:
             raise HttpException(errors.MENU_IS_DUPLICATED)
         menu = self.get_object(id)
         menu.name = name
         menu.save()
         response = Response({'data': view_models.get_menu(menu)})
         response['Cache-Control'] = 'max-age=0, must-revalidate'
         return response
     except HttpException as e:
         return e.get_response()
     except Exception as e:
         Logger.log_exception(e)
         return HttpException(errors.INTERNAL_SERVER_ERROR).get_response()
Example #6
0
def get_order(request, timestamp):
    try:
        order_date = validator.get_date_from_timestamp(timestamp)
        user_id = request.user.id
        orders = Order.objects.select_related('menu').filter(
            order_date=order_date, user_id=user_id)
        if len(orders) > 1:
            raise HttpException(errors.INVALID_ORDER)
        data = None if len(orders) == 0 else view_models.get_order(orders[0])
        response = Response({'data': data})
        response['Cache-Control'] = 'max-age=8'
        return response
    except HttpException as e:
        return e.get_response()
    except Exception as e:
        Logger.log_exception(e)
        return HttpException(errors.INTERNAL_SERVER_ERROR).get_response()
Example #7
0
def sigup(request):
    try:
        email, password = validator.validate_sign_up_sign_in_fields(request)
        if User.objects.filter(username=email).count() > 0:
            raise HttpException(errors.USER_IS_DUPLICATED)
        user = User.objects.create_user(
            username=email, email=email, password=password)
        user_logged_in.send(sender=user.__class__, request=request, user=user)
        data = {'data': auth.create_jwt(user)}
        response = Response(data, status=status.HTTP_201_CREATED)
        response['Cache-Control'] = 'max-age=0, must-revalidate'
        return response
    except HttpException as e:
        return e.get_response()
    except Exception as e:
        Logger.log_exception(e)
        return HttpException(errors.INTERNAL_SERVER_ERROR).get_response()
Example #8
0
 def get(self, request):
     try:
         menu_list = Menu.objects.all()
         response = Response({'data': view_models.get_menu_list(menu_list)})
         response['Cache-Control'] = 'max-age=8'
         return response
     except Exception as e:
         Logger.log_exception(e)
         return HttpException(errors.INTERNAL_SERVER_ERROR).get_response()
Example #9
0
def make_order(request):
    try:
        order_date = validator.validate_order_date(request)
        menu_id = validator.validate_menu_id(request)
        user_id = request.user.id
        if Menu.objects.filter(id=menu_id).count() == 0:
            raise HttpException(errors.INVALID_MENU_ID)
        with transaction.atomic():
            Order.objects.filter(order_date=order_date,
                                 user_id=user_id, menu_id=menu_id).delete()
            order = Order.objects.create(
                order_date=order_date, user_id=user_id, menu_id=menu_id)
        response = Response({'data': view_models.get_order(order)})
        response['Cache-Control'] = 'max-age=0, must-revalidate'
        return response
    except HttpException as e:
        return e.get_response()
    except Exception as e:
        Logger.log_exception(e)
        return HttpException(errors.INTERNAL_SERVER_ERROR).get_response()
Example #10
0
 def get(self, request, id):
     try:
         menu = self.get_object(id)
         response = Response({'data': view_models.get_menu(menu)})
         response['Cache-Control'] = 'max-age=8'
         return response
     except HttpException as e:
         return e.get_response()
     except Exception as e:
         Logger.log_exception(e)
         return HttpException(errors.INTERNAL_SERVER_ERROR).get_response()
Example #11
0
 def delete(self, request, id):
     try:
         validator.validate_admin(request)
         menu = self.get_object(id)
         menu.delete()
         response = Response({'data': 'OK'})
         response['Cache-Control'] = 'max-age=0, must-revalidate'
         return response
     except HttpException as e:
         return e.get_response()
     except Exception as e:
         Logger.log_exception(e)
         return HttpException(errors.INTERNAL_SERVER_ERROR).get_response()
Example #12
0
def get_order_summary(request, timestamp):
    try:
        order_date = validator.get_date_from_timestamp(timestamp)
        orders = Order.objects.filter(order_date=order_date).values(
            'menu__id', 'menu__name').annotate(
                total=Count('menu__id')).order_by('total')
        response = Response({'data': view_models.get_order_summary(orders)})
        response['Cache-Control'] = 'max-age=8'
        return response
    except HttpException as e:
        return e.get_response()
    except Exception as e:
        Logger.log_exception(e)
        return HttpException(errors.INTERNAL_SERVER_ERROR).get_response()
Example #13
0
def validate_admin(request):
    if not request.user.is_staff:
        raise HttpException(errors.INVALID_ADMIN)
Example #14
0
def validate_menu_id(request):
    try:
        menu_id = request.data.get('menuId')
        return int(menu_id)
    except Exception:
        raise HttpException(errors.INVALID_MENU_ID)
Example #15
0
def get_date_from_timestamp(timestamp):
    try:
        date = datetime.fromtimestamp(int(timestamp))
        return timezone.make_aware(date).date()
    except Exception:
        raise HttpException(errors.INVALID_DATE)
Example #16
0
def validate_menu_name_field(request):
    name = request.data.get('name')
    if name is None or len(name) == 0:
        raise HttpException(errors.NAME_IS_REQUIRED)
    return name
Example #17
0
def catch_all(request, path):
    response = HttpException(errors.RESOURCE_NOT_FOUND).get_response()
    response['Cache-Control'] = 'max-age=600'
    return response
Example #18
0
 def get_object(self, id):
     try:
         menu = Menu.objects.get(id=id)
         return menu
     except Exception:
         raise HttpException(errors.INVALID_MENU_ID)