using Microsoft.AspNet.Hosting; using Microsoft.Extensions.CommandLineUtils; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using cli.Services; using cli.Model; using System.Linq; using Yavsc.Models; using System.Collections.Generic; using System; using Yavsc.Templates; namespace cli { public class SendMailCommandProvider : ICommander { public CommandLineApplication Integrate(CommandLineApplication rootApp) { CommandArgument codeCommandArg = null; CommandArgument critCommandArg = null; CommandOption sendHelpOption = null; CommandLineApplication sendMailCommandApp = rootApp.Command("send-monthly", (target) => { target.FullName = "Send email"; target.Description = "Sends monthly emails using given template from code"; sendHelpOption = target.HelpOption("-? | -h | --help"); codeCommandArg = target.Argument( "code", "template code of mailling to execute."); critCommandArg = target.Argument( "criteria", "user selection criteria : 'allow-monthly' or 'email-not-confirmed'"); }, false); sendMailCommandApp.OnExecute(() => { bool showhelp = TemplateConstants.Criterias.ContainsKey(critCommandArg.Value); if (!showhelp) { var host = new WebHostBuilder(); var hostengnine = host.UseEnvironment(Program.HostingEnvironment.EnvironmentName) .UseServer("cli") .UseStartup() .Build(); var app = hostengnine.Start(); var mailer = app.Services.GetService(); var loggerFactory = app.Services.GetService(); var logger = loggerFactory.CreateLogger(); logger.LogInformation("Starting emailling"); mailer.SendEmailFromCriteria(critCommandArg.Value, TemplateConstants.Criterias[critCommandArg.Value]); logger.LogInformation("Finished emailling"); } else { sendMailCommandApp.ShowHelp(); return 1; } return 0; }); return sendMailCommandApp; } } }