aboutsummaryrefslogtreecommitdiff
path: root/Timeline/Services/TimelineService.cs
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-06-18 18:14:18 +0800
committerGitHub <noreply@github.com>2020-06-18 18:14:18 +0800
commit135f47e7477bb2a72c423145dcd286ae494fd3ed (patch)
treec4e27cac4b2057c645f031be12eda896b96aa435 /Timeline/Services/TimelineService.cs
parent3dc9460798798e5ba155fae7b6afe84522c2c619 (diff)
parent2f91cce1c29ac4b9b49ca389b565c66199985f2d (diff)
downloadtimeline-135f47e7477bb2a72c423145dcd286ae494fd3ed.tar.gz
timeline-135f47e7477bb2a72c423145dcd286ae494fd3ed.tar.bz2
timeline-135f47e7477bb2a72c423145dcd286ae494fd3ed.zip
Merge pull request #111 from crupest/timeline-last-modified
Timeline last modified property.
Diffstat (limited to 'Timeline/Services/TimelineService.cs')
-rw-r--r--Timeline/Services/TimelineService.cs77
1 files changed, 52 insertions, 25 deletions
diff --git a/Timeline/Services/TimelineService.cs b/Timeline/Services/TimelineService.cs
index d232f3e1..6c1e91c6 100644
--- a/Timeline/Services/TimelineService.cs
+++ b/Timeline/Services/TimelineService.cs
@@ -15,6 +15,23 @@ using static Timeline.Resources.Services.TimelineService;
namespace Timeline.Services
{
+ public static class TimelineHelper
+ {
+ public static string ExtractTimelineName(string name, out bool isPersonal)
+ {
+ if (name.StartsWith("@", StringComparison.OrdinalIgnoreCase))
+ {
+ isPersonal = true;
+ return name.Substring(1);
+ }
+ else
+ {
+ isPersonal = false;
+ return name;
+ }
+ }
+ }
+
public enum TimelineUserRelationshipType
{
Own = 0b1,
@@ -356,38 +373,34 @@ namespace Timeline.Services
{
UniqueID = entity.UniqueId,
Name = entity.Name ?? ("@" + owner.Username),
+ NameLastModified = entity.NameLastModified,
Description = entity.Description ?? "",
Owner = owner,
Visibility = entity.Visibility,
- Members = members
+ Members = members,
+ CreateTime = entity.CreateTime,
+ LastModified = entity.LastModified
};
}
private TimelineEntity CreateNewTimelineEntity(string? name, long ownerId)
{
+ var currentTime = _clock.GetCurrentTime();
+
return new TimelineEntity
{
Name = name,
+ NameLastModified = currentTime,
OwnerId = ownerId,
Visibility = TimelineVisibility.Register,
- CreateTime = _clock.GetCurrentTime(),
+ CreateTime = currentTime,
+ LastModified = currentTime,
CurrentPostLocalId = 0,
+ Members = new List<TimelineMemberEntity>()
};
}
- private static string ExtractTimelineName(string name, out bool isPersonal)
- {
- if (name.StartsWith("@", StringComparison.OrdinalIgnoreCase))
- {
- isPersonal = true;
- return name.Substring(1);
- }
- else
- {
- isPersonal = false;
- return name;
- }
- }
+
// Get timeline id by name. If it is a personal timeline and it does not exist, it will be created.
//
@@ -399,7 +412,7 @@ namespace Timeline.Services
// It follows all timeline-related function common interface contracts.
private async Task<long> FindTimelineId(string timelineName)
{
- timelineName = ExtractTimelineName(timelineName, out var isPersonal);
+ timelineName = TimelineHelper.ExtractTimelineName(timelineName, out var isPersonal);
if (isPersonal)
{
@@ -705,16 +718,26 @@ namespace Timeline.Services
var timelineEntity = await _database.Timelines.Where(t => t.Id == timelineId).SingleAsync();
+ var changed = false;
+
if (newProperties.Description != null)
{
+ changed = true;
timelineEntity.Description = newProperties.Description;
}
if (newProperties.Visibility.HasValue)
{
+ changed = true;
timelineEntity.Visibility = newProperties.Visibility.Value;
}
+ if (changed)
+ {
+ var currentTime = _clock.GetCurrentTime();
+ timelineEntity.LastModified = currentTime;
+ }
+
await _database.SaveChangesAsync();
}
@@ -760,8 +783,17 @@ namespace Timeline.Services
simplifiedAdd.Remove(u);
simplifiedRemove.Remove(u);
}
+
+ if (simplifiedAdd.Count == 0)
+ simplifiedAdd = null;
+
+ if (simplifiedRemove.Count == 0)
+ simplifiedRemove = null;
}
+ if (simplifiedAdd == null && simplifiedRemove == null)
+ return;
+
var timelineId = await FindTimelineId(timelineName);
async Task<List<long>?> CheckExistenceAndGetId(List<string>? list)
@@ -791,6 +823,9 @@ namespace Timeline.Services
_database.TimelineMembers.RemoveRange(membersToRemove);
}
+ var timelineEntity = await _database.Timelines.Where(t => t.Id == timelineId).SingleAsync();
+ timelineEntity.LastModified = _clock.GetCurrentTime();
+
await _database.SaveChangesAsync();
}
@@ -930,15 +965,7 @@ namespace Timeline.Services
if (conflict)
throw new EntityAlreadyExistException(EntityNames.Timeline, null, ExceptionTimelineNameConflict);
- var newEntity = new TimelineEntity
- {
- CurrentPostLocalId = 0,
- Name = name,
- OwnerId = owner,
- Visibility = TimelineVisibility.Register,
- CreateTime = _clock.GetCurrentTime(),
- Members = new List<TimelineMemberEntity>()
- };
+ var newEntity = CreateNewTimelineEntity(name, user.Id!.Value);
_database.Timelines.Add(newEntity);
await _database.SaveChangesAsync();