public async Task <IList <Merchant> > LookForNewMerchantsAsync(Provider provider, IList <Merchant> merchants) { Log.Info($"Getting all merchants for provider {provider.Id} from db"); merchantsInDb = await EarnRepository.Instance.GetMerchantsForProviderAsync(provider.Id).ConfigureAwait(false); Log.Info($"Got {merchantsInDb.Count()} merchant entries for provider {provider.Id} from db"); List <Merchant> lstNewMerchants = new List <Merchant>(); foreach (var merchant in merchants) { //TODO: Write code to handle merchant updates if (IsNewMerchant(merchant)) { merchant.ProviderId = provider.Id; if (merchant.ExtendedAttributes == null) { merchant.ExtendedAttributes = new Dictionary <string, string>(); } string masterCardId = MasterCardIdGenerator.GetUniqueId(provider, merchant, "R"); merchant.ExtendedAttributes.Add(MerchantConstants.MCID, masterCardId); lstNewMerchants.Add(merchant); GeoCodeMerchantLocation(merchant); } } Log.Info($"Total New Merchants in reward network file {feedFile} is {lstNewMerchants.Count()}"); return(lstNewMerchants); }
private Merchant CreateNewMerchant(Merchant merchantFromFile) { Merchant merchant = new Merchant { Id = Guid.NewGuid().ToString(), ProviderId = provider.Id, Name = merchantFromFile.Name, PhoneNumber = merchantFromFile.PhoneNumber, Location = merchantFromFile.Location, ExtendedAttributes = merchantFromFile.ExtendedAttributes, Payments = merchantFromFile.Payments }; string masterCardId = MasterCardIdGenerator.GetUniqueId(provider, merchant, "P"); merchant.ExtendedAttributes.Add(MerchantConstants.MCID, masterCardId); GeoCodeMerchantLocation(merchant); Log.Info($"Created new merchant : {merchant.ToString()} with MasterCardId {masterCardId}"); return(merchant); }
public async Task ExecuteAsync(ScheduledJobInfo scheduledJobInfo) { await ValidatePayload(scheduledJobInfo).ConfigureAwait(false); IDictionary <string, string> payload = scheduledJobInfo.JobPayload; string merchantFileName = payload[JobConstants.BlobName]; string blobContainer = payload[JobConstants.ContainerName]; string providerId = payload[JobConstants.ProviderId]; MemoryStream ms = await GetMerchantsFromBlobAsync(merchantFileName, blobContainer).ConfigureAwait(false); MerchantFileProcessor merchantFileProcessor = MerchantProcessorFactory.GetMerchantFileProcessor(merchantFileName); Tuple <string, IList <Merchant> > provisioningData = merchantFileProcessor.ImportMasterCardProvisioningFile(ms); if (provisioningData == null) { throw new Exception("Error in processing the mastercard provisioning file. Unable to provision merchants"); } string masterCardMerchantsProvisioningDate = provisioningData.Item1; IList <Merchant> lstProvisionedMerchants = provisioningData.Item2; if (lstProvisionedMerchants.Any()) { //Update the provider with the MasterCard merchant provisioning file date info. This is needed //at the time of exporting the file back to MasterCard. if (provider.ExtendedAttributes == null) { provider.ExtendedAttributes = new Dictionary <string, string>(); } if (!provider.ExtendedAttributes.ContainsKey(MerchantConstants.MCProvisioningDate)) { provider.ExtendedAttributes.Add(MerchantConstants.MCProvisioningDate, masterCardMerchantsProvisioningDate); } else { provider.ExtendedAttributes[MerchantConstants.MCProvisioningDate] = masterCardMerchantsProvisioningDate; } await EarnRepository.Instance.UpdateAsync <Provider>(new List <Provider> { provider }); Log.Info($"Updated the provider {providerId} with the MasterCard provisioning date"); //Add the new merchants to db. //TODO: As of now, the code can handle only new merchant additions from the MC file. //Need to add support to handle updates and deletes foreach (Merchant merchant in lstProvisionedMerchants) { merchant.Id = Guid.NewGuid().ToString(); merchant.ProviderId = provider.Id; GeoCodeMerchantLocation(merchant); if (merchant.ExtendedAttributes == null) { merchant.ExtendedAttributes = new Dictionary <string, string>(); } string masterCardId = MasterCardIdGenerator.GetUniqueId(provider, merchant, "P"); Log.Info($"Generated mastercardid {masterCardId} for merchant {merchant.Name}"); merchant.ExtendedAttributes.Add(MerchantConstants.MCID, masterCardId); } Log.Info($"Total Merchants to add to db {lstProvisionedMerchants.Count}"); await EarnRepository.Instance.AddMerchantsInBatchAsync(lstProvisionedMerchants); Log.Info($"Successfully added {lstProvisionedMerchants.Count} merchants to db"); scheduledJobInfo.JobCompletedTime = DateTime.UtcNow; } else { Log.Warn("Provisioning file from MasterCard has 0 merchants"); } }