using Ratermania.Automation.Interfaces; using PartSource.Automation.Models; using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using PartSource.Data; using PartSource.Services; using Ratermania.Shopify; using Ratermania.Shopify.Resources; using PartSource.Data.Models; using System.Linq; using Microsoft.EntityFrameworkCore; namespace PartSource.Automation.Jobs { /// /// Ensures syncronization between Shopify IDs and Partsource SKUs /// public class SyncronizeProducts : IAutomationJob { private readonly PartSourceContext _partSourceContext; private readonly ShopifyClient _shopifyClient; private readonly ILogger _logger; public SyncronizeProducts(ILogger logger, PartSourceContext partSourceContext, ShopifyClient shopifyClient) { _partSourceContext = partSourceContext; _shopifyClient = shopifyClient; _logger = logger; } public async Task Run() { IList importData = _partSourceContext.ImportData.FromSql($"SELECT * FROM ImportDataFilters").ToList(); IEnumerable products = await _shopifyClient.Products.Get(new Dictionary { { "limit", 250 } }); while (products?.Any() == true) { foreach (Product product in products) { foreach (Variant variant in product.Variants) { ImportData item = importData.FirstOrDefault(i => i.VariantSku == variant.Sku); if (item != null) { _partSourceContext.Database.ExecuteSqlCommand($"UPDATE ImportDataFilters SET ShopifyId = {product.Id} WHERE VariantSku = {variant.Sku}"); } } } try { _logger.LogInformation("Did 250"); //await _partSourceContext.SaveChangesAsync(); } catch { Console.WriteLine("Failed to save a batch of products"); } finally { products = await _shopifyClient.Products.GetNext(); } } } } }