using FictionArchive.Service.NovelService.GraphQL; using FictionArchive.Service.NovelService.Services; using FictionArchive.Service.NovelService.Services.SourceAdapters; using FictionArchive.Service.NovelService.Services.SourceAdapters.Novelpia; using FictionArchive.Service.Shared.Services.GraphQL; using Microsoft.EntityFrameworkCore; namespace FictionArchive.Service.NovelService; public class Program { public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); builder.Services.AddMemoryCache(); #region GraphQL builder.Services.AddGraphQLServer() .AddQueryType() .AddMutationType() .AddType() .AddMutationConventions(applyToAllMutations: true) .AddFiltering(opt => opt.AddDefaults().BindRuntimeType()) .AddSorting() .AddProjections(); #endregion #region Database builder.Services.AddDbContext(opt => { opt.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection")); }); #endregion #region Source Adapters builder.Services.Configure(builder.Configuration.GetSection("Novelpia")); builder.Services.AddHttpClient(client => { client.BaseAddress = new Uri("https://novelpia.com"); }); builder.Services.AddHttpClient(client => { client.BaseAddress = new Uri("https://novelpia.com"); }) .AddHttpMessageHandler(); #endregion builder.Services.AddHealthChecks(); var app = builder.Build(); // Update database using (var scope = app.Services.CreateScope()) { var dbContext = scope.ServiceProvider.GetRequiredService(); dbContext.UpdateDatabase(); } app.UseHttpsRedirection(); app.MapHealthChecks("/healthz"); app.MapGraphQL(); app.Run(); } }