using ListmonkIntegration.Models; using ListmonkIntegration.Services; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Options; var builder = WebApplication.CreateBuilder(args); // Глобальный обработчик необработанных исключений AppDomain.CurrentDomain.UnhandledException += (sender, args) => { var exception = args.ExceptionObject as Exception; Console.WriteLine($"[CRITICAL] Unhandled exception: {exception?.Message}"); Console.WriteLine($"[CRITICAL] Stack trace: {exception?.StackTrace}"); if (exception?.InnerException != null) { Console.WriteLine($"[CRITICAL] Inner exception: {exception.InnerException.Message}"); } }; // Добавляем сервисы Razor Pages builder.Services.AddRazorPages(); // Настройка HttpClient builder.Services.AddHttpClient(); // Чтение настроек из appsettings.json builder.Services.Configure( builder.Configuration.GetSection("Listmonk")); // Регистрация сервиса Listmonk builder.Services.AddSingleton(sp => { var httpClientFactory = sp.GetRequiredService(); var settings = sp.GetRequiredService>().Value; var logger = sp.GetRequiredService>(); var httpClient = httpClientFactory.CreateClient(); return new ListmonkService(httpClient, settings, logger); }); var app = builder.Build(); // Настройка конвейера HTTP-запросов if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapGet("/api/templates/{id}/preview", async (int id, IListmonkService service, ILogger logger) => { logger.LogInformation($"API: Getting template {id} preview"); var body = await service.GetTemplateBodyAsync(id); return Results.Json(new { body }); }); // Кастомный маршрут для API атрибутов // API endpoint для получения атрибутов списка app.MapGet("/api/lists/{id}/attributes", async (int id, IListmonkService service, ILogger logger) => { logger.LogInformation($"API: Getting attributes for list {id}"); try { var attributes = await service.GetListAttributesAsync(id); logger.LogInformation($"API: Found {attributes.Count} attributes"); return Results.Json(attributes); } catch (Exception ex) { logger.LogError(ex, "Error getting attributes"); return Results.Json(new List(), statusCode: 500); } }); app.MapRazorPages(); app.Run();