50 lines
1.7 KiB
C#
50 lines
1.7 KiB
C#
var builder = WebApplication.CreateBuilder(args);
|
|
|
|
builder.AddServiceDefaults();
|
|
|
|
builder.Services.AddGrpc();
|
|
builder.Services.AddControllers();
|
|
|
|
// Application specific services
|
|
builder.Services.AddHealthChecks(builder.Configuration);
|
|
builder.Services.AddDbContexts(builder.Configuration);
|
|
builder.Services.AddApplicationOptions(builder.Configuration);
|
|
builder.Services.AddIntegrationServices();
|
|
|
|
builder.Services.AddTransient<OrderStatusChangedToAwaitingValidationIntegrationEventHandler>();
|
|
builder.Services.AddTransient<OrderStatusChangedToPaidIntegrationEventHandler>();
|
|
|
|
var app = builder.Build();
|
|
|
|
if (!await app.CheckHealthAsync())
|
|
{
|
|
return;
|
|
}
|
|
|
|
app.UseServiceDefaults();
|
|
|
|
app.MapGet("/", () => Results.Redirect("/swagger"));
|
|
|
|
app.MapControllers();
|
|
app.MapGrpcService<CatalogService>();
|
|
|
|
var eventBus = app.Services.GetRequiredService<IEventBus>();
|
|
|
|
eventBus.Subscribe<OrderStatusChangedToAwaitingValidationIntegrationEvent, OrderStatusChangedToAwaitingValidationIntegrationEventHandler>();
|
|
eventBus.Subscribe<OrderStatusChangedToPaidIntegrationEvent, OrderStatusChangedToPaidIntegrationEventHandler>();
|
|
|
|
// REVIEW: This is done fore development east but shouldn't be here in production
|
|
using (var scope = app.Services.CreateScope())
|
|
{
|
|
var context = scope.ServiceProvider.GetRequiredService<CatalogContext>();
|
|
var settings = app.Services.GetService<IOptions<CatalogSettings>>();
|
|
var logger = app.Services.GetService<ILogger<CatalogContextSeed>>();
|
|
await context.Database.MigrateAsync();
|
|
|
|
await new CatalogContextSeed().SeedAsync(context, app.Environment, settings, logger);
|
|
var integEventContext = scope.ServiceProvider.GetRequiredService<IntegrationEventLogContext>();
|
|
await integEventContext.Database.MigrateAsync();
|
|
}
|
|
|
|
await app.RunAsync();
|