diff --git a/flaschengeist/plugins/pricelist/__init__.py b/flaschengeist/plugins/pricelist/__init__.py index 67c92db..3e4c71b 100644 --- a/flaschengeist/plugins/pricelist/__init__.py +++ b/flaschengeist/plugins/pricelist/__init__.py @@ -218,6 +218,8 @@ def get_drinks(identifier=None): else: limit = request.args.get("limit") offset = request.args.get("offset") + search_name = request.args.get("search_name") + search_key = request.args.get("search_key") try: if limit is not None: limit = int(limit) @@ -225,7 +227,9 @@ def get_drinks(identifier=None): offset = int(offset) except ValueError: raise BadRequest - drinks, count = pricelist_controller.get_drinks(public=public, limit=limit, offset=offset) + drinks, count = pricelist_controller.get_drinks( + public=public, limit=limit, offset=offset, search_name=search_name, search_key=search_key + ) logger.debug(f"GET drink {drinks}, {count}") # return jsonify({"drinks": drinks, "count": count}) return jsonify({"drinks": drinks, "count": count}) diff --git a/flaschengeist/plugins/pricelist/pricelist_controller.py b/flaschengeist/plugins/pricelist/pricelist_controller.py index 6ea9b87..5f8154c 100644 --- a/flaschengeist/plugins/pricelist/pricelist_controller.py +++ b/flaschengeist/plugins/pricelist/pricelist_controller.py @@ -131,12 +131,28 @@ def _create_public_drink(drink): return None -def get_drinks(name=None, public=False, limit=None, offset=None): +def get_drinks(name=None, public=False, limit=None, offset=None, search_name=None, search_key=None): count = None if name: query = Drink.query.filter(Drink.name.contains(name)) else: query = Drink.query + if search_name: + if search_key == "name": + query = query.filter(Drink.name.contains(search_name)) + elif search_key == "article_id": + query = query.filter(Drink.article_id.contains(search_name)) + elif search_key == "drink_type": + query = query.filter(Drink.type.has(DrinkType.name.contains(search_name))) + elif search_key == "tags": + query = query.filter(Drink.tags.any(Tag.name.contains(search_name))) + else: + query = query.filter( + (Drink.name.contains(search_name)) + | (Drink.article_id.contains(search_name)) + | (Drink.type.has(DrinkType.name.contains(search_name))) + | (Drink.tags.any(Tag.name.contains(search_name))) + ) if limit is not None: count = query.count()