aboutsummaryrefslogtreecommitdiff
path: root/BackEnd/Timeline/Services/User/RegisterCode
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-04-18 18:38:32 +0800
committercrupest <crupest@outlook.com>2022-04-18 18:38:32 +0800
commit9f189100c93c43372459c25984cb56ed00165f39 (patch)
treeb6b379a2e2a99a273e72c5361e0bb86652afa84c /BackEnd/Timeline/Services/User/RegisterCode
parentf840db633076f8bb172beee5f0f8cab2d76ee23a (diff)
downloadtimeline-9f189100c93c43372459c25984cb56ed00165f39.tar.gz
timeline-9f189100c93c43372459c25984cb56ed00165f39.tar.bz2
timeline-9f189100c93c43372459c25984cb56ed00165f39.zip
...
Diffstat (limited to 'BackEnd/Timeline/Services/User/RegisterCode')
-rw-r--r--BackEnd/Timeline/Services/User/RegisterCode/IRegisterCodeService.cs12
-rw-r--r--BackEnd/Timeline/Services/User/RegisterCode/InvalidRegisterCodeException.cs42
-rw-r--r--BackEnd/Timeline/Services/User/RegisterCode/RegisterCodeService.cs20
3 files changed, 73 insertions, 1 deletions
diff --git a/BackEnd/Timeline/Services/User/RegisterCode/IRegisterCodeService.cs b/BackEnd/Timeline/Services/User/RegisterCode/IRegisterCodeService.cs
index e0031a38..fe1188ea 100644
--- a/BackEnd/Timeline/Services/User/RegisterCode/IRegisterCodeService.cs
+++ b/BackEnd/Timeline/Services/User/RegisterCode/IRegisterCodeService.cs
@@ -46,6 +46,18 @@ namespace Timeline.Services.User.RegisterCode
Task<UserRegisterInfo?> GetUserRegisterInfoAsync(long userId);
/// <summary>
+ /// Create a user with register code.
+ /// </summary>
+ /// <param name="userParams">The params to create user with.</param>
+ /// <param name="registerCode">The user code.</param>
+ /// <returns>The created user.</returns>
+ /// <exception cref="ArgumentNullException">Thrown when <paramref name="userParams"/> or <paramref name="registerCode"/> is null.</exception>
+ /// <exception cref="ArgumentException">Thrown when <paramref name="userParams"/> is invalid.</exception>
+ /// <exception cref="EntityAlreadyExistException">Thrown when username already exist.</exception>
+ /// <exception cref="InvalidRegisterCodeException">Thrown when register code is invalid.</exception>
+ Task<UserEntity> RegisterUserWithCode(CreateUserParams userParams, string registerCode);
+
+ /// <summary>
/// Get the list of user register info of the specified introducer.
/// </summary>
/// <param name="introducerId"></param>
diff --git a/BackEnd/Timeline/Services/User/RegisterCode/InvalidRegisterCodeException.cs b/BackEnd/Timeline/Services/User/RegisterCode/InvalidRegisterCodeException.cs
new file mode 100644
index 00000000..d779609b
--- /dev/null
+++ b/BackEnd/Timeline/Services/User/RegisterCode/InvalidRegisterCodeException.cs
@@ -0,0 +1,42 @@
+using System;
+namespace Timeline.Services.User.RegisterCode
+{
+
+ [Serializable]
+ public class InvalidRegisterCodeException : Exception
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="T:InvalidRegisterCodeException"/> class
+ /// </summary>
+ public InvalidRegisterCodeException()
+ {
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="T:InvalidRegisterCodeException"/> class
+ /// </summary>
+ /// <param name="message">A <see cref="T:System.String"/> that describes the exception. </param>
+ public InvalidRegisterCodeException(string message) : base(message)
+ {
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="T:InvalidRegisterCodeException"/> class
+ /// </summary>
+ /// <param name="message">A <see cref="T:System.String"/> that describes the exception. </param>
+ /// <param name="inner">The exception that is the cause of the current exception. </param>
+ public InvalidRegisterCodeException(string message, System.Exception inner) : base(message, inner)
+ {
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="T:InvalidRegisterCodeException"/> class
+ /// </summary>
+ /// <param name="context">The contextual information about the source or destination.</param>
+ /// <param name="info">The object that holds the serialized object data.</param>
+ protected InvalidRegisterCodeException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) : base(info, context)
+ {
+ }
+ }
+}
+
diff --git a/BackEnd/Timeline/Services/User/RegisterCode/RegisterCodeService.cs b/BackEnd/Timeline/Services/User/RegisterCode/RegisterCodeService.cs
index 97a685d6..254d3747 100644
--- a/BackEnd/Timeline/Services/User/RegisterCode/RegisterCodeService.cs
+++ b/BackEnd/Timeline/Services/User/RegisterCode/RegisterCodeService.cs
@@ -14,13 +14,17 @@ namespace Timeline.Services.User.RegisterCode
private readonly DatabaseContext _databaseContext;
private readonly IUserService _userService;
+ private readonly IClock _clock;
+
private readonly RandomNumberGenerator _randomNumberGenerator;
- public RegisterCodeService(DatabaseContext databaseContext, IUserService userService)
+ public RegisterCodeService(DatabaseContext databaseContext, IUserService userService, IClock clock)
{
_databaseContext = databaseContext;
_userService = userService;
+ _clock = clock;
+
_randomNumberGenerator = RandomNumberGenerator.Create();
}
@@ -99,6 +103,20 @@ namespace Timeline.Services.User.RegisterCode
{
throw new NotImplementedException();
}
+
+ public async Task<UserEntity> RegisterUserWithCode(CreateUserParams userParams, string registerCode)
+ {
+ var registerCodeOwner = await GetCodeOwnerAsync(registerCode);
+ if (registerCodeOwner is null)
+ {
+ throw new InvalidRegisterCodeException("Register code is invalid.");
+ }
+
+ var user = await _userService.CreateUserAsync(userParams);
+ await CreateRegisterInfoAsync(user.Id, registerCode, _clock.GetCurrentTime());
+
+ return user;
+ }
}
}