Exemplo n.º 1
0
def fulltext_search_recipe(limit=None):
    limit = _parse_limit_parameter(limit, DEFAULT_SEARCH_RESULT_SIZE,
                                   REGULAR_MAX_SEARCH_SIZE)
    user_pk = get_jwt_identity()
    try:
        payload = request.get_json()
        raw_search = set(payload["ingredients"])
        # ingredients, modifiers = parse_ingredients_with_modifiers(payload)
    except (TypeError, ValueError):
        raise InvalidAPIRequest("Could not parse request",
                                status_code=BAD_REQUEST_CODE)
    try:
        register_user_search(user_pk, payload)
        ingredients = [i.strip() for i in raw_search]
        if len(ingredients) < 1:
            raise InvalidAPIRequest("Please enter at least one ingredient",
                                    status_code=BAD_REQUEST_CODE)
        recipes = []
        if len(ingredients) <= 4:
            recipes = create_fulltext_ingredient_search(ingredients,
                                                        limit=limit)
        if len(recipes) <= 0 or len(ingredients) > 4:
            recipes = create_fulltext_ingredient_search(
                [i.strip() for i in raw_search],
                limit=limit,
                op=or_,
                backup_search=True)
        return jsonify(RecipeIngredientFormatter.recipes_to_dict(recipes))
    except Exception as e:
        raise InvalidAPIRequest(str(e), status_code=500)
Exemplo n.º 2
0
def user_favourites(limit=None):
    limit = _parse_limit_parameter(limit, DEFAULT_FAVOURITE_RECIPE_NUMBER,
                                   MAXIMUM_USER_FAVOURITE_NUMBER)
    favourite_recipes = db.session.query(Recipe).filter(
        Recipe.pk.in_(
            db.session.query(FavouriteRecipe.recipe).filter(
                FavouriteRecipe.user == get_jwt_identity()))).limit(
                    limit).all()
    return jsonify(
        RecipeIngredientFormatter.recipes_to_dict(favourite_recipes))
Exemplo n.º 3
0
def business_search_recipe(limit=None):
    limit = _parse_limit_parameter(limit, DEFAULT_SEARCH_RESULT_SIZE,
                                   BUSINESS_MAX_SEARCH_SIZE)
    user_pk = get_jwt_identity()
    try:
        payload = request.get_json()
        ingredients = parse_ingredients(payload)
    except (TypeError, KeyError):
        raise InvalidAPIRequest("Could not parse request",
                                status_code=BAD_REQUEST_CODE)
    register_user_search(user_pk, payload)
    recipes = create_recipe_search_query(ingredients, limit=limit)
    return jsonify(RecipeIngredientFormatter.recipes_to_dict(recipes))
Exemplo n.º 4
0
def get_related_ingredients(ingredient, limit=None):
    limit = _parse_limit_parameter(limit, DEFAULT_RELATED_INGREDIENTS,
                                   MAX_RELATED_INGREDIENTS)
    if not ingredient:
        raise InvalidAPIRequest("Must specify an ingredient",
                                status_code=BAD_REQUEST_CODE)
    related_ingredients = db.session.query(Ingredient.pk, Ingredient.name). \
        join(IngredientRecipe). \
        filter(IngredientRecipe.recipe.in_(
            db.session.query(IngredientRecipe.recipe).\
            filter(IngredientRecipe.ingredient.in_(
                db.session.query(Ingredient.pk).filter(Ingredient.name.like('%{0}%'.format(ingredient)))
            ))
        )). \
        filter(not_(Ingredient.name.like('%{0}%'.format(ingredient)))). \
        group_by(Ingredient.pk, Ingredient.name, IngredientRecipe.ingredient). \
        order_by(desc(func.count(IngredientRecipe.ingredient))). \
        limit(limit)
    return jsonify(
        RecipeIngredientFormatter.ingredients_to_dict(related_ingredients))
Exemplo n.º 5
0
def business_batch_search(limit=None):
    limit = _parse_limit_parameter(limit, DEFAULT_SEARCH_RESULT_SIZE,
                                   BUSINESS_MAX_SEARCH_SIZE)
    user_pk = get_jwt_identity()
    payload = request.get_json()
    recipes = {}
    search_num = 1
    for _, search in payload['searches'].items():
        register_user_search(user_pk, search)
        try:
            ingredients = parse_ingredients(search["ingredients"])
        except (TypeError, KeyError):
            raise InvalidAPIRequest("Error parsing request",
                                    status_code=BAD_REQUEST_CODE)
        recipes[search_num] = create_recipe_search_query(ingredients,
                                                         limit=limit)
    return jsonify({
        "searches": [
            RecipeIngredientFormatter.recipes_to_dict(recipe_lst)
            for recipe_lst in recipes
        ]
    })