From e240d1fdace9fbcd36e44c5c6ca756deef99838b Mon Sep 17 00:00:00 2001 From: Carl Tibule Date: Sat, 4 Mar 2023 22:23:22 -0600 Subject: [PATCH] Fixed issue with Bookmarks with no tags not being returned --- YABA.Models/Bookmark.cs | 3 ++ YABA.Models/Tag.cs | 5 +++- YABA.Service/BookmarkService.cs | 37 +++++++++++++----------- yaba-web/src/views/bookmarksListView.jsx | 2 +- 4 files changed, 28 insertions(+), 19 deletions(-) diff --git a/YABA.Models/Bookmark.cs b/YABA.Models/Bookmark.cs index 86e7f92..7869d84 100644 --- a/YABA.Models/Bookmark.cs +++ b/YABA.Models/Bookmark.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using YABA.Common.Interfaces; @@ -21,5 +22,7 @@ namespace YABA.Models [ForeignKey(nameof(User))] public int UserId { get; set; } public virtual User User { get; set; } + + public ICollection BookmarkTags { get; set; } } } diff --git a/YABA.Models/Tag.cs b/YABA.Models/Tag.cs index 64c328d..4fe39f4 100644 --- a/YABA.Models/Tag.cs +++ b/YABA.Models/Tag.cs @@ -1,4 +1,5 @@ -using System.ComponentModel.DataAnnotations; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using YABA.Models.Interfaces; @@ -14,5 +15,7 @@ namespace YABA.Models [ForeignKey(nameof(User))] public int UserId { get; set; } public virtual User User { get; set; } + + public virtual ICollection TagBookmarks { get; set; } } } diff --git a/YABA.Service/BookmarkService.cs b/YABA.Service/BookmarkService.cs index a4ec7af..cb85dbe 100644 --- a/YABA.Service/BookmarkService.cs +++ b/YABA.Service/BookmarkService.cs @@ -2,6 +2,7 @@ using HtmlAgilityPack; using Microsoft.AspNetCore.Http; using Microsoft.EntityFrameworkCore; +using System; using System.Collections.Generic; using System.Linq; using System.Net; @@ -40,26 +41,28 @@ namespace YABA.Service public IEnumerable GetAll(bool showHidden = false) { var currentUserId = GetCurrentUserId(); - - var bookmarkTagsLookup = _roContext.BookmarkTags - .Include(x => x.Bookmark) - .Include(x => x.Tag) - .Where(x => x.Bookmark.UserId == currentUserId && x.Tag.UserId == currentUserId) - .ToList() - .GroupBy(x => x.BookmarkId) - .ToDictionary(k => k.Key, v => new KeyValuePair>(v.FirstOrDefault()?.Bookmark, v.Select(x => x.Tag).ToList())); var userBookmarkDTOs = new List(); - foreach (var bookmarkTag in bookmarkTagsLookup) + + var showHiddenCondition = new Func(b => b.IsHidden || b.BookmarkTags.Where(x => x.Tag.UserId == currentUserId).Any(x => x.Tag.IsHidden)); + var showNotHiddenCondition = new Func(b => !b.IsHidden && b.BookmarkTags.Where(x => x.Tag.UserId == currentUserId).All(bt => !bt.Tag.IsHidden)); + + var filteredBookmarks = _roContext.Bookmarks + .Include(b => b.BookmarkTags) + .ThenInclude(bt => bt.Tag) + .Where(b => b.UserId == currentUserId) + .Where(showHidden ? showHiddenCondition : showNotHiddenCondition) + .ToList(); + + foreach(var bookmark in filteredBookmarks) { - if ((showHidden && (bookmarkTag.Value.Key.IsHidden || bookmarkTag.Value.Value.Any(x => x.IsHidden))) // If showHidden = true, only add Bookmarks that are marked Hidden OR when any of its Tags are marked Hidden - || (!showHidden && !bookmarkTag.Value.Key.IsHidden && bookmarkTag.Value.Value.All(x => !x.IsHidden))) // If showHidden = false, only add when Bookmark is not marked Hidden AND when any of its Tags are not marked as Hidden - { - var bookmarkDTO = _mapper.Map(bookmarkTag.Value.Key); - var bookmarkTagDTOs = _mapper.Map>(bookmarkTag.Value.Value); - bookmarkDTO.Tags.AddRange(bookmarkTagDTOs); - userBookmarkDTOs.Add(bookmarkDTO); - } + var isBookmarkHidden = bookmark.IsHidden; + var bookmarkDTO = _mapper.Map(bookmark); + + var bookmarkTags = bookmark.BookmarkTags.Select(x => x.Tag); + bookmarkDTO.Tags = _mapper.Map>(bookmarkTags); + + userBookmarkDTOs.Add(bookmarkDTO); } return userBookmarkDTOs; diff --git a/yaba-web/src/views/bookmarksListView.jsx b/yaba-web/src/views/bookmarksListView.jsx index 2d08a20..1cddf0a 100644 --- a/yaba-web/src/views/bookmarksListView.jsx +++ b/yaba-web/src/views/bookmarksListView.jsx @@ -328,7 +328,7 @@ export function BookmarksListView(props) { } - { getTagGroups(getNotSelectedTags()).length <= 0 &&
No Tags gound
} + { getTagGroups(getNotSelectedTags()).length <= 0 &&
No Tags found
} { getTagGroups(getNotSelectedTags()).map((group) => { return
-- 2.49.0