using KLHZ.Trader.Core.Common; using KLHZ.Trader.Core.Common.Messaging.Services; using KLHZ.Trader.Core.Contracts.Declisions.Interfaces; using KLHZ.Trader.Core.Contracts.Messaging.Interfaces; using KLHZ.Trader.Core.DataLayer; using KLHZ.Trader.Core.Exchange; using KLHZ.Trader.Core.Exchange.Services; using KLHZ.Trader.Core.Math.Declisions.Services.EventsDetection; using KLHZ.Trader.Core.TG; using KLHZ.Trader.Core.TG.Services; using KLHZ.Trader.Service.Infrastructure; using Microsoft.EntityFrameworkCore; using Prometheus; using Serilog; using Telegram.Bot.Polling; var builder = WebApplication.CreateBuilder(args); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddControllers(); builder.Services.AddMetrics(); builder.Logging.ClearProviders(); builder.Logging.AddSerilog(); builder.Host.ConfigureSerilog( builder.Configuration.GetSection("LokiUrl").Value, serviceName: "klhz.trader", excludeEFLogs: false, excludeMetricsScrapingLogs: true, EFMinLogLevel: Serilog.Events.LogEventLevel.Warning ); builder.Services.AddInvestApiClient((_, settings) => { settings.AccessToken = builder.Configuration.GetSection(nameof(ExchangeConfig))["Token"]; }); builder.Services.AddDbContextFactory(options => { options.UseNpgsql(builder.Configuration.GetConnectionString("PostgresConnection")); }); builder.Services.AddHostedService(); builder.Services.AddHostedService(); builder.Services.AddHostedService(); //builder.Services.AddHostedService(); //builder.Services.AddHostedService(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); for (int i = 0; i < 10; i++) { builder.Services.AddKeyedSingleton(i); } builder.Services.Configure(builder.Configuration.GetSection(nameof(TgBotConfig))); builder.Services.Configure(builder.Configuration.GetSection(nameof(ExchangeConfig))); var app = builder.Build(); app.UseSwagger(); app.UseSwaggerUI(); app.MapMetrics(); app.MapControllers(); app.Run();