aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Timeline/Entities/DatabaseContext.cs2
-rw-r--r--Timeline/Models/Http/Timeline.cs3
-rw-r--r--Timeline/Models/Timeline.cs1
-rw-r--r--Timeline/Services/TimelineService.cs76
-rw-r--r--Timeline/Startup.cs5
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<Models.Timeline> MapTimelineFromEntity(IUserService userService, TimelineEntity entity)
+ {
+ var owner = await userService.GetUserById(entity.OwnerId);
+
+ var members = new List<User>();
+ 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<BaseTimelineService> _logger;
+ private readonly ILogger<BaseTimelineService> _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<User>();
- 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<List<TimelinePost>> 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<User>()
- };
-
- 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<TimelineMemberEntity>()
};
_database.Timelines.Add(newEntity);
await _database.SaveChangesAsync();
- return new Models.Timeline
- {
- Name = name,
- Description = "",
- Owner = user,
- Visibility = newEntity.Visibility,
- Members = new List<User>()
- };
+ 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<IPathProvider, PathProvider>();
- services.AddAutoMapper(GetType().Assembly);
+ services.AddAutoMapper((config) =>
+ {
+ config.CreateMap<Guid, string>().ConvertUsing(guid => guid.ToString());
+ }, GetType().Assembly);
services.AddTransient<IClock, Clock>();