public async Task CreateUserAsync()

in src/Services/User/User.Infrastructure/Identity/IdentityService.cs [62:120]


        public async Task<(Result Result, string UserId)> CreateUserAsync(string userToken,
            string userName,
            string password)
        {
            logger.LogInformation("Start creating {userName} user with token {userToken}.", userName, userToken);

            //The identifier is not verified on the ASP.NET Identity side
            (Result findResult, ApplicationUser user) = await FindUserByTokenAsync(userToken);

            if (findResult.Succeeded)
            {
                Result result = Result.ValidationError(new InnerError(ErrorTarget.DuplicateUserToken, "This user token is already taken."));

                logger.LogError("Error creating user with token {userToken}. Errors: {@message}", userToken, result.Errors);

                return (result, user.Id);
            }

            user = new ApplicationUser(userToken)
            {
                UserName = userName
            };

            IdentityResult identityResult = await userManager.CreateAsync(user, password);

            if (!identityResult.Succeeded)
            {
                Result result = identityResult.ToApplicationResult();

                logger.LogError("Error creating user with token {userToken}. Errors: {@message}", userToken, result.Errors);

                return (result, user.Id);
            }

            logger.LogInformation("Successfully created {userName} user with token {userToken}.", userName, userToken);

            var userRoleName = Roles.User.ToString("G");

            identityResult = await userManager.AddToRoleAsync(user, userRoleName);

            if (!identityResult.Succeeded)
            {
                Result result = identityResult.ToApplicationResult();

                logger.LogError("Error on assignment role {userRoleName} for user with token {userToken}. Errors: {@message}",
                    userRoleName,
                    userToken,
                    result.Errors);

                return (result, user.Id);
            }

            logger.LogInformation("Successfully assigned role {userRoleName} for {userName} user with token {userToken}.",
                userRoleName,
                userName,
                userToken);

            return (Result.Success(), user.Id);
        }