using Demo.Data.RemoteData.RemoteDataBase; using Demo.Data.Repository; using Demo.Domain.UseCase; using Demo.UI; using Microsoft.AspNetCore.Builder; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Runtime.InteropServices; using System.Threading.Tasks; using Demo.Domain.Models; namespace Demo { class Program { static async Task Main(string[] args) { var builder = WebApplication.CreateBuilder(args); // Добавляем сервисы в контейнер builder.Services.AddControllers(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); // Добавляем контекст базы данных builder.Services.AddDbContext(options => options.UseNpgsql("Host=45.67.56.214;Port=5421;Username=user5;Database=user5;Password=EtEJqhsf")); // Добавляем Swagger builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); var app = builder.Build(); // Настройка конвейера обработки запросов if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); // Инициализация данных using (var scope = app.Services.CreateScope()) { var services = scope.ServiceProvider; var dbContext = services.GetRequiredService(); DataInitializer.Initialize(dbContext); } // Запуск консольного меню using (var scope = app.Services.CreateScope()) { var services = scope.ServiceProvider; var context = services.GetRequiredService(); var userRepository = new SQLUserRepositoryImpl(context); var groupRepository = new SQLGroupRepositoryImpl(context); var presenceRepository = new SQLPresenceRepository(context); var userUseCase = new UserUseCase(userRepository); var groupUseCase = new GroupUseCase(groupRepository); var presenceUseCase = new UseCasePresence(presenceRepository); var userConsole = new UserConsole(userUseCase); var groupConsole = new GroupConsole(groupUseCase); var presenceConsole = new PresenceConsole(presenceUseCase, userUseCase); // Передаем userUseCase var excelExporter = new ExcelExporter(); // Создаем данные для экспорта var group = new Group { Name = "Group 1" }; var users = new List { new User { Id = Guid.NewGuid(), FIO = "User 1" } }; // Используем Guid для Id var presence = new List { new Presence { UserId = users[0].Id, IsAttendance = true } }; // Указываем путь для сохранения файла string directoryPath = @"C:\Users\class_Student\Source\Repos\slarny4\Demo1\Excel"; string filePath = Path.Combine(directoryPath, "GroupInfo.xlsx"); // Проверяем, существует ли директория, и если нет, создаем её if (!Directory.Exists(directoryPath)) { Directory.CreateDirectory(directoryPath); } // Вызываем метод для экспорта данных в Excel excelExporter.ExportGroupInfoToExcel(group, users, presence, filePath); var mainMenu = new MainMenu(userConsole, groupConsole, presenceConsole, excelExporter, groupUseCase, userUseCase, presenceUseCase); mainMenu.ShowMenu(); } // Запуск веб-сервера асинхронно var url = "http://localhost:5000"; var serverTask = app.RunAsync(url); // Открытие браузера с Swagger UI после запуска сервера await Task.Delay(1000); // Небольшая задержка, чтобы сервер успел запуститься OpenBrowser(url + "/swagger"); // Ожидание завершения сервера await serverTask; } private static void OpenBrowser(string url) { try { Process.Start(url); } catch { // Если запуск через Process.Start не работает, попробуем другой метод if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { url = url.Replace("&", "^&"); Process.Start(new ProcessStartInfo("cmd", $"/c start {url}") { CreateNoWindow = true }); } else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { Process.Start("xdg-open", url); } else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { Process.Start("open", url); } else { throw; } } } } }