aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-08-11 00:39:10 +0800
committercrupest <crupest@outlook.com>2020-08-11 00:39:10 +0800
commit536dba83194800befce9357bc1cffbed4bb47728 (patch)
tree515c13c3f44c1963cd462b2c82ce34416f49b5f3
parentc861ffcc1b8f890f990bbe5deee352564d791ee5 (diff)
downloadtimeline-536dba83194800befce9357bc1cffbed4bb47728.tar.gz
timeline-536dba83194800befce9357bc1cffbed4bb47728.tar.bz2
timeline-536dba83194800befce9357bc1cffbed4bb47728.zip
User service update time fields of user.
-rw-r--r--Timeline.Tests/Helpers/TestDatabase.cs2
-rw-r--r--Timeline.Tests/Services/TimelineServiceTest.cs2
-rw-r--r--Timeline/Models/User.cs10
-rw-r--r--Timeline/Services/UserService.cs27
4 files changed, 30 insertions, 11 deletions
diff --git a/Timeline.Tests/Helpers/TestDatabase.cs b/Timeline.Tests/Helpers/TestDatabase.cs
index 40f8f2d4..f0c26180 100644
--- a/Timeline.Tests/Helpers/TestDatabase.cs
+++ b/Timeline.Tests/Helpers/TestDatabase.cs
@@ -36,7 +36,7 @@ namespace Timeline.Tests.Helpers
if (_createUser)
{
var passwordService = new PasswordService();
- var userService = new UserService(NullLogger<UserService>.Instance, context, passwordService);
+ var userService = new UserService(NullLogger<UserService>.Instance, context, passwordService, new Clock());
await userService.CreateUser(new User
{
diff --git a/Timeline.Tests/Services/TimelineServiceTest.cs b/Timeline.Tests/Services/TimelineServiceTest.cs
index 919400a3..e129b49d 100644
--- a/Timeline.Tests/Services/TimelineServiceTest.cs
+++ b/Timeline.Tests/Services/TimelineServiceTest.cs
@@ -41,7 +41,7 @@ namespace Timeline.Tests.Services
await _testDatabase.InitializeAsync();
_databaseContext = _testDatabase.CreateContext();
_dataManager = new DataManager(_databaseContext, _eTagGenerator);
- _userService = new UserService(NullLogger<UserService>.Instance, _databaseContext, _passwordService);
+ _userService = new UserService(NullLogger<UserService>.Instance, _databaseContext, _passwordService, _clock);
_timelineService = new TimelineService(NullLogger<TimelineService>.Instance, _databaseContext, _dataManager, _userService, _imageValidator, _clock);
}
diff --git a/Timeline/Models/User.cs b/Timeline/Models/User.cs
index fa780efd..3d0b2f1a 100644
--- a/Timeline/Models/User.cs
+++ b/Timeline/Models/User.cs
@@ -1,19 +1,21 @@
-namespace Timeline.Models
+using System;
+
+namespace Timeline.Models
{
public class User
{
public string? UniqueId { get; set; }
public string? Username { get; set; }
public string? Nickname { get; set; }
-
- #region adminsecret
public bool? Administrator { get; set; }
- #endregion adminsecret
#region secret
public long? Id { get; set; }
public string? Password { get; set; }
public long? Version { get; set; }
+ public DateTimeOffset? UsernameChangeTime { get; set; }
+ public DateTimeOffset? CreateTime { get; set; }
+ public DateTimeOffset? LastModified { get; set; }
#endregion secret
}
}
diff --git a/Timeline/Services/UserService.cs b/Timeline/Services/UserService.cs
index 91d27965..4e56c86a 100644
--- a/Timeline/Services/UserService.cs
+++ b/Timeline/Services/UserService.cs
@@ -158,6 +158,7 @@ namespace Timeline.Services
public class UserService : IUserService
{
private readonly ILogger<UserService> _logger;
+ private readonly IClock _clock;
private readonly DatabaseContext _databaseContext;
@@ -165,9 +166,10 @@ namespace Timeline.Services
private readonly UsernameValidator _usernameValidator = new UsernameValidator();
private readonly NicknameValidator _nicknameValidator = new NicknameValidator();
- public UserService(ILogger<UserService> logger, DatabaseContext databaseContext, IPasswordService passwordService)
+ public UserService(ILogger<UserService> logger, DatabaseContext databaseContext, IPasswordService passwordService, IClock clock)
{
_logger = logger;
+ _clock = clock;
_databaseContext = databaseContext;
_passwordService = passwordService;
}
@@ -210,7 +212,10 @@ namespace Timeline.Services
Administrator = UserRoleConvert.ToBool(entity.Roles),
Nickname = string.IsNullOrEmpty(entity.Nickname) ? entity.Username : entity.Nickname,
Id = entity.Id,
- Version = entity.Version
+ Version = entity.Version,
+ CreateTime = entity.CreateTime,
+ UsernameChangeTime = entity.UsernameChangeTime,
+ LastModified = entity.LastModified
};
}
@@ -343,14 +348,19 @@ namespace Timeline.Services
{
if (info != null)
{
+ DateTimeOffset now = _clock.GetCurrentTime();
+ bool updateLastModified = false;
+
var username = info.Username;
- if (username != null)
+ if (username != null && username != entity.Username)
{
var conflict = await _databaseContext.Users.AnyAsync(u => u.Username == username);
if (conflict)
ThrowUsernameConflict();
entity.Username = username;
+ entity.UsernameChangeTime = now;
+ updateLastModified = true;
}
var password = info.Password;
@@ -361,15 +371,22 @@ namespace Timeline.Services
}
var administrator = info.Administrator;
- if (administrator.HasValue)
+ if (administrator.HasValue && UserRoleConvert.ToBool(entity.Roles) != administrator)
{
entity.Roles = UserRoleConvert.ToString(administrator.Value);
+ updateLastModified = true;
}
var nickname = info.Nickname;
- if (nickname != null)
+ if (nickname != null && nickname != entity.Nickname)
{
entity.Nickname = nickname;
+ updateLastModified = true;
+ }
+
+ if (updateLastModified)
+ {
+ entity.LastModified = now;
}
}
}