klhztrader/KLHZ.Trader.Service/Program.cs

67 lines
2.1 KiB
C#

using KLHZ.Trader.Core.Common;
using KLHZ.Trader.Core.Common.Messaging.Contracts;
using KLHZ.Trader.Core.Common.Messaging.Services;
using KLHZ.Trader.Core.DataLayer;
using KLHZ.Trader.Core.Declisions.Services;
using KLHZ.Trader.Core.Exchange;
using KLHZ.Trader.Core.Exchange.Services;
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<TraderDbContext>(options =>
{
options.UseNpgsql(builder.Configuration.GetConnectionString("PostgresConnection"));
});
builder.Services.AddHostedService<BotStarter>();
builder.Services.AddHostedService<ExchangeDataReader>();
builder.Services.AddHostedService<Trader>();
builder.Services.AddSingleton<IUpdateHandler, BotMessagesHandler>();
builder.Services.AddSingleton<BotModeSwitcher>();
builder.Services.AddSingleton<IDataBus, DataBus>();
for (int i = 0; i < 10; i++)
{
builder.Services.AddKeyedSingleton<ManagedAccount>(i);
}
builder.Services.Configure<TgBotConfig>(builder.Configuration.GetSection(nameof(TgBotConfig)));
builder.Services.Configure<ExchangeConfig>(builder.Configuration.GetSection(nameof(ExchangeConfig)));
var app = builder.Build();
app.UseSwagger();
app.UseSwaggerUI();
app.MapMetrics();
app.MapControllers();
app.Run();