using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Newtonsoft.Json; using PartSource.Data.Contexts; using PartSource.Data.Models; using PartSource.Data.Nexpart; using PartSource.Services; using Ratermania.Automation.Interfaces; using Ratermania.Shopify; using Ratermania.Shopify.Resources; namespace PartSource.Automation.Jobs.POC { public class GetImageUrls : IAutomationJob { private readonly NexpartService _nexpartService; private readonly FitmentContext _fitmentContext; private readonly PartService _partService; private readonly ShopifyClient _shopifyClient; public GetImageUrls(NexpartService nexpartService, PartService partService, FitmentContext fitmentContext, ShopifyClient shopifyClient) { _nexpartService = nexpartService; _fitmentContext = fitmentContext; _partService = partService; _shopifyClient = shopifyClient; } public async Task Run(CancellationToken token, params string[] arguments) { IList rows = new List { "\"Line Code\", \"Part Number\", \"Image URL(s)\"" }; using StreamReader reader = new StreamReader("C:\\Users\\Tom\\Desktop\\image parts.csv"); string line = reader.ReadLine(); // Burn the header row while (reader.Peek() > 0) { line = reader.ReadLine(); string[] columns = line.Split(","); for (int i = 0; i < columns.Length; i++) { columns[i] = columns[i].Replace("\"", string.Empty); } string partsourceCode = columns[0].Trim(); string partNumber = columns[1].Trim(); IList dcfMappings = await _partService.GetDcfMapping(partsourceCode); if (dcfMappings.Count == 0) { Console.WriteLine($"No images for {partsourceCode} {partNumber}"); } bool hasImage = false; foreach (DcfMapping mapping in dcfMappings) { if (hasImage) { continue; } SmartPageDataSearch dataSearch = new SmartPageDataSearch { Items = new Item[] { new Item { MfrCode = mapping.WhiCode, PartNumber = partNumber } }, DataOption = new[] { "ALL" } }; SmartPageDataSearchResponse response = await _nexpartService.SendRequest(dataSearch); if (response.ResponseBody.Item?.Length > 0) { List urls = new List(); if (!string.IsNullOrEmpty(response.ResponseBody.Item[0].PrimaryImg?.ImgUrl)) { urls.Add(response.ResponseBody.Item[0].PrimaryImg?.ImgUrl); }; if (response.ResponseBody.Item[0].AddImgs?.AddImg?.Length > 0) { urls.AddRange(response.ResponseBody.Item[0].AddImgs.AddImg.Select(i => i.AddImgUrl)); } if (urls.Count > 0) { rows.Add($"\"{partsourceCode}\", \"{partNumber}\", \"{string.Join(";", urls)}\""); hasImage = true; } } } if (!hasImage) { Console.WriteLine($"No images for {partsourceCode} {partNumber}"); } } await File.WriteAllLinesAsync($"C:\\users\\Tom\\desktop\\WHI Images {DateTime.Now:yyyyMMdd}.csv", rows); } } }