public async Task HandleAsync(PublishAd command)
        {
            var ad = await _adRepository.GetAsync(command.AdId);

            if (ad is null)
            {
                throw new AdNotFoundException(command.AdId);
            }

            ad.Publish();
            var storyId = await _storyApiClient.SendStoryAsync(new SendStoryRequest
            {
                UserId      = ad.UserId,
                Title       = ad.Header,
                Text        = ad.Content,
                Tags        = ad.Tags,
                Highlighted = true,
                VisibleFrom = ad.From,
                VisibleTo   = ad.To
            });

            if (storyId is null)
            {
                throw new CannotPublishAdAException(command.AdId);
            }

            ad.SetStoryId(storyId.Value);
            await _adRepository.UpdateAsync(ad);

            await _messageBroker.PublishAsync(new AdPublished(ad.Id));
        }
Esempio n. 2
0
        public async Task HandleAsync(PublishAd command)
        {
            var ad = await _adRepository.GetAsync(command.AdId);

            if (ad is null)
            {
                throw new AdNotFoundException(command.AdId);
            }

            ad.Publish(_clock.Current());
            var storyId = await _storyApiClient.SendStoryAsync(new SendStory(default, ad.UserId,
        public async Task HandleAsync(RejectAd command)
        {
            var ad = await _adRepository.GetAsync(command.AdId);

            if (ad is null)
            {
                throw new AdNotFoundException(command.AdId);
            }

            ad.Reject();
            await _adRepository.UpdateAsync(ad);

            await _messageBroker.PublishAsync(new AdRejected(ad.Id));
        }
        public async Task HandleAsync(ApproveAd command)
        {
            var ad = await _adRepository.GetAsync(command.AdId);

            if (ad is null)
            {
                throw new AdNotFoundException(command.AdId);
            }

            ad.Approve(_clock.Current());
            await _adRepository.UpdateAsync(ad);

            await _messageBroker.PublishAsync(new AdApproved(ad.Id));
        }
Esempio n. 5
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));
        }
Esempio n. 6
0
        public async Task <AdDto> GetAsync(Guid id)
        {
            var ad = await _adRepository.GetAsync(id);

            return(_mapper.Map <AdDto>(ad));
        }