using PartSource.Services; using PartSource.Automation.Factories; using PartSource.Automation.Jobs.Interfaces; using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration.FileExtensions; using Microsoft.Extensions.Configuration.Json; using PartSource.Data; using System.IO; using Microsoft.EntityFrameworkCore; using PartSource.Automation.Models.Configuration; using PartSource.Automation.Jobs; using PartSource.Automation.Services; using PartSource.Services.Integrations; using Ratermania.Shopify.DependencyInjection; using PartSource.Automation.Models; namespace PartSource.Automation { internal class Program { private static void Main(string[] args) { IServiceProvider serviceProvider = ConfigureServices(); JobFactory jobFactory = serviceProvider.GetService(); EmailService emailService = serviceProvider.GetService(); foreach (string arg in args) { Console.Write($"Running job {arg}... "); try { IAutomationJob job = jobFactory.Build(arg); AutomationJobResult result = job.Run().Result; if (result.IsSuccess) { emailService.Send($"{arg} Completed Successfully", result.Message); } else { emailService.Send($"{arg} Failed", result.Message); } Console.WriteLine("Done"); } catch (Exception ex) { Console.WriteLine(ex.Message); } } } private static IServiceProvider ConfigureServices() { string environment = Environment.GetEnvironmentVariable("PS_AUTOMATION_ENVIRONMENT"); IConfigurationBuilder builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.{environment}.json", optional: true, reloadOnChange: true); IConfigurationRoot configuration = builder.Build(); EmailConfiguration emailConfiguration = new EmailConfiguration(); FtpConfiguration ftpConfiguration = new FtpConfiguration(); SsisConfiguration ssisConfiguration = new SsisConfiguration(); configuration.Bind("emailConfiguration", emailConfiguration); configuration.Bind("ftpConfiguration", ftpConfiguration); configuration.Bind("ssisConfiguration", ssisConfiguration); ServiceProvider serviceProvider = new ServiceCollection() .AddDbContext(options => options.UseSqlServer(configuration.GetConnectionString("PartSourceDatabase"), opts => opts.EnableRetryOnFailure()) ) .AddShopify(options => { options.ApiKey = configuration["Shopify:ApiKey"]; options.ApiSecret = configuration["Shopify:ApiSecret"]; options.ApiVersion = "2020-01"; options.ShopDomain = configuration["Shopify:ShopDomain"]; }) .AddSingleton(emailConfiguration) .AddSingleton(ftpConfiguration) .AddSingleton(ssisConfiguration) .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() //.AddSingleton() //.AddSingleton() //.AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .BuildServiceProvider(); return serviceProvider; } } }