public async Task <ClientReadModel> RegisterAsync(ClientAddOrUpdateModel client, string refreshToken) { var clientToSave = _mapper.Map <Client>(client); clientToSave.Id = Guid.NewGuid(); clientToSave.Created = DateTime.Now; clientToSave.PasswordHash = _passwordService.ComputeHash(client.Password); await _clientRepository.BeginTransactionAsync(); try { await _clientRepository.AddAsync(clientToSave); await AddRefreshTokenAsync(clientToSave.Id, refreshToken); _clientRepository.CommitTransaction(); return(_mapper.Map <ClientReadModel>(clientToSave)); } catch (Exception) { _clientRepository.RollbackTransaction(); throw; } }