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;
            }
        }