63 lines
1.8 KiB
C#
63 lines
1.8 KiB
C#
using System.Text.Json;
|
|
using AccessQueueService.Data;
|
|
using AccessQueueService.Models;
|
|
using AccessQueueService.Services;
|
|
using Serilog;
|
|
|
|
var builder = WebApplication.CreateBuilder(args);
|
|
|
|
// Add Serilog configuration from appsettings and serilog.json
|
|
builder.Host.UseSerilog((context, services, configuration) =>
|
|
{
|
|
configuration
|
|
.ReadFrom.Configuration(context.Configuration)
|
|
.ReadFrom.Services(services)
|
|
.Enrich.FromLogContext();
|
|
});
|
|
|
|
builder.Services.AddControllers();
|
|
builder.Services.AddEndpointsApiExplorer();
|
|
builder.Services.AddSwaggerGen();
|
|
builder.Services.AddSingleton<IAccessService, AccessService>();
|
|
builder.Services.AddSingleton<AccessQueueRepository>(sp =>
|
|
{
|
|
string? filePath = builder.Configuration.GetValue<string>("AccessQueue:BackupFilePath");
|
|
if (!string.IsNullOrWhiteSpace(filePath) && File.Exists(filePath))
|
|
{
|
|
try
|
|
{
|
|
string json = File.ReadAllText(filePath);
|
|
var state = JsonSerializer.Deserialize<AccessQueueRepositoryState>(json);
|
|
if (state == null)
|
|
{
|
|
Console.WriteLine($"Failed to load state from {filePath}. Deserialized object was null.");
|
|
return new AccessQueueRepository();
|
|
}
|
|
return AccessQueueRepository.FromState(state);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"Failed to load state from {filePath}. Error message: {ex.Message}");
|
|
}
|
|
}
|
|
return new AccessQueueRepository();
|
|
});
|
|
builder.Services.AddHostedService<AccessCleanupBackgroundService>();
|
|
builder.Services.AddHostedService<AccessQueueSerializerService>();
|
|
|
|
var app = builder.Build();
|
|
|
|
if (app.Environment.IsDevelopment())
|
|
{
|
|
app.UseSwagger();
|
|
app.UseSwaggerUI();
|
|
}
|
|
|
|
app.UseHttpsRedirection();
|
|
|
|
app.UseAuthorization();
|
|
|
|
app.MapControllers();
|
|
|
|
app.Run();
|