diff options
author | 杨宇千 <crupest@outlook.com> | 2019-08-09 21:48:12 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-09 21:48:12 +0800 |
commit | d97185e6152a327f6ef3b1873bfd86f1a3aac3a1 (patch) | |
tree | f1cf455b758e8bf0265d4db0e42a404e9877b321 /Timeline/Models | |
parent | 29bd71cd93b03248254f341aff9252374abc74ec (diff) | |
parent | c964cbbb6c8f228bd4c3943025c6107ac4e42a13 (diff) | |
download | timeline-d97185e6152a327f6ef3b1873bfd86f1a3aac3a1.tar.gz timeline-d97185e6152a327f6ef3b1873bfd86f1a3aac3a1.tar.bz2 timeline-d97185e6152a327f6ef3b1873bfd86f1a3aac3a1.zip |
Merge pull request #38 from crupest/null-request-field
Do 3 things.
Diffstat (limited to 'Timeline/Models')
-rw-r--r-- | Timeline/Models/DatabaseContext.cs | 42 | ||||
-rw-r--r-- | Timeline/Models/Http/Common.cs | 51 | ||||
-rw-r--r-- | Timeline/Models/Http/Token.cs | 32 | ||||
-rw-r--r-- | Timeline/Models/Http/User.cs | 26 | ||||
-rw-r--r-- | Timeline/Models/PutResult.cs | 17 | ||||
-rw-r--r-- | Timeline/Models/UserInfo.cs | 23 | ||||
-rw-r--r-- | Timeline/Models/UserUtility.cs | 60 |
7 files changed, 209 insertions, 42 deletions
diff --git a/Timeline/Models/DatabaseContext.cs b/Timeline/Models/DatabaseContext.cs deleted file mode 100644 index 2e33bf8d..00000000 --- a/Timeline/Models/DatabaseContext.cs +++ /dev/null @@ -1,42 +0,0 @@ -using Microsoft.EntityFrameworkCore;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Timeline.Models
-{
- public static class UserRoles
- {
- public const string Admin = "admin";
- public const string User = "user";
- }
-
- [Table("user")]
- public class User
- {
- [Column("id"), Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public long Id { get; set; }
-
- [Column("name"), Required]
- public string Name { get; set; }
-
- [Column("password"), Required]
- public string EncryptedPassword { get; set; }
-
- [Column("roles"), Required]
- public string RoleString { get; set; }
-
- [Column("version"), Required]
- public long Version { get; set; }
- }
-
- public class DatabaseContext : DbContext
- {
- public DatabaseContext(DbContextOptions<DatabaseContext> options)
- : base(options)
- {
-
- }
-
- public DbSet<User> Users { get; set; }
- }
-}
diff --git a/Timeline/Models/Http/Common.cs b/Timeline/Models/Http/Common.cs new file mode 100644 index 00000000..b4932754 --- /dev/null +++ b/Timeline/Models/Http/Common.cs @@ -0,0 +1,51 @@ +namespace Timeline.Models.Http
+{
+ public class CommonResponse
+ {
+ public static class ErrorCodes
+ {
+ /// <summary>
+ /// Used when the model is invaid.
+ /// For example a required field is null.
+ /// </summary>
+ public const int InvalidModel = -100;
+ }
+
+ public static CommonResponse InvalidModel(string message)
+ {
+ return new CommonResponse(ErrorCodes.InvalidModel, message);
+ }
+
+ public CommonResponse()
+ {
+
+ }
+
+ public CommonResponse(int code, string message)
+ {
+ Code = code;
+ Message = message;
+ }
+
+ public int Code { get; set; }
+ public string Message { get; set; }
+ }
+
+ public static class CommonPutResponse
+ {
+ public const int CreatedCode = 0;
+ public const int ModifiedCode = 1;
+
+ public static CommonResponse Created { get; } = new CommonResponse(CreatedCode, "A new item is created.");
+ public static CommonResponse Modified { get; } = new CommonResponse(ModifiedCode, "An existent item is modified.");
+ }
+
+ public static class CommonDeleteResponse
+ {
+ public const int DeletedCode = 0;
+ public const int NotExistsCode = 1;
+
+ public static CommonResponse Deleted { get; } = new CommonResponse(DeletedCode, "An existent item is deleted.");
+ public static CommonResponse NotExists { get; } = new CommonResponse(NotExistsCode, "The item does not exist.");
+ }
+}
diff --git a/Timeline/Models/Http/Token.cs b/Timeline/Models/Http/Token.cs new file mode 100644 index 00000000..68a66d0a --- /dev/null +++ b/Timeline/Models/Http/Token.cs @@ -0,0 +1,32 @@ +using System.ComponentModel.DataAnnotations;
+
+namespace Timeline.Models.Http
+{
+ public class CreateTokenRequest
+ {
+ [Required]
+ public string Username { get; set; }
+ [Required]
+ public string Password { get; set; }
+ // in days, optional
+ [Range(1, 365)]
+ public int? ExpireOffset { get; set; }
+ }
+
+ public class CreateTokenResponse
+ {
+ public string Token { get; set; }
+ public UserInfo User { get; set; }
+ }
+
+ public class VerifyTokenRequest
+ {
+ [Required]
+ public string Token { get; set; }
+ }
+
+ public class VerifyTokenResponse
+ {
+ public UserInfo User { get; set; }
+ }
+}
diff --git a/Timeline/Models/Http/User.cs b/Timeline/Models/Http/User.cs new file mode 100644 index 00000000..d45543fb --- /dev/null +++ b/Timeline/Models/Http/User.cs @@ -0,0 +1,26 @@ +using System.ComponentModel.DataAnnotations;
+
+namespace Timeline.Models.Http
+{
+ public class UserPutRequest
+ {
+ [Required]
+ public string Password { get; set; }
+ [Required]
+ public bool? Administrator { get; set; }
+ }
+
+ public class UserPatchRequest
+ {
+ public string Password { get; set; }
+ public bool? Administrator { get; set; }
+ }
+
+ public class ChangePasswordRequest
+ {
+ [Required]
+ public string OldPassword { get; set; }
+ [Required]
+ public string NewPassword { get; set; }
+ }
+}
diff --git a/Timeline/Models/PutResult.cs b/Timeline/Models/PutResult.cs new file mode 100644 index 00000000..544602eb --- /dev/null +++ b/Timeline/Models/PutResult.cs @@ -0,0 +1,17 @@ +namespace Timeline.Models
+{
+ /// <summary>
+ /// Represents the result of a "put" operation.
+ /// </summary>
+ public enum PutResult
+ {
+ /// <summary>
+ /// Indicates the item did not exist and now is created.
+ /// </summary>
+ Created,
+ /// <summary>
+ /// Indicates the item exists already and is modified.
+ /// </summary>
+ Modified
+ }
+}
diff --git a/Timeline/Models/UserInfo.cs b/Timeline/Models/UserInfo.cs new file mode 100644 index 00000000..e502855b --- /dev/null +++ b/Timeline/Models/UserInfo.cs @@ -0,0 +1,23 @@ +namespace Timeline.Models
+{
+ public sealed class UserInfo
+ {
+ public UserInfo()
+ {
+ }
+
+ public UserInfo(string username, bool administrator)
+ {
+ Username = username;
+ Administrator = administrator;
+ }
+
+ public string Username { get; set; }
+ public bool Administrator { get; set; }
+
+ public override string ToString()
+ {
+ return $"Username: {Username} ; Administrator: {Administrator}";
+ }
+ }
+}
diff --git a/Timeline/Models/UserUtility.cs b/Timeline/Models/UserUtility.cs new file mode 100644 index 00000000..405987b5 --- /dev/null +++ b/Timeline/Models/UserUtility.cs @@ -0,0 +1,60 @@ +using System;
+using System.Linq;
+using Timeline.Entities;
+using Timeline.Services;
+
+namespace Timeline.Models
+{
+ public static class UserUtility
+ {
+ public const string UserRole = UserRoles.User;
+ public const string AdminRole = UserRoles.Admin;
+
+ public static string[] UserRoleArray { get; } = new string[] { UserRole };
+ public static string[] AdminRoleArray { get; } = new string[] { UserRole, AdminRole };
+
+ public static string[] IsAdminToRoleArray(bool isAdmin)
+ {
+ return isAdmin ? AdminRoleArray : UserRoleArray;
+ }
+
+ public static bool RoleArrayToIsAdmin(string[] roles)
+ {
+ return roles.Contains(AdminRole);
+ }
+
+ public static string[] RoleStringToRoleArray(string roleString)
+ {
+ return roleString.Split(',').ToArray();
+ }
+
+ public static string RoleArrayToRoleString(string[] roles)
+ {
+ return string.Join(',', roles);
+ }
+
+ public static string IsAdminToRoleString(bool isAdmin)
+ {
+ return RoleArrayToRoleString(IsAdminToRoleArray(isAdmin));
+ }
+
+ public static bool RoleStringToIsAdmin(string roleString)
+ {
+ return RoleArrayToIsAdmin(RoleStringToRoleArray(roleString));
+ }
+
+ public static UserInfo CreateUserInfo(User user)
+ {
+ if (user == null)
+ throw new ArgumentNullException(nameof(user));
+ return new UserInfo(user.Name, RoleStringToIsAdmin(user.RoleString));
+ }
+
+ internal static UserCache CreateUserCache(User user)
+ {
+ if (user == null)
+ throw new ArgumentNullException(nameof(user));
+ return new UserCache { Username = user.Name, Administrator = RoleStringToIsAdmin(user.RoleString), Version = user.Version };
+ }
+ }
+}
|