public async Task <IActionResult> Post(CreateUserRequest request, CancellationToken token) { var user = new ApplicationUser { UserName = request.UserName, CurrencyBase = request.CurrencyBase, Email = request.Email }; var result = await _userManager.CreateAsync(user, request.Password); if (!result.Succeeded) { var errorType = result.ToString() switch { var passwordCode when passwordCode.ToLowerInvariant().Contains("password") => "PasswordInvalid", var userCode when userCode.ToLowerInvariant().Contains("duplicateuser") => "DuplicateUserName", var invalidUserNameCode when invalidUserNameCode.ToLowerInvariant().Contains("invalidusername") => "InvalidUserName", _ => "UserNotCreated" }; var errors = result.Errors.Select(e => e.Description).ToArray(); return(BadRequest(new ErrorResponse(errorType, errors))); } var bearerToken = await _tokenService.GetBearerToken(request.UserName, request.Password); if (bearerToken) { var accountBatchCommand = new AddAccountBatchCommand { CreatedBy = Guid.Parse(user.Id), CreatedOn = DateTime.UtcNow, Accounts = _factory.GeAccountItems(request.Locale, request.CurrencyBase).ToArray() }; await _accountService.AddAccountBatch(accountBatchCommand, token); var categoryBatchCommand = new AddCategoryBatchCommand { CreatedBy = Guid.Parse(user.Id), CreatedOn = DateTime.UtcNow, Categories = _factory.GetCategoryItems(request.Locale).ToArray() }; await _categoryService.AddCategoryBatch(categoryBatchCommand, token); return(Ok(new TokenResponse { AccessToken = bearerToken.Value, ExpiresIn = _options.TokenLifetime, TokenType = "BearerToken" })); } return(BadRequest(new ErrorResponse(bearerToken.ErrorType, "Can't create access token"))); }