public async Task <User> RegisterAsync(string email, string username, string password) { var user = await _context.Users.FirstOrDefaultAsync(x => x.Email == email); if (user != null) { throw new Exception($"User with email: '{email}' already exists."); } var salt = _encrypter.GetSalt(password); var hash = _encrypter.GetHash(password, salt); var hashActivate = _encrypter.GetActivate(password); user = new User(email, username, hash, salt, hashActivate); await _emailSender.SendActivateEmail(email, hashActivate); await _context.Users.AddAsync(user); await _context.SaveChangesAsync(); return(user); }