From 53b2ade5bb3292afac41bc012f3f7d0c1686ea66 Mon Sep 17 00:00:00 2001 From: kolaente Date: Mon, 27 Mar 2023 16:22:44 +0200 Subject: [PATCH] feat(projects): return a favorites pseudo project when the user has favorite tasks --- pkg/models/project.go | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/pkg/models/project.go b/pkg/models/project.go index 83ae66b9234..0d7e456941b 100644 --- a/pkg/models/project.go +++ b/pkg/models/project.go @@ -117,15 +117,6 @@ var SharedProjectsPseudoProject = &Project{ Updated: time.Now(), } -// FavoriteProjectsPseudoProject is a pseudo parent project used to hold favorite projects and tasks -var FavoriteProjectsPseudoProject = &Project{ - ID: -2, - Title: "Favorites", - Description: "Favorite projects and tasks.", - Created: time.Now(), - Updated: time.Now(), -} - // SavedFiltersPseudoProject is a pseudo parent project used to hold saved filters var SavedFiltersPseudoProject = &Project{ ID: -3, @@ -137,13 +128,13 @@ var SavedFiltersPseudoProject = &Project{ // FavoritesPseudoProject holds all tasks marked as favorites var FavoritesPseudoProject = Project{ - ID: -1, - Title: "Favorites", - Description: "This project has all tasks marked as favorites.", - ParentProjectID: FavoriteProjectsPseudoProject.ID, - IsFavorite: true, - Created: time.Now(), - Updated: time.Now(), + ID: -1, + Title: "Favorites", + Description: "This project has all tasks marked as favorites.", + IsFavorite: true, + Position: -1, + Created: time.Now(), + Updated: time.Now(), } // ReadAll gets all projects a user has access to @@ -486,6 +477,22 @@ func getRawProjectsForUser(s *xorm.Session, opts *projectOptions) (projects []*P return } + favoriteCount, err := s. + Where(builder.And( + builder.Eq{"user_id": opts.user.ID}, + builder.Eq{"kind": FavoriteKindTask}, + )). + Count(&Favorite{}) + if err != nil { + return + } + + if favoriteCount > 0 { + favoritesProject := &Project{} + *favoritesProject = FavoritesPseudoProject + allProjects = append(allProjects, favoritesProject) + } + if len(allProjects) == 0 { return nil, 0, totalItems, nil }