예제 #1
0
        public async Task <IList <AffiliateCoupon> > GetAllAsync()
        {
            var response = await GetAllCouponsAsync();

            var coupons = _mapper.Map <IList <AffiliateCoupon> >(response.IncentiveItems.Items);

            var stores = await _storeRepository.GetAllAsync();

            coupons = coupons.Where(coupon => stores.Any(store => store.StoreId == coupon.Store.Id)).ToList();  // Only authorized retailers coupons.

            foreach (var coupon in coupons)
            {
                if (coupon.Store == null)
                {
                    continue;
                }

                var store = stores.FirstOrDefault(s => s.StoreId == coupon.Store.Id);
                if (store == null)
                {
                    continue;
                }

                coupon.Store.ImageUrl = store.ImageUrl;
                coupon.Store.StoreUrl = store.StoreUrl;
                coupon.Category       = new AffiliateCategory
                {
                    Id           = 117979,
                    Name         = "Black Friday",
                    FriendlyName = "Black Friday".ToFriendlyName()
                };
            }
            return(coupons);
        }
예제 #2
0
        public async Task Invoke()
        {
            var storesFromPartner = await _repositoryFromPartner.GetAllAsync();

            if (!storesFromPartner.Any())
            {
                return;
            }

            var storesToCreate = new List <AffiliateStore>();
            var storesToChange = new List <AffiliateStore>();
            var storesToCancel = new List <AffiliateStore>();

            var cuponicoStores = await _cuponicoRepository.GetAllAsync();

            foreach (var partnerStore in storesFromPartner)
            {
                if (partnerStore == null)
                {
                    continue;
                }

                var cuponicoStore = cuponicoStores?.FirstOrDefault(local => local.StoreId == partnerStore.StoreId);
                if (cuponicoStore == null)
                {
                    storesToCreate.Add(partnerStore);
                }
                else
                {
                    if (!cuponicoStore.Equals(partnerStore))
                    {
                        storesToChange.Add(partnerStore);
                    }
                }
            }

            if (cuponicoStores != null)
            {
                storesToCancel.AddRange(cuponicoStores.Where(localStore => storesFromPartner.All(s => s.StoreId != localStore.StoreId)));
            }

            if (storesToCreate.Any())
            {
                var baches = storesToCreate.BatchesOf(50);
                foreach (var bach in baches)
                {
                    var stores = bach.ToList();
                    await _cuponicoRepository.SaveAsync(stores);

                    var createdStores = AffiliateStoreCreated.CreateMany(stores);
                    await _publisher.PublishAsync(createdStores);
                }
            }

            if (storesToChange.Any())
            {
                var baches = storesToChange.BatchesOf(50);
                foreach (var bach in baches)
                {
                    var stores = bach.ToList();
                    await _cuponicoRepository.SaveAsync(stores);

                    var changedStores = AffiliateStoreChanged.CreateMany(stores);
                    await _publisher.PublishAsync(changedStores);
                }
            }

            if (storesToCancel.Any())
            {
                var baches = storesToCancel.BatchesOf(50);
                foreach (var bach in baches)
                {
                    var stores = bach.ToList();
                    await _cuponicoRepository.DeleteAsync(stores.Select(x => x.StoreId).ToList());

                    var canceledStores = AffiliateStoreCanceled.CreateMany(stores);
                    await _publisher.PublishAsync(canceledStores);
                }
            }
        }