From f840db633076f8bb172beee5f0f8cab2d76ee23a Mon Sep 17 00:00:00 2001 From: crupest Date: Mon, 18 Apr 2022 18:21:50 +0800 Subject: ... --- .../User/RegisterCode/IRegisterCodeService.cs | 13 ++++--- .../User/RegisterCode/RegisterCodeService.cs | 42 +++++++++++++++++----- 2 files changed, 39 insertions(+), 16 deletions(-) (limited to 'BackEnd/Timeline') diff --git a/BackEnd/Timeline/Services/User/RegisterCode/IRegisterCodeService.cs b/BackEnd/Timeline/Services/User/RegisterCode/IRegisterCodeService.cs index 65decefc..e0031a38 100644 --- a/BackEnd/Timeline/Services/User/RegisterCode/IRegisterCodeService.cs +++ b/BackEnd/Timeline/Services/User/RegisterCode/IRegisterCodeService.cs @@ -13,44 +13,43 @@ namespace Timeline.Services.User.RegisterCode /// The register code. /// If true, only when code is enabled the owner id is returned. /// A task contains the owner of the register code. Null of the code does not exist or is not enabled. - Task GetCodeOwner(string code, bool onlyEnabled = true); + Task GetCodeOwnerAsync(string code, bool onlyEnabled = true); /// /// Get the current enabled register code of the user or null if there is none. /// /// The user id. /// A task contains current enabled register code or null if there is none. - Task GetCurrentCode(long userId); + Task GetCurrentCodeAsync(long userId); /// /// Create a new register code for a user, enable it and disable the previous one if there is a previous one. /// /// The user id. /// A task contains the new register code. - Task CreateNewCode(long userId); + Task CreateNewCodeAsync(long userId); /// /// Record a register info for a user. /// /// The newly-registered user. - /// The introducer user id. /// The register code. /// The register time. /// The created register info. - Task CreateRegisterInfo(long userId, long introducerId, string registerCode, DateTime registerTime); + Task CreateRegisterInfoAsync(long userId, string registerCode, DateTime registerTime); /// /// Get register info of a user if there is one. /// /// The user id. /// The user register info if there is one. Or null if there is not. - Task GetUserRegisterInfo(long userId); + Task GetUserRegisterInfoAsync(long userId); /// /// Get the list of user register info of the specified introducer. /// /// /// The list of user register info. - Task> GetUserRegisterInfoOfIntroducer(long introducerId); + Task> GetUserRegisterInfoOfIntroducerAsync(long introducerId); } } diff --git a/BackEnd/Timeline/Services/User/RegisterCode/RegisterCodeService.cs b/BackEnd/Timeline/Services/User/RegisterCode/RegisterCodeService.cs index eb8bc37a..97a685d6 100644 --- a/BackEnd/Timeline/Services/User/RegisterCode/RegisterCodeService.cs +++ b/BackEnd/Timeline/Services/User/RegisterCode/RegisterCodeService.cs @@ -12,16 +12,22 @@ namespace Timeline.Services.User.RegisterCode public class RegisterCodeService : IRegisterCodeService, IDisposable { private readonly DatabaseContext _databaseContext; + private readonly IUserService _userService; + private readonly RandomNumberGenerator _randomNumberGenerator; - public RegisterCodeService(DatabaseContext databaseContext) + public RegisterCodeService(DatabaseContext databaseContext, IUserService userService) { _databaseContext = databaseContext; + _userService = userService; + _randomNumberGenerator = RandomNumberGenerator.Create(); } - public async Task CreateNewCode(long userId) + public async Task CreateNewCodeAsync(long userId) { + await _userService.CheckUserExistenceAsync(userId); + var oldEntity = await _databaseContext.RegisterCodes.Where(r => r.OwnerId == userId && r.Enabled).SingleOrDefaultAsync(); if (oldEntity is not null) @@ -42,9 +48,24 @@ namespace Timeline.Services.User.RegisterCode return newEntity.Code; } - public Task CreateRegisterInfo(long userId, long introducerId, string registerCode, DateTime registerTime) + public async Task CreateRegisterInfoAsync(long userId, string registerCode, DateTime registerTime) { - throw new NotImplementedException(); + await _userService.CheckUserExistenceAsync(userId); + + var introducerId = await GetCodeOwnerAsync(registerCode, false); + + var entity = new UserRegisterInfo() + { + UserId = userId, + IntroducerId = introducerId, + RegisterCode = registerCode, + RegisterTime = registerTime + }; + + _databaseContext.UserRegisterInfos.Add(entity); + await _databaseContext.SaveChangesAsync(); + + return entity; } public void Dispose() @@ -52,7 +73,7 @@ namespace Timeline.Services.User.RegisterCode _randomNumberGenerator.Dispose(); } - public async Task GetCodeOwner(string code, bool onlyEnabled = true) + public async Task GetCodeOwnerAsync(string code, bool onlyEnabled = true) { var entity = await _databaseContext.RegisterCodes.Where(r => r.Code == code).SingleOrDefaultAsync(); if (entity is null) return null; @@ -60,18 +81,21 @@ namespace Timeline.Services.User.RegisterCode return entity.OwnerId; } - public async Task GetCurrentCode(long userId) + public async Task GetCurrentCodeAsync(long userId) { + await _userService.CheckUserExistenceAsync(userId); + var entity = await _databaseContext.RegisterCodes.Where(r => r.OwnerId == userId && r.Enabled).SingleOrDefaultAsync(); return entity?.Code; } - public Task GetUserRegisterInfo(long userId) + public async Task GetUserRegisterInfoAsync(long userId) { - throw new NotImplementedException(); + await _userService.CheckUserExistenceAsync(userId); + return await _databaseContext.UserRegisterInfos.Where(i => i.UserId == userId).SingleOrDefaultAsync(); } - public Task> GetUserRegisterInfoOfIntroducer(long introducerId) + public Task> GetUserRegisterInfoOfIntroducerAsync(long introducerId) { throw new NotImplementedException(); } -- cgit v1.2.3