From dc27f39393ae5bd4ffff2fc8f2f421d957e49c44 Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Mon, 26 Apr 2021 17:21:14 +0200 Subject: [PATCH] added recently viewed to new search --- cookbook/helper/recipe_search.py | 16 +++++++++++++--- cookbook/views/api.py | 2 +- .../apps/RecipeSearchView/RecipeSearchView.vue | 14 +++++++++++--- vue/src/components/RecipeCard.vue | 6 ++++-- vue/src/locales/en.json | 1 + 5 files changed, 30 insertions(+), 9 deletions(-) diff --git a/cookbook/helper/recipe_search.py b/cookbook/helper/recipe_search.py index 821184f5..ca2707eb 100644 --- a/cookbook/helper/recipe_search.py +++ b/cookbook/helper/recipe_search.py @@ -3,10 +3,11 @@ from functools import reduce from django.contrib.postgres.search import TrigramSimilarity from django.db.models import Q +from cookbook.models import ViewLog from recipes import settings -def search_recipes(queryset, params): +def search_recipes(request, queryset, params): search_string = params.get('query', '') search_keywords = params.getlist('keywords', []) search_foods = params.getlist('foods', []) @@ -18,9 +19,18 @@ def search_recipes(queryset, params): search_internal = params.get('internal', None) search_random = params.get('random', False) + search_last_viewed = int(params.get('last_viewed', 0)) - if settings.DATABASES['default']['ENGINE'] in ['django.db.backends.postgresql_psycopg2', 'django.db.backends.postgresql']: - queryset = queryset.annotate(similarity=TrigramSimilarity('name', search_string), ).filter(Q(similarity__gt=0.1) | Q(name__unaccent__icontains=search_string)).order_by('-similarity') + if search_last_viewed > 0: + last_viewed_recipes = ViewLog.objects.filter(created_by=request.user, space=request.space).order_by( + '-created_at').values('recipe').distinct().all()[:search_last_viewed] + + return queryset.filter(pk__in=last_viewed_recipes) + + if settings.DATABASES['default']['ENGINE'] in ['django.db.backends.postgresql_psycopg2', + 'django.db.backends.postgresql']: + queryset = queryset.annotate(similarity=TrigramSimilarity('name', search_string), ).filter( + Q(similarity__gt=0.1) | Q(name__unaccent__icontains=search_string)).order_by('-similarity') else: queryset = queryset.filter(name__icontains=search_string) diff --git a/cookbook/views/api.py b/cookbook/views/api.py index bf934d68..140cb265 100644 --- a/cookbook/views/api.py +++ b/cookbook/views/api.py @@ -351,7 +351,7 @@ class RecipeViewSet(viewsets.ModelViewSet): if not (share and self.detail): self.queryset = self.queryset.filter(space=self.request.space) - self.queryset = search_recipes(self.queryset, self.request.GET) + self.queryset = search_recipes(self.request, self.queryset, self.request.GET) return super().get_queryset() diff --git a/vue/src/apps/RecipeSearchView/RecipeSearchView.vue b/vue/src/apps/RecipeSearchView/RecipeSearchView.vue index 485094a9..2484444b 100644 --- a/vue/src/apps/RecipeSearchView/RecipeSearchView.vue +++ b/vue/src/apps/RecipeSearchView/RecipeSearchView.vue @@ -138,12 +138,15 @@
-