From 7eae73b3b38d6d9d1928d9c7eae8b7b851863cd5 Mon Sep 17 00:00:00 2001 From: kolaente Date: Mon, 7 Sep 2020 17:27:47 +0200 Subject: [PATCH] Add getting saved filters as pseudo namespace --- pkg/models/namespace.go | 25 +++++++++++++++++++++++++ pkg/models/namespace_test.go | 2 +- pkg/models/saved_filters.go | 16 ++++++++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/pkg/models/namespace.go b/pkg/models/namespace.go index 5529d5367..20e816872 100644 --- a/pkg/models/namespace.go +++ b/pkg/models/namespace.go @@ -369,6 +369,31 @@ func (n *Namespace) ReadAll(a web.Auth, search string, page int, perPage int) (r ///////////////// // Saved Filters + savedFilters, err := getSavedFiltersForUser(a) + if err != nil { + return nil, 0, 0, err + } + + if len(savedFilters) > 0 { + savedFiltersPseudoNamespace := SavedFiltersPseudoNamespace + savedFiltersPseudoNamespace.Owner = doer + namespaces[savedFiltersPseudoNamespace.ID] = &NamespaceWithLists{ + Namespace: savedFiltersPseudoNamespace, + Lists: make([]*List, 0, len(savedFilters)), + } + + for _, filter := range savedFilters { + namespaces[savedFiltersPseudoNamespace.ID].Lists = append(namespaces[savedFiltersPseudoNamespace.ID].Lists, &List{ + ID: getListIDFromSavedFilterID(filter.ID), + Title: filter.Title, + Description: filter.Description, + Created: filter.Created, + Updated: filter.Updated, + Owner: doer, + }) + } + } + ////////////////////// // Put it all together all := make([]*NamespaceWithLists, 0, len(namespaces)) diff --git a/pkg/models/namespace_test.go b/pkg/models/namespace_test.go index 7afcac578..de434a8bb 100644 --- a/pkg/models/namespace_test.go +++ b/pkg/models/namespace_test.go @@ -142,8 +142,8 @@ func TestNamespace_ReadAll(t *testing.T) { t.Run("normal", func(t *testing.T) { n := &Namespace{} nn, _, _, err := n.ReadAll(user1, "", 1, -1) - namespaces := nn.([]*NamespaceWithLists) assert.NoError(t, err) + namespaces := nn.([]*NamespaceWithLists) assert.NotNil(t, namespaces) assert.Len(t, namespaces, 10) // Total of 10 including shared & favorites assert.Equal(t, int64(-2), namespaces[0].ID) // The first one should be the one with favorites diff --git a/pkg/models/saved_filters.go b/pkg/models/saved_filters.go index 483f0ef95..f65a81403 100644 --- a/pkg/models/saved_filters.go +++ b/pkg/models/saved_filters.go @@ -68,6 +68,22 @@ func getSavedFilterIDFromListID(listID int64) (filterID int64) { return } +func getListIDFromSavedFilterID(filterID int64) (listID int64) { + // Since both ways work the same way, we can just call the other function here. + // Might change in the future though. + return getSavedFilterIDFromListID(filterID) +} + +func getSavedFiltersForUser(auth web.Auth) (filters []*SavedFilter, err error) { + // Link shares can't view or modify saved filters, therefore we can error out right away + if _, is := auth.(*LinkSharing); is { + return nil, ErrSavedFilterNotAvailableForLinkShare{LinkShareID: auth.GetID()} + } + + err = x.Where("owner_id = ?", auth.GetID()).Find(filters) + return +} + // Create creates a new saved filter // @Summary Creates a new saved filter // @Description Creates a new saved filter