slarny4/Demo1/Program.cs
2024-12-02 13:24:02 +03:00

147 lines
6.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<IUserRepository, SQLUserRepositoryImpl>();
builder.Services.AddScoped<IGroupRepository, SQLGroupRepositoryImpl>();
builder.Services.AddScoped<IPresenceRepository, SQLPresenceRepository>();
builder.Services.AddScoped<UserUseCase>();
builder.Services.AddScoped<GroupUseCase>();
builder.Services.AddScoped<UseCasePresence>();
// Добавляем контекст базы данных
builder.Services.AddDbContext<RemoteDatabaseContext>(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<RemoteDatabaseContext>();
DataInitializer.Initialize(dbContext);
}
// Запуск консольного меню
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
var context = services.GetRequiredService<RemoteDatabaseContext>();
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<User> { new User { Id = Guid.NewGuid(), FIO = "User 1" } }; // Используем Guid для Id
var presence = new List<Presence> { 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;
}
}
}
}
}