private static async Task ScheduleJob(AvisosContext context, IConfigurationRoot configuration) { JobDataMap dataMap = new JobDataMap(); dataMap.Put("context", context); dataMap.Put("configuration", configuration); StdSchedulerFactory factory = new StdSchedulerFactory(); IScheduler scheduler = await factory.GetScheduler(); await scheduler.Start(); IJobDetail job = JobBuilder.Create <AvisosCompraVendaJob>() .WithIdentity("avisos-job", "avisos-group") .UsingJobData(dataMap) .Build(); var jobInterval = Int32.Parse(configuration["emailJobIntervalInSeconds"]); ITrigger trigger = TriggerBuilder.Create() .WithIdentity("avisos-trigger", "avisos-group") .StartNow() .WithSimpleSchedule(x => x .WithIntervalInSeconds(jobInterval) .RepeatForever()) .Build(); await scheduler.ScheduleJob(job, trigger); await Task.Delay(TimeSpan.FromDays(1)); await scheduler.Shutdown(); }
private static AvisoMailData MakeEmailData(AvisosContext avisosContext, IConfigurationRoot configuration, Asset asset) { var smtpConfig = configuration.GetSection("smtpConfig").Get <SmtpConfig>(); string targetEmail = configuration["targetEmail"]; var mailData = new AvisoMailData(avisosContext, asset, targetEmail, smtpConfig); return(mailData); }
private static void TryToSendEmail(AvisosContext avisosContext, IConfigurationRoot configuration, Asset asset) { if (HasToSendEMail(avisosContext, asset)) { AvisoMailData mailData = MakeEmailData(avisosContext, configuration, asset); MakeAndSendEmail(mailData); } }
private static AvisosContext MakeContext(string[] args) { var assetName = args[0]; var sellPrice = Decimal.Parse(args[1]); var buyPrice = Decimal.Parse(args[2]); var context = new AvisosContext(assetName, buyPrice, sellPrice); return(context); }
private static void TrySendEmailOnValidAssetResponse(AvisosContext avisosContext, IConfigurationRoot configuration, Asset asset) { if (asset.Error) { Console.WriteLine(asset.Message); } else { TryToSendEmail(avisosContext, configuration, asset); } }
private static async Task <Asset> GetAsset(AvisosContext avisosContext, IConfigurationRoot configuration) { try { string apiKey = configuration["apiKey"]; var client = new RestClient($"https://api.hgbrasil.com/"); var request = new RestRequest($"finance/stock_price?key={apiKey}&symbol={avisosContext.AssetName}", DataFormat.Json); Console.WriteLine($"Pegando informações do ativo {avisosContext.AssetName}..."); var response = await client.GetAsync <AssetResponse>(request); var asset = response.Results[avisosContext.AssetName.ToUpper()]; return(asset); } catch (Exception) { Console.WriteLine("Erro ao fazer requisição para API de cotações."); throw; } }
private static bool HasToSendEMail(AvisosContext avisosContext, Asset asset) { return(asset.Price <= avisosContext.BuyPrice || asset.Price >= avisosContext.SellPrice); }