[pricelist] add serverside filtering for getDrinks

This commit is contained in:
Tim Gröger 2021-11-13 13:23:04 +01:00
parent 26a00ed6a6
commit 8fb74358e7
2 changed files with 22 additions and 2 deletions

View File

@ -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})

View File

@ -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()