Пример #1
0
        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));
        }