From b347fcf45abdae58352cf07e24ec907e1f77a31a Mon Sep 17 00:00:00 2001 From: crupest Date: Fri, 10 Jul 2020 15:36:51 +0800 Subject: Add deleted field. --- Timeline/Services/TimelineService.cs | 60 ++++++++++++++---------------------- 1 file changed, 23 insertions(+), 37 deletions(-) (limited to 'Timeline/Services/TimelineService.cs') diff --git a/Timeline/Services/TimelineService.cs b/Timeline/Services/TimelineService.cs index 73f6c8ef..a0d72ad3 100644 --- a/Timeline/Services/TimelineService.cs +++ b/Timeline/Services/TimelineService.cs @@ -96,20 +96,8 @@ namespace Timeline.Services /// Get all the posts in the timeline. /// /// The name of the timeline. - /// A list of all posts. - /// Thrown when is null. - /// Throw when is of bad format. - /// - /// Thrown when timeline with name does not exist. - /// If it is a personal timeline, then inner exception is . - /// - Task> GetPosts(string timelineName); - - /// - /// Get the posts that have been modified since a given time in the timeline. - /// - /// The name of the timeline. /// The time that posts have been modified since. + /// Whether include deleted posts. /// A list of all posts. /// Thrown when is null. /// Throw when is of bad format. @@ -117,7 +105,7 @@ namespace Timeline.Services /// Thrown when timeline with name does not exist. /// If it is a personal timeline, then inner exception is . /// - Task> GetPosts(string timelineName, DateTime modifiedSince); + Task> GetPosts(string timelineName, DateTime? modifiedSince = null, bool includeDeleted = false); /// /// Get the etag of data of a post. @@ -399,21 +387,23 @@ namespace Timeline.Services private async Task MapTimelinePostFromEntity(TimelinePostEntity entity, string timelineName) { - if (entity.Content == null) - { - throw new ArgumentException(ExceptionPostDeleted, nameof(entity)); - } + var author = await _userService.GetUserById(entity.AuthorId); - var type = entity.ContentType; + ITimelinePostContent? content = null; - ITimelinePostContent content = type switch + if (entity.Content != null) { - TimelinePostContentTypes.Text => new TextTimelinePostContent(entity.Content), - TimelinePostContentTypes.Image => new ImageTimelinePostContent(entity.Content), - _ => throw new DatabaseCorruptedException(string.Format(CultureInfo.InvariantCulture, ExceptionDatabaseUnknownContentType, type)) - }; + var type = entity.ContentType; + + content = type switch + { + TimelinePostContentTypes.Text => new TextTimelinePostContent(entity.Content), + TimelinePostContentTypes.Image => new ImageTimelinePostContent(entity.Content), + _ => throw new DatabaseCorruptedException(string.Format(CultureInfo.InvariantCulture, ExceptionDatabaseUnknownContentType, type)) + }; + } return new TimelinePost( id: entity.LocalId, @@ -519,29 +509,25 @@ namespace Timeline.Services return await MapTimelineFromEntity(timelineEntity); } - public async Task> GetPosts(string timelineName) + public async Task> GetPosts(string timelineName, DateTime? modifiedSince = null, bool includeDeleted = false) { if (timelineName == null) throw new ArgumentNullException(nameof(timelineName)); var timelineId = await FindTimelineId(timelineName); - var postEntities = await _database.TimelinePosts.OrderBy(p => p.Time).Where(p => p.TimelineId == timelineId && p.Content != null).ToListAsync(); + var query = _database.TimelinePosts.OrderBy(p => p.Time).Where(p => p.TimelineId == timelineId); - var posts = new List(); - foreach (var entity in postEntities) + if (!includeDeleted) { - posts.Add(await MapTimelinePostFromEntity(entity, timelineName)); + query = query.Where(p => p.Content != null); } - return posts; - } - public async Task> GetPosts(string timelineName, DateTime modifiedSince) - { - if (timelineName == null) - throw new ArgumentNullException(nameof(timelineName)); + if (modifiedSince.HasValue) + { + query = query.Where(p => p.LastUpdated >= modifiedSince); + } - var timelineId = await FindTimelineId(timelineName); - var postEntities = await _database.TimelinePosts.OrderBy(p => p.Time).Where(p => p.TimelineId == timelineId && p.Content != null && p.LastUpdated >= modifiedSince).ToListAsync(); + var postEntities = await query.ToListAsync(); var posts = new List(); foreach (var entity in postEntities) -- cgit v1.2.3