using Serilog; using Yuna.Website.Server.API; using Yuna.Website.Server.Infrastructure; using Yuna.Website.Server.Services.DeviceService; using Yuna.Website.Server.Services.DeviceSkillService; using Yuna.Website.Server.Services.TokenService; using Yuna.Website.Server.Services.UserService; using Yuna.Website.Server.Storage; using Yuna.Website.Server.Storage.Repositories.Device; using Yuna.Website.Server.Storage.Repositories.Prop; namespace Yuna.Website.Server { public class Starter { public static void LoadConfigs(WebApplicationBuilder builder) { Settings.Init(); } /// /// Логгирование через Serilog: логгирует все в консоль /// /// private static void DefineLogger(WebApplicationBuilder builder) { builder.Logging.ClearProviders(); var logger = new LoggerConfiguration() .WriteTo.Console() /* .WriteTo.File($"{DateTime.Now.ToString("dd_MM_yyyy_HH_mm_ss_f")}.txt") */ //.Filter.ByIncludingOnly(x => x.Level == Serilog.Events.LogEventLevel.Error) .CreateLogger(); builder.Logging.AddSerilog(logger); } private static void DefineDb(WebApplicationBuilder builder) { builder.Services.AddSingleton(); Console.ForegroundColor = ConsoleColor.DarkGreen; Console.WriteLine($"Added Db host: {Settings.DbConnectionStr}"); Console.ResetColor(); } public static void ApplyMigrations(WebApplication app) { //using var scope = app.Services.CreateScope(); //var services = scope.ServiceProvider; //var context = services.GetRequiredService(); //if (context.Database.GetPendingMigrations().Any()) //{ // Console.ForegroundColor = ConsoleColor.DarkGreen; // Console.WriteLine($"Applying migrations..."); // Console.ResetColor(); // context.Database.Migrate(); //} } public static void DefineEndpoints(WebApplication app) { new AuthEndpoints().Define(app); new SkillsEndpoints().Define(app); new DeviceEndpoints().Define(app); //new FacadeEndpoints().Define(app); Console.ForegroundColor = ConsoleColor.DarkGreen; Console.WriteLine("Endpoints registered"); Console.ResetColor(); } public static void DefineHttpClient(WebApplicationBuilder builder) { builder.Services.AddHttpClient(); } /// /// Подключение кеша для журнала состояний /// /// public static void DefineCache(WebApplicationBuilder builder) { //builder.Services.AddStackExchangeRedisCache(x => //{ // x.Configuration = builder.Configuration.GetConnectionString("Redis") // ?? throw new Exception("no redis str"); // x.InstanceName = "api_"; //}); //Console.ForegroundColor = ConsoleColor.DarkGreen; //Console.WriteLine($"Added redis host: {builder.Configuration.GetConnectionString("Redis")}"); //Console.ResetColor(); } public static void DefineMessaging(WebApplicationBuilder builder) { //builder.Services.RegisterEasyNetQ(Settings.RabbitMQHost, s => s.EnableSystemTextJson()); //DefineQueuePublishers(builder); //DefineQueueSubscribers(builder); //DefineRpcClients(builder); //DefineRpcServers(builder); } public static void DefineQueuePublishers(WebApplicationBuilder builder) { //builder.Services.AddSingleton(); } public static void DefineQueueSubscribers(WebApplicationBuilder builder) { //builder.Services.AddSingleton(); } public static void DefineRpcServers(WebApplicationBuilder builder) { //builder.Services.AddHostedService(); } public static void DefineRpcClients(WebApplicationBuilder builder) { } public static void DefineCustomServices(WebApplicationBuilder builder) { builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); } public static void DefineAuth(WebApplicationBuilder builder) { builder.Services.AddAuthorization(); builder.Services .AddAuthentication() .AddCookie(options => { options.Cookie = new() { HttpOnly = true, IsEssential = true, Name = "access_token", MaxAge = TimeSpan.FromDays(180) }; options.SlidingExpiration = false; options.ExpireTimeSpan = Settings.RefreshTokenLifeTime; options.Events = new() { OnRedirectToAccessDenied = HttpHelper.BypassWithStatusCode(403), OnRedirectToLogin = HttpHelper.BypassWithStatusCode(401) }; } ); } public static void RegisterServices(WebApplicationBuilder builder) { LoadConfigs(builder); DefineMessaging(builder); DefineCustomServices(builder); DefineDb(builder); DefineLogger(builder); DefineCache(builder); DefineHttpClient(builder); DefineAuth(builder); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddCors(); //builder.Services.AddAutoMapper(typeof(ApplicationProfile)); } public static void Configure(WebApplication app) { app.UseCors(x => x.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()); app.UseDefaultFiles(); app.UseStaticFiles(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } //app.UseHttpsRedirection(); app.MapFallbackToFile("/index.html"); } } }