From 2c6701b4b33c5d2343efa4bb3e9e1cba1ef4918c Mon Sep 17 00:00:00 2001 From: viktorstrate Date: Tue, 26 Jan 2021 14:27:43 +0100 Subject: [PATCH] Fix filtering favorites --- api/graphql/resolvers/album.go | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/api/graphql/resolvers/album.go b/api/graphql/resolvers/album.go index b6a6a82b..826d6748 100644 --- a/api/graphql/resolvers/album.go +++ b/api/graphql/resolvers/album.go @@ -39,7 +39,12 @@ func (r *queryResolver) MyAlbums(ctx context.Context, filter *models.Filter, onl subQuery := r.Database.Model(&models.Media{}).Where("album_id = albums.id") if onlyWithFavorites != nil && *onlyWithFavorites == true { - subQuery = subQuery.Where("favorite = 1") + favoritesSubquery := r.Database. + Model(&models.UserMediaData{UserID: user.ID}). + Where("user_media_data.media_id = media.id"). + Where("user_media_data.favorite = 1") + + subQuery = subQuery.Where("EXISTS (?)", favoritesSubquery) } query = query.Where("EXISTS (?)", subQuery) @@ -95,7 +100,16 @@ func (r *albumResolver) Media(ctx context.Context, album *models.Album, filter * Where("media.id IN (?)", r.Database.Model(&models.MediaURL{}).Select("media_urls.media_id").Where("media_urls.media_id = media.id")) if onlyFavorites != nil && *onlyFavorites == true { - query = query.Where("media.favorite = 1") + user := auth.UserFromContext(ctx) + if user == nil { + return nil, errors.New("cannot get favorite media without being authorized") + } + + favoriteQuery := r.Database.Model(&models.UserMediaData{ + UserID: user.ID, + }).Where("user_media_data.media_id = media.id").Where("user_media_data.favorite = 1") + + query = query.Where("EXISTS (?)", favoriteQuery) } query = filter.FormatSQL(query)