From 994ebd75db1a3d4317402b0552f4a9cc41fd7349 Mon Sep 17 00:00:00 2001 From: crupest Date: Sun, 14 Jun 2020 01:03:20 +0800 Subject: feat(back): Fix #103 . --- Timeline/Services/TimelineService.cs | 76 +++++++++++++++--------------------- 1 file changed, 31 insertions(+), 45 deletions(-) (limited to 'Timeline/Services') diff --git a/Timeline/Services/TimelineService.cs b/Timeline/Services/TimelineService.cs index a473ae66..0b845a57 100644 --- a/Timeline/Services/TimelineService.cs +++ b/Timeline/Services/TimelineService.cs @@ -304,6 +304,30 @@ namespace Timeline.Services } + internal static class TimelineServiceHelper + { + public static async Task MapTimelineFromEntity(IUserService userService, TimelineEntity entity) + { + var owner = await userService.GetUserById(entity.OwnerId); + + var members = new List(); + foreach (var memberEntity in entity.Members) + { + members.Add(await userService.GetUserById(memberEntity.UserId)); + } + + return new Models.Timeline + { + UniqueID = entity.UniqueId, + Name = entity.Name ?? ("@" + owner.Username), + Description = entity.Description ?? "", + Owner = owner, + Visibility = entity.Visibility, + Members = members + }; + } + } + public abstract class BaseTimelineService : IBaseTimelineService { protected BaseTimelineService(ILoggerFactory loggerFactory, DatabaseContext database, IImageValidator imageValidator, IDataManager dataManager, IUserService userService, IClock clock) @@ -316,7 +340,7 @@ namespace Timeline.Services UserService = userService; } - private ILogger _logger; + private readonly ILogger _logger; protected IClock Clock { get; } @@ -361,26 +385,9 @@ namespace Timeline.Services var timelineId = await FindTimelineId(name); - var timelineEntity = await Database.Timelines.Where(t => t.Id == timelineId).SingleAsync(); - - var timelineMemberEntities = await Database.TimelineMembers.Where(m => m.TimelineId == timelineId).Select(m => new { m.UserId }).ToListAsync(); + var timelineEntity = await Database.Timelines.Where(t => t.Id == timelineId).Include(t => t.Members).SingleAsync(); - var owner = await UserService.GetUserById(timelineEntity.OwnerId); - - var members = new List(); - foreach (var memberEntity in timelineMemberEntities) - { - members.Add(await UserService.GetUserById(memberEntity.UserId)); - } - - return new Models.Timeline - { - Name = GenerateName(name), - Description = timelineEntity.Description ?? "", - Owner = owner, - Visibility = timelineEntity.Visibility, - Members = members - }; + return await TimelineServiceHelper.MapTimelineFromEntity(UserService, timelineEntity); } public async Task> GetPosts(string name) @@ -945,22 +952,7 @@ namespace Timeline.Services foreach (var entity in entities) { - var owner = await _userService.GetUserById(entity.OwnerId); - var timeline = new Models.Timeline - { - Name = entity.Name ?? ("@" + owner.Username), - Description = entity.Description ?? "", - Owner = owner, - Visibility = entity.Visibility, - Members = new List() - }; - - foreach (var m in entity.Members) - { - timeline.Members.Add(await _userService.GetUserById(m.UserId)); - } - - result.Add(timeline); + result.Add(await TimelineServiceHelper.MapTimelineFromEntity(_userService, entity)); } return result; @@ -986,20 +978,14 @@ namespace Timeline.Services Name = name, OwnerId = owner, Visibility = TimelineVisibility.Register, - CreateTime = _clock.GetCurrentTime() + CreateTime = _clock.GetCurrentTime(), + Members = new List() }; _database.Timelines.Add(newEntity); await _database.SaveChangesAsync(); - return new Models.Timeline - { - Name = name, - Description = "", - Owner = user, - Visibility = newEntity.Visibility, - Members = new List() - }; + return await TimelineServiceHelper.MapTimelineFromEntity(_userService, newEntity); } public async Task DeleteTimeline(string name) -- cgit v1.2.3