public async Task <AuthenticationDto> RegisterAsync(string email, string password, string name)
        {
            var existingUser = await _userManager.FindByEmailAsync(email);

            if (existingUser != null)
            {
                return new AuthenticationDto {
                           Errors = new[] { "User with this email address already exists" }
                }
            }
            ;

            var newUserGuid = Guid.NewGuid();
            var newUser     = new AppUser
            {
                Id       = newUserGuid.ToString(),
                Email    = email,
                UserName = email,
                Name     = name
            };

            var created = await _userManager.CreateAsync(newUser, password);

            if (!created.Succeeded)
            {
                return new AuthenticationDto {
                           Errors = created.Errors.Select(x => x.Description)
                }
            }
            ;

            await _userManager.AddToRoleAsync(newUser, DefaultIdentity.RoleUser);

            var addUserInMySqlDb = await _mySqlDataContext.CreateUser(newUserGuid, name, 0);

            if (!addUserInMySqlDb)
            {
                await _userManager.DeleteAsync(newUser);

                return(new AuthenticationDto {
                    Errors = new[] { "Problem on writing entry in DATA SERVICE DB" }, CriticalError = true
                });
            }

            await _securityService.SendEmailConfirmationRequestAsync(email);

            return(await GenerateAuthenticationResultForUserAsync(newUser));
        }
        public async Task Initialize()
        {
            if (!await _roleManager.RoleExistsAsync(DefaultIdentity.RoleAdmin))
            {
                await _roleManager.CreateAsync(new IdentityRole(DefaultIdentity.RoleAdmin));
            }

            if (!await _roleManager.RoleExistsAsync(DefaultIdentity.RoleUser))
            {
                await _roleManager.CreateAsync(new IdentityRole(DefaultIdentity.RoleUser));
            }

            if (await _userManager.FindByEmailAsync(DefaultIdentity.DefaultAdminUserName) is null)
            {
                var guid  = Guid.NewGuid();
                var admin = new AppUser
                {
                    Id             = guid.ToString(),
                    UserName       = DefaultIdentity.DefaultAdminUserName,
                    Email          = DefaultIdentity.DefaultAdminUserName,
                    EmailConfirmed = true,
                    Name           = DefaultIdentity.DefaultAdminName
                };

                var creationResult = await _userManager.CreateAsync(admin, DefaultIdentity.DefaultAdminPassword);

                if (creationResult.Succeeded)
                {
                    await _userManager.AddToRoleAsync(admin, DefaultIdentity.RoleAdmin);

                    await _userManager.AddToRoleAsync(admin, DefaultIdentity.RoleUser);
                }

                var addUserInMySqlDb = await _mySqlDataContext.CreateUser(guid, DefaultIdentity.DefaultAdminUserName, 10);

                if (!addUserInMySqlDb)
                {
                    await _userManager.DeleteAsync(admin);
                }
            }
        }