public async Task <SignUpResponse> Handle(SignUpRequest request, CancellationToken cancellationToken) { if (await authValidationService.EmailExists(request.Email)) { throw new DuplicateException("Email address already exists", ErrorCodes.EmailExists); } if (await authValidationService.UsernameExists(request.Username)) { throw new DuplicateException("Username already exists", ErrorCodes.UsernameExists); } var user = await identityService.SignUp(request.Email, request.Username, request.Password); if (user != null) { await balanceService.CreateBalanceAccount(user.Id); var confirmAccountToken = await identityService.GenerateConfirmAccountToken(user); string callbackUrl = $"{Configuration.GetValue<string>(AppSettingsKeys.ClientAddress)}register/confirm?email={user.Email}&token={confirmAccountToken}"; return(await emailSender.Send(EmailMessages.ActivationAccountEmail(user.Email, user.UserName, callbackUrl)) ? new SignUpResponse { Token = confirmAccountToken, User = mapper.Map <UserAuthDto>(user) } : throw new ServiceException("Account confirmation email sending failed")); } throw new AuthException("Error occurred during signing up"); }