Exemplo n.º 1
0
        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);
     }
 }
Exemplo n.º 4
0
        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);
 }