From 7ed5306c62262921264bf9c83e00a4c9f3ae33b1 Mon Sep 17 00:00:00 2001 From: crupest Date: Sun, 14 Jun 2020 01:03:20 +0800 Subject: feat(back): Fix #103 . --- Timeline/Entities/DatabaseContext.cs | 2 - Timeline/Models/Http/Timeline.cs | 3 +- Timeline/Models/Timeline.cs | 1 + Timeline/Services/TimelineService.cs | 76 +++++++++++++++--------------------- Timeline/Startup.cs | 5 ++- 5 files changed, 38 insertions(+), 49 deletions(-) diff --git a/Timeline/Entities/DatabaseContext.cs b/Timeline/Entities/DatabaseContext.cs index af7d2edb..136dc442 100644 --- a/Timeline/Entities/DatabaseContext.cs +++ b/Timeline/Entities/DatabaseContext.cs @@ -1,6 +1,4 @@ -using Microsoft.Data.Sqlite; using Microsoft.EntityFrameworkCore; -using System; namespace Timeline.Entities { diff --git a/Timeline/Models/Http/Timeline.cs b/Timeline/Models/Http/Timeline.cs index fb767f10..a942db1e 100644 --- a/Timeline/Models/Http/Timeline.cs +++ b/Timeline/Models/Http/Timeline.cs @@ -26,7 +26,8 @@ namespace Timeline.Models.Http public class TimelineInfo { - public string? Name { get; set; } + public string UniqueId { get; set; } = default!; + public string Name { get; set; } = default!; public string Description { get; set; } = default!; public UserInfo Owner { get; set; } = default!; public TimelineVisibility Visibility { get; set; } diff --git a/Timeline/Models/Timeline.cs b/Timeline/Models/Timeline.cs index 803a5c5c..c47d7be3 100644 --- a/Timeline/Models/Timeline.cs +++ b/Timeline/Models/Timeline.cs @@ -70,6 +70,7 @@ namespace Timeline.Models public class Timeline #pragma warning restore CA1724 // Type names should not match namespaces { + public Guid UniqueID { get; set; } = default!; public string Name { get; set; } = default!; public string Description { get; set; } = default!; public User Owner { get; set; } = default!; 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) diff --git a/Timeline/Startup.cs b/Timeline/Startup.cs index 35c47712..76d77e8e 100644 --- a/Timeline/Startup.cs +++ b/Timeline/Startup.cs @@ -62,7 +62,10 @@ namespace Timeline services.AddScoped(); - services.AddAutoMapper(GetType().Assembly); + services.AddAutoMapper((config) => + { + config.CreateMap().ConvertUsing(guid => guid.ToString()); + }, GetType().Assembly); services.AddTransient(); -- cgit v1.2.3