diff --git a/src/backend/core/api/filters.py b/src/backend/core/api/filters.py index 713f48da..d051b73f 100644 --- a/src/backend/core/api/filters.py +++ b/src/backend/core/api/filters.py @@ -15,10 +15,13 @@ class DocumentFilter(django_filters.FilterSet): is_creator_me = django_filters.BooleanFilter( method="filter_is_creator_me", label=_("Creator is me") ) + is_favorite = django_filters.BooleanFilter( + method="filter_is_favorite", label=_("Favorite") + ) class Meta: model = models.Document - fields = ["is_creator_me"] + fields = ["is_creator_me", "is_favorite"] # pylint: disable=unused-argument def filter_is_creator_me(self, queryset, name, value): @@ -47,9 +50,9 @@ class DocumentFilter(django_filters.FilterSet): Filter documents based on whether they are marked as favorite by the current user. Example: - - /api/v1.0/documents/?favorite=true + - /api/v1.0/documents/?is_favorite=true → Filters documents marked as favorite by the logged-in user - - /api/v1.0/documents/?favorite=false + - /api/v1.0/documents/?is_favorite=false → Filters documents not marked as favorite by the logged-in user """ user = self.request.user @@ -57,7 +60,7 @@ class DocumentFilter(django_filters.FilterSet): if not user.is_authenticated: return queryset - clause = "filter" if value else "exclude" - return getattr(queryset, clause)( - favorited_by_users__user=user, favorited_by_users__is_favorite=True - ) + if value: + return queryset.filter(favorited_by_users__user=user) + + return queryset.exclude(favorited_by_users__user=user) diff --git a/src/backend/core/api/viewsets.py b/src/backend/core/api/viewsets.py index 1f2a9e10..be605381 100644 --- a/src/backend/core/api/viewsets.py +++ b/src/backend/core/api/viewsets.py @@ -324,10 +324,12 @@ class DocumentViewSet( Filtering: - `is_creator_me=true`: Returns documents created by the current user. - `is_creator_me=false`: Returns documents created by other users. + - `is_favorite=true`: Returns documents marked as favorite by the current user + - `is_favorite=false`: Returns documents not marked as favorite by the current user Example Usage: - - GET /api/v1.0/documents/?creator=me - - GET /api/v1.0/documents/?creator=other + - GET /api/v1.0/documents/?is_creator_me=true&is_favorite=true + - GET /api/v1.0/documents/?is_creator_me=false """ filter_backends = [filters.DjangoFilterBackend, drf_filters.OrderingFilter] diff --git a/src/backend/core/tests/documents/test_api_documents_list.py b/src/backend/core/tests/documents/test_api_documents_list.py index 5ddbe9e0..20cef11f 100644 --- a/src/backend/core/tests/documents/test_api_documents_list.py +++ b/src/backend/core/tests/documents/test_api_documents_list.py @@ -433,7 +433,6 @@ def test_api_documents_list_filter_is_creator_me_invalid(): results = response.json()["results"] assert len(results) == 5 - # Filters: is_favorite @@ -496,7 +495,6 @@ def test_api_documents_list_filter_is_favorite_invalid(): results = response.json()["results"] assert len(results) == 5 - # Filters: link_reach