forked from Alexey/DAS_2024_1
128 lines
3.9 KiB
C#
128 lines
3.9 KiB
C#
|
using DSaC.Database;
|
||
|
using Microsoft.EntityFrameworkCore;
|
||
|
using Microsoft.OpenApi.Models;
|
||
|
using NLog.Config;
|
||
|
using NLog.Extensions.Logging;
|
||
|
using NLog.Targets;
|
||
|
using PIHelperSh.Configuration;
|
||
|
using PIHelperSh.Configuration.Attributes;
|
||
|
using System.Reflection;
|
||
|
using LogLevel = NLog.LogLevel;
|
||
|
|
||
|
[TrackedType]
|
||
|
public class Program
|
||
|
{
|
||
|
private static WebApplication? app;
|
||
|
|
||
|
[Constant(BlockName = "Database")]
|
||
|
private static string ConnectionString;
|
||
|
|
||
|
[Constant(BlockName = "GatewaySettings")]
|
||
|
private static string AppPrefix;
|
||
|
public static void Main(string[] args)
|
||
|
{
|
||
|
var builder = WebApplication.CreateBuilder(args);
|
||
|
|
||
|
ConfigureLogger(builder);
|
||
|
|
||
|
ConfigureServices(builder);
|
||
|
|
||
|
ConfigureDatabase(builder);
|
||
|
|
||
|
app = builder.Build();
|
||
|
|
||
|
var t = MigrateDatabase();
|
||
|
|
||
|
app.UseSwagger(c =>
|
||
|
{
|
||
|
if (!string.IsNullOrEmpty(AppPrefix))
|
||
|
{
|
||
|
//c.RouteTemplate = AppPrefix + "/swagger/{documentName}/swagger.json";
|
||
|
|
||
|
c.PreSerializeFilters.Add((swaggerDoc, httpReq) =>
|
||
|
{
|
||
|
swaggerDoc.Servers = new List<OpenApiServer> { new OpenApiServer { Url = $"{httpReq.Scheme}://{httpReq.Host.Value}/{AppPrefix}" } };
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
app.UseSwaggerUI(c =>
|
||
|
{
|
||
|
//if (!string.IsNullOrEmpty(AppPrefix))
|
||
|
//{
|
||
|
// c.SwaggerEndpoint($"/{AppPrefix}/swagger/v1/swagger.json", $"APP API");
|
||
|
// c.RoutePrefix = $"{AppPrefix}/swagger";
|
||
|
//}
|
||
|
});
|
||
|
|
||
|
app.UseHttpsRedirection();
|
||
|
|
||
|
app.UseAuthorization();
|
||
|
|
||
|
app.MapControllers();
|
||
|
|
||
|
t.Wait();
|
||
|
|
||
|
app.Run();
|
||
|
}
|
||
|
|
||
|
private static void ConfigureLogger(WebApplicationBuilder builder)
|
||
|
{
|
||
|
var nLogConfig = new LoggingConfiguration();
|
||
|
var logConsole = new ConsoleTarget();
|
||
|
var blackhole = new NullTarget();
|
||
|
|
||
|
var logFile = new FileTarget()
|
||
|
{
|
||
|
FileName = "${basedir}/logs/${shortdate}_logs.log"
|
||
|
};
|
||
|
|
||
|
nLogConfig.AddRule(LogLevel.Trace, LogLevel.Trace, blackhole, "Microsoft.AspNetCore.*", true);
|
||
|
nLogConfig.AddRule(LogLevel.Info, LogLevel.Warn, logFile, "Microsoft.EntityFrameworkCore.*", true);
|
||
|
nLogConfig.AddRule(LogLevel.Info, LogLevel.Warn, logFile, "Microsoft.AspNetCore.*", true);
|
||
|
nLogConfig.AddRule(LogLevel.Info, LogLevel.Warn, logFile, "System.Net.Http.HttpClient.Refit.*", true);
|
||
|
nLogConfig.AddRule(LogLevel.Info, LogLevel.Error, logConsole);
|
||
|
nLogConfig.AddRule(LogLevel.Debug, LogLevel.Error, logFile);
|
||
|
|
||
|
builder.Logging.ClearProviders();
|
||
|
builder.Services.AddLogging(m => m.AddNLog(nLogConfig));
|
||
|
}
|
||
|
|
||
|
private static void ConfigureServices(WebApplicationBuilder builder)
|
||
|
{
|
||
|
builder.Services.AddConfigurations(builder.Configuration);
|
||
|
builder.Configuration.AddConstants();
|
||
|
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
|
||
|
|
||
|
builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblyContaining<Program>());
|
||
|
|
||
|
builder.Services.AddControllers().AddNewtonsoftJson();
|
||
|
|
||
|
builder.Services.AddEndpointsApiExplorer();
|
||
|
builder.Services.AddSwaggerGen(c =>
|
||
|
{
|
||
|
c.SwaggerDoc("v1", new OpenApiInfo
|
||
|
{
|
||
|
Title = "Distributed computing and applications",
|
||
|
Version = "v1",
|
||
|
Description = ""
|
||
|
});
|
||
|
|
||
|
//c.EnableAnnotations();
|
||
|
});
|
||
|
}
|
||
|
|
||
|
private static void ConfigureDatabase(WebApplicationBuilder builder)
|
||
|
{
|
||
|
builder.Services.AddDbContext<DsacContext>(options =>
|
||
|
{
|
||
|
options.UseNpgsql(ConnectionString);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
private static async Task MigrateDatabase()
|
||
|
{
|
||
|
var context = app?.Services.CreateScope().ServiceProvider.GetService<DsacContext>();
|
||
|
if(context != null)
|
||
|
await context.Database.MigrateAsync();
|
||
|
}
|
||
|
}
|