public async Task <ServiceResponse <AuthenticateViewModel> > Register(RegisterRequest request) { var isEmailValid = EmailValidator.IsEmailValid(request.Email); if (!isEmailValid) { return(ServiceResponse <AuthenticateViewModel> .Error("Invalid email")); } var player = await _context.Players.FirstOrDefaultAsync( x => x.Email == request.Email); if (player != null) { return(ServiceResponse <AuthenticateViewModel> .Error("Email already exist")); } var(isPasswordValid, passwordMessage) = _passwordValidator.ValidateAsync(request.Password); if (!isPasswordValid) { return(ServiceResponse <AuthenticateViewModel> .Error(passwordMessage)); } var hashedPassword = _passwordHasher.HashPassword(player, request.Password); var refreshToken = _jwtHelper.GenerateRefreshToken(); var newPlayer = new Player { Email = request.Email, PasswordHash = hashedPassword, Nick = request.Nick, RefreshToken = refreshToken, }; await _context.Players.AddAsync(newPlayer); await _context.SaveChangesAsync(); var accessToken = _jwtHelper.GenerateJwtToken(newPlayer); return(ServiceResponse <AuthenticateViewModel> .Ok( new AuthenticateViewModel(accessToken, refreshToken.Token))); }