diff --git a/TransactionProcessor.BusinessLogic/Services/MerchantDomainService.cs b/TransactionProcessor.BusinessLogic/Services/MerchantDomainService.cs index 465eef71..71d117ed 100644 --- a/TransactionProcessor.BusinessLogic/Services/MerchantDomainService.cs +++ b/TransactionProcessor.BusinessLogic/Services/MerchantDomainService.cs @@ -259,21 +259,7 @@ public async Task CreateMerchant(MerchantCommands.CreateMerchantCommand public async Task CreateMerchantUser(MerchantCommands.CreateMerchantUserCommand command, CancellationToken cancellationToken) { try { - CreateUserRequest createUserRequest = new() { - EmailAddress = command.RequestDto.EmailAddress, - FamilyName = command.RequestDto.FamilyName, - GivenName = command.RequestDto.GivenName, - MiddleName = command.RequestDto.MiddleName, - Password = command.RequestDto.Password, - PhoneNumber = "123456", // Is this really needed :| - Roles = new List(), - Claims = new Dictionary() - }; - - String merchantRoleName = Environment.GetEnvironmentVariable("MerchantRoleName"); - createUserRequest.Roles.Add(String.IsNullOrEmpty(merchantRoleName) ? "Merchant" : merchantRoleName); - createUserRequest.Claims.Add("estateId", command.EstateId.ToString()); - createUserRequest.Claims.Add("merchantId", command.MerchantId.ToString()); + CreateUserRequest createUserRequest = this.BuildMerchantUserRequest(command); Result estateResult = await DomainServiceHelper.GetAggregateOrFailure(ct => this.AggregateService.Get(command.EstateId, ct), command.EstateId, cancellationToken); if (estateResult.IsFailed) @@ -290,20 +276,12 @@ public async Task CreateMerchantUser(MerchantCommands.CreateMerchantUser if (validateResult.IsFailed) return ResultHelpers.CreateFailure(validateResult); - Result createUserResult = await this.SecurityServiceClient.CreateUser(createUserRequest, cancellationToken); - if (createUserResult.IsFailed) - return ResultHelpers.CreateFailure(createUserResult); - - Result> userDetailsResult = await this.SecurityServiceClient.GetUsers(createUserRequest.EmailAddress, cancellationToken); - if (userDetailsResult.IsFailed) - return ResultHelpers.CreateFailure(userDetailsResult); - - UserDetails user = userDetailsResult.Data.SingleOrDefault(); - if (user == null) - return Result.Failure($"Unable to get user details for username {createUserRequest.EmailAddress}"); + Result getUserResult = await this.CreateMerchantSecurityUser(createUserRequest, cancellationToken); + if (getUserResult.IsFailed) + return ResultHelpers.CreateFailure(getUserResult); // Add the user to the aggregate - Result stateResult = merchantAggregate.AddSecurityUser(user.UserId, command.RequestDto.EmailAddress); + Result stateResult = merchantAggregate.AddSecurityUser(getUserResult.Data.UserId, command.RequestDto.EmailAddress); if (stateResult.IsFailed) return stateResult; @@ -320,6 +298,43 @@ public async Task CreateMerchantUser(MerchantCommands.CreateMerchantUser } } + private CreateUserRequest BuildMerchantUserRequest(MerchantCommands.CreateMerchantUserCommand command) { + CreateUserRequest createUserRequest = new() { + EmailAddress = command.RequestDto.EmailAddress, + FamilyName = command.RequestDto.FamilyName, + GivenName = command.RequestDto.GivenName, + MiddleName = command.RequestDto.MiddleName, + Password = command.RequestDto.Password, + PhoneNumber = "123456", // Is this really needed :| + Roles = new List(), + Claims = new Dictionary() + }; + + String merchantRoleName = Environment.GetEnvironmentVariable("MerchantRoleName"); + createUserRequest.Roles.Add(String.IsNullOrEmpty(merchantRoleName) ? "Merchant" : merchantRoleName); + createUserRequest.Claims.Add("estateId", command.EstateId.ToString()); + createUserRequest.Claims.Add("merchantId", command.MerchantId.ToString()); + + return createUserRequest; + } + + private async Task> CreateMerchantSecurityUser(CreateUserRequest createUserRequest, + CancellationToken cancellationToken) { + Result createUserResult = await this.SecurityServiceClient.CreateUser(createUserRequest, cancellationToken); + if (createUserResult.IsFailed) + return ResultHelpers.CreateFailure(createUserResult); + + Result> userDetailsResult = await this.SecurityServiceClient.GetUsers(createUserRequest.EmailAddress, cancellationToken); + if (userDetailsResult.IsFailed) + return ResultHelpers.CreateFailure(userDetailsResult); + + UserDetails user = userDetailsResult.Data.SingleOrDefault(); + if (user == null) + return Result.Failure($"Unable to get user details for username {createUserRequest.EmailAddress}"); + + return Result.Success(user); + } + public async Task MakeMerchantDeposit(MerchantCommands.MakeMerchantDepositCommand command, CancellationToken cancellationToken) { try