From 8fb74358e7d69048e2e95bd15ab25b1d5cc7e19f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Gr=C3=B6ger?= Date: Sat, 13 Nov 2021 13:23:04 +0100 Subject: [PATCH] [pricelist] add serverside filtering for getDrinks --- flaschengeist/plugins/pricelist/__init__.py | 6 +++++- .../plugins/pricelist/pricelist_controller.py | 18 +++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) 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()