From 1244e4263e2df0b6218f78f40cf167187163b303 Mon Sep 17 00:00:00 2001 From: Fesaa <77553571+Fesaa@users.noreply.github.com> Date: Sun, 9 Mar 2025 18:38:08 +0000 Subject: [PATCH] Fix reading lists not respecting age ratings (#3590) --- API/Data/Repositories/ReadingListRepository.cs | 10 ++++++++-- API/Extensions/AppUserExtensions.cs | 10 ++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/API/Data/Repositories/ReadingListRepository.cs b/API/Data/Repositories/ReadingListRepository.cs index b2cc5d007..23c9b2fa2 100644 --- a/API/Data/Repositories/ReadingListRepository.cs +++ b/API/Data/Repositories/ReadingListRepository.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using API.Data.Misc; using API.DTOs; using API.DTOs.ReadingLists; using API.Entities; @@ -185,10 +186,11 @@ public class ReadingListRepository : IReadingListRepository public async Task> GetReadingListDtosForUserAsync(int userId, bool includePromoted, UserParams userParams, bool sortByLastModified = true) { - var userAgeRating = (await _context.AppUser.SingleAsync(u => u.Id == userId)).AgeRestriction; + var user = await _context.AppUser.FirstAsync(u => u.Id == userId); var query = _context.ReadingList .Where(l => l.AppUserId == userId || (includePromoted && l.Promoted )) - .Where(l => l.AgeRating >= userAgeRating); + .RestrictAgainstAgeRestriction(user.GetAgeRestriction()); + query = sortByLastModified ? query.OrderByDescending(l => l.LastModified) : query.OrderBy(l => l.NormalizedTitle); var finalQuery = query.ProjectTo(_mapper.ConfigurationProvider) @@ -199,8 +201,10 @@ public class ReadingListRepository : IReadingListRepository public async Task> GetReadingListDtosForSeriesAndUserAsync(int userId, int seriesId, bool includePromoted) { + var user = await _context.AppUser.FirstAsync(u => u.Id == userId); var query = _context.ReadingList .Where(l => l.AppUserId == userId || (includePromoted && l.Promoted )) + .RestrictAgainstAgeRestriction(user.GetAgeRestriction()) .Where(l => l.Items.Any(i => i.SeriesId == seriesId)) .AsSplitQuery() .OrderBy(l => l.Title) @@ -212,8 +216,10 @@ public class ReadingListRepository : IReadingListRepository public async Task> GetReadingListDtosForChapterAndUserAsync(int userId, int chapterId, bool includePromoted) { + var user = await _context.AppUser.FirstAsync(u => u.Id == userId); var query = _context.ReadingList .Where(l => l.AppUserId == userId || (includePromoted && l.Promoted )) + .RestrictAgainstAgeRestriction(user.GetAgeRestriction()) .Where(l => l.Items.Any(i => i.ChapterId == chapterId)) .AsSplitQuery() .OrderBy(l => l.Title) diff --git a/API/Extensions/AppUserExtensions.cs b/API/Extensions/AppUserExtensions.cs index 07b348c2d..be3d2c064 100644 --- a/API/Extensions/AppUserExtensions.cs +++ b/API/Extensions/AppUserExtensions.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Linq; +using API.Data.Misc; using API.Entities; using API.Helpers; @@ -44,4 +45,13 @@ public static class AppUserExtensions OrderableHelper.ReorderItems(user.SideNavStreams); } + + public static AgeRestriction GetAgeRestriction(this AppUser user) + { + return new AgeRestriction() + { + AgeRating = user.AgeRestriction, + IncludeUnknowns = user.AgeRestrictionIncludeUnknowns, + }; + } }