From 03c9d4edc4e321db8c1b70ae621f77fa89664dfc Mon Sep 17 00:00:00 2001 From: crupest Date: Tue, 4 Feb 2020 18:02:39 +0800 Subject: Add get timeline list feature. --- Timeline/Services/TimelineService.cs | 48 ++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) (limited to 'Timeline/Services/TimelineService.cs') diff --git a/Timeline/Services/TimelineService.cs b/Timeline/Services/TimelineService.cs index 6f9d437e..67a57deb 100644 --- a/Timeline/Services/TimelineService.cs +++ b/Timeline/Services/TimelineService.cs @@ -228,6 +228,16 @@ namespace Timeline.Services /// public interface ITimelineService : IBaseTimelineService { + /// + /// Get all timelines including personal timelines. + /// + /// Filter timelines related (own or is a member) to specific user. + /// The list of timelines. + /// + /// If user with related user id does not exist, empty list will be returned. + /// + Task> GetTimelines(long? relatedUserId = null); + /// /// Create a timeline. /// @@ -618,6 +628,44 @@ namespace Timeline.Services } } + public async Task> GetTimelines(long? relatedUserId = null) + { + List entities; + + if (relatedUserId == null) + { + entities = await Database.Timelines.Include(t => t.Members).ToListAsync(); + } + else + { + var timelineAsMemberIds = await Database.TimelineMembers.Where(m => m.UserId == relatedUserId).Select(m => m.TimelineId).ToListAsync(); + entities = await Database.Timelines.Where(t => t.OwnerId == relatedUserId || timelineAsMemberIds.Contains(t.Id)).Include(t => t.Members).ToListAsync(); + } + + var result = new List(); + + foreach (var entity in entities) + { + var timeline = new TimelineInfo + { + Name = entity.Name, + Description = entity.Description ?? "", + Owner = Mapper.Map(await UserService.GetUserById(entity.OwnerId)), + Visibility = entity.Visibility, + Members = new List() + }; + + foreach (var m in entity.Members) + { + timeline.Members.Add(Mapper.Map(await UserService.GetUserById(m.UserId))); + } + + result.Add(timeline); + } + + return result; + } + public async Task CreateTimeline(string name, long owner) { if (name == null) -- cgit v1.2.3