/
afanasevn
/
RedisLab
Обзор
Документация
Войти
/
afanasevn
/
RedisLab
Код
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/RedisLab.Api/Program.cs
101 строка
3 KB
IBS\NAfanasev
Update solution commit
24 июн 2026, 19:46
24 июн 2026, 19:46
40761b1
Код
Авторство
О чём код?
using DotNetEnv; using RedisLab.Api.Middleware; using Microsoft.EntityFrameworkCore; using RedisLab.Api; using RedisLab.Api.Hubs; using RedisLab.Api.Realtime; using RedisLab.Infrastructure; using RedisLab.Infrastructure.Persistence; using RedisLab.Infrastructure.Seeding; // Загружаем .env из корня репозитория (секреты не коммитим в git). var envCandidates = new[] { Path.Combine(Directory.GetCurrentDirectory(), ".env"), Path.Combine(Directory.GetCurrentDirectory(), "..", "..", ".env"), Path.Combine(Directory.GetCurrentDirectory(), "..", "..", "..", ".env"), }; foreach (var envPath in envCandidates) { if (File.Exists(envPath)) { Env.Load(envPath); break; } } #if DEBUG // Если VS/dotnet запустили без launchSettings, ASP.NET Core по умолчанию = Production. Environment.SetEnvironmentVariable( "ASPNETCORE_ENVIRONMENT", Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Development"); Environment.SetEnvironmentVariable( "DOTNET_ENVIRONMENT", Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT") ?? "Development"); #endif var builder = WebApplication.CreateBuilder(args); builder.Configuration.AddEnvironmentVariables(); builder.Services.AddControllers(); builder.Services.AddOpenApi(); builder.Services.AddSignalR(); builder.Services.AddHostedService<ActivityFeedSubscriberHostedService>(); builder.Services.AddInfrastructure(builder.Configuration); builder.Services.AddCors(options => { options.AddPolicy("Client", policy => { policy.WithOrigins("http://localhost:5173") .AllowAnyHeader() .AllowAnyMethod() .AllowCredentials(); }); }); var app = builder.Build(); var startupLogger = app.Services.GetRequiredService<ILoggerFactory>().CreateLogger("Startup"); var environmentName = app.Environment.EnvironmentName; startupLogger.LogInformation( "Окружение: {EnvironmentName}, файлы конфигурации: appsettings.json, appsettings.{EnvironmentName}.json", environmentName, environmentName); await ApplyMigrationsAndSeedAsync(app); if (app.Environment.IsDevelopment()) { app.MapOpenApi(); } app.UseCors("Client"); app.UseAuthentication(); app.UseAuthorization(); app.UseMiddleware<RequestCancellationMiddleware>(); app.MapControllers(); app.MapHub<ActivityHub>("/hubs/activity"); app.Run(); /// <summary> /// Применяет миграции EF и seed при старте API. /// </summary> static async Task ApplyMigrationsAndSeedAsync(WebApplication app) { await using var scope = app.Services.CreateAsyncScope(); var db = scope.ServiceProvider.GetRequiredService<AppDbContext>(); var logger = scope.ServiceProvider.GetRequiredService<ILoggerFactory>().CreateLogger("Startup"); await db.Database.MigrateAsync(); await DataSeeder.SeedAsync(db, logger, CancellationToken.None); } // Точка входа для WebApplicationFactory в integration tests. public partial class Program;