public async Task HandleAsync(PayAd command) { var ad = await _adRepository.GetAsync(command.AdId); if (ad is null) { throw new AdNotFoundException(command.AdId); } ad.Pay(); var fundsCharged = await _usersApiClient.ChargeFundsAsync(ad.UserId, ad.Amount); if (!fundsCharged) { throw new CannotPayAdException(ad.Id); } await _adRepository.UpdateAsync(ad); await _messageBroker.PublishAsync(new AdPaid(ad.Id)); }