diff options
author | crupest <crupest@outlook.com> | 2019-04-21 00:08:59 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2019-04-21 00:08:59 +0800 |
commit | 076e0131dff71a9f76fff13c92fffa0ef408935f (patch) | |
tree | 9fa853690866f452a571b45fb062ac692d298a2e /Timeline/Entities | |
parent | 325d4c7dbfba45e9c5a7518279831f54c4690d20 (diff) | |
download | timeline-076e0131dff71a9f76fff13c92fffa0ef408935f.tar.gz timeline-076e0131dff71a9f76fff13c92fffa0ef408935f.tar.bz2 timeline-076e0131dff71a9f76fff13c92fffa0ef408935f.zip |
Reorgnize api. Add basic unit test.
Diffstat (limited to 'Timeline/Entities')
-rw-r--r-- | Timeline/Entities/AdminUser.cs | 14 | ||||
-rw-r--r-- | Timeline/Entities/UserInfo.cs | 64 |
2 files changed, 69 insertions, 9 deletions
diff --git a/Timeline/Entities/AdminUser.cs b/Timeline/Entities/AdminUser.cs index 7b8b7fb7..eb126165 100644 --- a/Timeline/Entities/AdminUser.cs +++ b/Timeline/Entities/AdminUser.cs @@ -1,29 +1,29 @@ namespace Timeline.Entities { - public class AdminUserEntityRequest + public class UserModifyRequest { public string Password { get; set; } public string[] Roles { get; set; } } - public class AdminUserPutResponse + public class UserPutResponse { public const int CreatedCode = 0; public const int ModifiedCode = 1; - public static AdminUserPutResponse Created { get; } = new AdminUserPutResponse { ReturnCode = CreatedCode }; - public static AdminUserPutResponse Modified { get; } = new AdminUserPutResponse { ReturnCode = ModifiedCode }; + public static UserPutResponse Created { get; } = new UserPutResponse { ReturnCode = CreatedCode }; + public static UserPutResponse Modified { get; } = new UserPutResponse { ReturnCode = ModifiedCode }; public int ReturnCode { get; set; } } - public class AdminUserDeleteResponse + public class UserDeleteResponse { public const int SuccessCode = 0; public const int NotExistsCode = 1; - public static AdminUserDeleteResponse Success { get; } = new AdminUserDeleteResponse { ReturnCode = SuccessCode }; - public static AdminUserDeleteResponse NotExists { get; } = new AdminUserDeleteResponse { ReturnCode = NotExistsCode }; + public static UserDeleteResponse Success { get; } = new UserDeleteResponse { ReturnCode = SuccessCode }; + public static UserDeleteResponse NotExists { get; } = new UserDeleteResponse { ReturnCode = NotExistsCode }; public int ReturnCode { get; set; } } diff --git a/Timeline/Entities/UserInfo.cs b/Timeline/Entities/UserInfo.cs index d9c5acad..a1860552 100644 --- a/Timeline/Entities/UserInfo.cs +++ b/Timeline/Entities/UserInfo.cs @@ -1,14 +1,20 @@ using System; +using System.Collections.Generic; using System.Linq; using Timeline.Models; namespace Timeline.Entities { - public class UserInfo + public sealed class UserInfo { public UserInfo() { + } + public UserInfo(string username, params string[] roles) + { + Username = username; + Roles = roles; } public UserInfo(User user) @@ -17,10 +23,64 @@ namespace Timeline.Entities throw new ArgumentNullException(nameof(user)); Username = user.Name; - Roles = user.RoleString.Split(',').Select(s => s.Trim()).ToArray(); + + if (user.RoleString == null) + Roles = null; + else + Roles = user.RoleString.Split(',').Select(r => r.Trim()).ToArray(); } public string Username { get; set; } public string[] Roles { get; set; } + + public static IEqualityComparer<UserInfo> EqualityComparer { get; } = new EqualityComparerImpl(); + public static IComparer<UserInfo> Comparer { get; } = Comparer<UserInfo>.Create(Compare); + + private class EqualityComparerImpl : IEqualityComparer<UserInfo> + { + bool IEqualityComparer<UserInfo>.Equals(UserInfo x, UserInfo y) + { + return Compare(x, y) == 0; + } + + int IEqualityComparer<UserInfo>.GetHashCode(UserInfo obj) + { + return obj.Username.GetHashCode() ^ NormalizeRoles(obj.Roles).GetHashCode(); + } + } + + private static string NormalizeRoles(string[] rawRoles) + { + var roles = rawRoles.Where(r => !string.IsNullOrWhiteSpace(r)).Select(r => r.Trim()).ToList(); + roles.Sort(); + return string.Join(',', roles); + } + + public static int Compare(UserInfo left, UserInfo right) + { + if (left == null) + { + if (right == null) + return 0; + return -1; + } + + if (right == null) + return 1; + + var uc = string.Compare(left.Username, right.Username); + if (uc != 0) + return uc; + + var leftRoles = NormalizeRoles(left.Roles); + var rightRoles = NormalizeRoles(right.Roles); + + return string.Compare(leftRoles, rightRoles); + } + + public override string ToString() + { + return $"Username: {Username} ; Roles: {Roles}"; + } } } |