//using Microsoft.EntityFrameworkCore; //using Newtonsoft.Json; //using PartSource.Automation.Jobs.Interfaces; //using PartSource.Automation.Models; //using PartSource.Automation.Services; //using PartSource.Data; //using PartSource.Data.Models; //using PartSource.Data.Nexpart; //using PartSource.Services; //using PartSource.Services.Integrations; //using System; //using System.Collections.Concurrent; //using System.Collections.Generic; //using System.Data; //using System.Data.SqlClient; //using System.IO; //using System.Linq; //using System.Text; //using System.Text.RegularExpressions; //using System.Threading.Tasks; //using Ratermania.Shopify.Entities; //namespace PartSource.Automation.Jobs //{ // public class UpdateFitment : IAutomationJob // { // private readonly IServiceProvider _serviceProvider; // private readonly ShopifyClient _shopifyClient; // private readonly PartSourceContext _partSourceContext; // private readonly NexpartService _nexpartService; // private readonly VehicleService _vehicleService; // public UpdateFitment(IServiceProvider serviceProvider, PartSourceContext partSourceContext, ShopifyClient shopifyClient, NexpartService nexpartService, VehicleService vehicleService) // { // _partSourceContext = partSourceContext; // _shopifyClient = shopifyClient; // _vehicleService = vehicleService; // } // public async Task Run() // { // IEnumerable products = await _shopifyClient.Products.Get(); // int i = 0; // while (products != null && products.Any()) // { // foreach (Product product in products) // { // try // { // ImportData importData = _partSourceContext.ImportData.FirstOrDefault(i => i.VariantSku == product.Variants[0].Sku && i.UpdatedAt == null); // IList vehicles = _vehicleService.GetVehiclesForPart(importData?.PartNumber, importData?.LineCode); // if (vehicles == null || vehicles.Count == 0) // { // continue; // } // await DeleteFitmentMetafields(product.Id); // bool isFitment = false; // IList vehicleIdFitment = _vehicleService.GetVehicleIdFitment(vehicles); // if (vehicleIdFitment.Count > 0) // { // isFitment = true; // string json = JsonConvert.SerializeObject(vehicleIdFitment); // if (json.Length >= 100000) // { // continue; // } // Metafield vehicleMetafield = new Metafield // { // Namespace = "fitment", // Key = "ids", // Value = json, // ValueType = "json_string", // OwnerResource = "product", // OwnerId = product.Id // }; // await _shopifyClient.Metafields.Add(vehicleMetafield); // } // IList ymmFitment = _vehicleService.GetYmmFitment(vehicles); // if (ymmFitment.Count > 0) // { // isFitment = true; // string json = JsonConvert.SerializeObject(ymmFitment); // if (json.Length >= 100000) // { // continue; // } // Metafield ymmMetafield = new Metafield // { // Namespace = "fitment", // Key = "seo", // Value = json, // ValueType = "json_string", // OwnerResource = "product", // OwnerId = product.Id // }; // await _shopifyClient.Metafields.Add(ymmMetafield); // } // Metafield isFitmentMetafield = new Metafield // { // Namespace = "Flags", // Key = "IsFitment", // Value = isFitment.ToString(), // ValueType = "string", // OwnerResource = "product", // OwnerId = product.Id // }; // await _shopifyClient.Metafields.Add(isFitmentMetafield); // importData.UpdatedAt = DateTime.Now; // importData.UpdateType = "Fitment"; // } // catch (Exception ex) // { // Console.WriteLine($"{product.Id}: {ex.Message}"); // } // } // try // { // i++; // Console.WriteLine(i); // await _partSourceContext.SaveChangesAsync(); // products = await _shopifyClient.Products.GetNext(); // } // catch (Exception ex) // { // i++; // Console.WriteLine(i); // Console.WriteLine($"Retrying request: {ex.Message}"); // await _partSourceContext.SaveChangesAsync(); // products = await _shopifyClient.Products.GetNext(); // } // } // return new AutomationJobResult // { // IsSuccess = true // }; // } // private async Task DeleteFitmentMetafields(long shopifyId) // { // IDictionary parameters = new Dictionary // { // { "metafield[owner_id]", shopifyId}, // { "metafield[owner_resource]", "product" }, // { "namespace", "fitment" }, // }; // IEnumerable metafields = await _shopifyClient.Metafields.Get(parameters); // foreach (Metafield metafield in metafields) // { // await _shopifyClient.Metafields.Delete(metafield); // } // } // public IList GetVehicles(string partNumber, string lineCode) // { // partNumber = Regex.Replace(partNumber, "[^a-zA-Z0-9]", string.Empty); // //string sql = $"select distinct BaseVehicleId, EngineConfigId from dbo.Fitment where ManufacturerCode in (select WhiCode from DcfMapping where PartSourceCode='{lineCode}') and (partNumber = '{partNumber}' or partNumber = '{partNumber.Replace("-", string.Empty)}')"; // string sql = $"with FitmentIds (BaseVehicleId, EngineConfigId) as (select distinct BaseVehicleId, EngineConfigId from dbo.Fitment where LineCode in (select WhiCode from DcfMapping where LineCode='{lineCode}') and PartNumber = '{partNumber}') select v.* from VehicleData v join FitmentIds f on v.BaseVehicleId = f.BaseVehicleId and v.EngineConfigId = f.EngineConfigId;"; //#pragma warning disable EF1000 // Possible SQL injection vulnerability. // IList vehicles = _partSourceContext.VehicleData.FromSql(sql).ToList(); //#pragma warning restore EF1000 // Possible SQL injection vulnerability. // return vehicles; // } // private void Update() // { // } // } //}