示例#1
0
        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");
            }
        }