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