From 98dabdd9462384353389a6834b9e71a3e40330a2 Mon Sep 17 00:00:00 2001 From: crupest Date: Fri, 21 Feb 2020 22:50:23 +0800 Subject: Add visibility query filter in get timelines api. --- Timeline/Services/TimelineService.cs | 22 +++++++++++++++++----- Timeline/Services/UserTokenManager.cs | 3 +-- 2 files changed, 18 insertions(+), 7 deletions(-) (limited to 'Timeline/Services') diff --git a/Timeline/Services/TimelineService.cs b/Timeline/Services/TimelineService.cs index 7afc0512..76acc7d7 100644 --- a/Timeline/Services/TimelineService.cs +++ b/Timeline/Services/TimelineService.cs @@ -251,11 +251,12 @@ namespace Timeline.Services /// Get all timelines including personal timelines. /// /// Filter timelines related (own or is a member) to specific user. + /// Filter timelines with given visibility. If null or empty, all visibilities are returned. Duplicate value are ignored. /// The list of timelines. /// /// If user with related user id does not exist, empty list will be returned. /// - Task> GetTimelines(TimelineUserRelationship? relate = null); + Task> GetTimelines(TimelineUserRelationship? relate = null, List? visibility = null); /// /// Create a timeline. @@ -647,13 +648,24 @@ namespace Timeline.Services } } - public async Task> GetTimelines(TimelineUserRelationship? relate = null) + public async Task> GetTimelines(TimelineUserRelationship? relate = null, List? visibility = null) { List entities; + IQueryable ApplyTimelineVisibilityFilter(IQueryable query) + { + if (visibility != null && visibility.Count != 0) + { + return query.Where(t => visibility.Contains(t.Visibility)); + } + return query; + } + + bool allVisibilities = visibility == null || visibility.Count == 0; + if (relate == null) { - entities = await Database.Timelines.Include(t => t.Members).ToListAsync(); + entities = await ApplyTimelineVisibilityFilter(Database.Timelines).Include(t => t.Members).ToListAsync(); } else { @@ -661,12 +673,12 @@ namespace Timeline.Services if ((relate.Type & TimelineUserRelationshipType.Own) != 0) { - entities.AddRange(await Database.Timelines.Where(t => t.OwnerId == relate.UserId && t.Name != null).Include(t => t.Members).ToListAsync()); + entities.AddRange(await ApplyTimelineVisibilityFilter(Database.Timelines.Where(t => t.OwnerId == relate.UserId)).Include(t => t.Members).ToListAsync()); } if ((relate.Type & TimelineUserRelationshipType.Join) != 0) { - entities.AddRange(await Database.TimelineMembers.Where(m => m.UserId == relate.UserId).Include(m => m.Timeline).ThenInclude(t => t.Members).Select(m => m.Timeline).ToListAsync()); + entities.AddRange(await ApplyTimelineVisibilityFilter(Database.TimelineMembers.Where(m => m.UserId == relate.UserId).Include(m => m.Timeline).ThenInclude(t => t.Members).Select(m => m.Timeline)).ToListAsync()); } } diff --git a/Timeline/Services/UserTokenManager.cs b/Timeline/Services/UserTokenManager.cs index 3e9ef3d4..4e54c4cd 100644 --- a/Timeline/Services/UserTokenManager.cs +++ b/Timeline/Services/UserTokenManager.cs @@ -1,7 +1,6 @@ using Microsoft.Extensions.Logging; using System; using System.Threading.Tasks; -using Timeline.Models; namespace Timeline.Services { @@ -21,7 +20,7 @@ namespace Timeline.Services /// The expire time of the token. /// The created token and the user info. /// Thrown when or is null. - /// Thrown when is of bad format. + /// Thrown when is of bad format. /// Thrown when the user with does not exist. /// Thrown when is wrong. public Task CreateToken(string username, string password, DateTime? expireAt = null); -- cgit v1.2.3