Implemented plugin loading via di on the api server. Fixed plugin loading in the client

This commit is contained in:
2025-02-24 20:03:37 +01:00
parent 69df761bf4
commit 3dd5d2958a
18 changed files with 157 additions and 415 deletions

View File

@@ -1,46 +0,0 @@
using Microsoft.OpenApi.Models;
using MoonCore.Services;
using Moonlight.ApiServer.Configuration;
using Moonlight.ApiServer.Interfaces.Startup;
namespace Moonlight.ApiServer.Implementations.Startup;
public class ApiDocsStartup : IAppStartup, IEndpointStartup
{
private readonly ILogger<ApiDocsStartup> Logger;
private readonly AppConfiguration AppConfiguration;
public ApiDocsStartup(ILogger<ApiDocsStartup> logger, AppConfiguration appConfiguration)
{
Logger = logger;
AppConfiguration = appConfiguration;
}
public Task BuildApp(IHostApplicationBuilder builder)
{
if(!AppConfiguration.Development.EnableApiDocs)
return Task.CompletedTask;
builder.Services.AddEndpointsApiExplorer();
// Configure swagger api specification generator and set the document title for the api docs to use
builder.Services.AddSwaggerGen(options => options.SwaggerDoc("main", new OpenApiInfo()
{
Title = "Moonlight API"
}));
return Task.CompletedTask;
}
public Task ConfigureApp(IApplicationBuilder app) => Task.CompletedTask;
public Task ConfigureEndpoints(IEndpointRouteBuilder routeBuilder)
{
if(!AppConfiguration.Development.EnableApiDocs)
return Task.CompletedTask;
routeBuilder.MapSwagger("/api/swagger/{documentName}");
return Task.CompletedTask;
}
}

View File

@@ -1,24 +0,0 @@
using Moonlight.ApiServer.Interfaces.Startup;
using Moonlight.ApiServer.Services;
namespace Moonlight.ApiServer.Implementations.Startup;
public class CoreAssetStartup : IAppStartup
{
private readonly BundleService BundleService;
public CoreAssetStartup(BundleService bundleService)
{
BundleService = bundleService;
}
public Task BuildApp(IHostApplicationBuilder builder)
{
BundleService.BundleCss("css/core.min.css");
return Task.CompletedTask;
}
public Task ConfigureApp(IApplicationBuilder app)
=> Task.CompletedTask;
}

View File

@@ -1,15 +0,0 @@
using Moonlight.ApiServer.Database;
using Moonlight.ApiServer.Helpers;
using Moonlight.ApiServer.Interfaces.Startup;
namespace Moonlight.ApiServer.Implementations.Startup;
public class CoreDatabaseStartup : IDatabaseStartup
{
public Task ConfigureDatabase(DatabaseContextCollection collection)
{
collection.Add<CoreDataContext>();
return Task.CompletedTask;
}
}

View File

@@ -0,0 +1,66 @@
using Microsoft.OpenApi.Models;
using Moonlight.ApiServer.Configuration;
using Moonlight.ApiServer.Database;
using Moonlight.ApiServer.Helpers;
using Moonlight.ApiServer.Interfaces.Startup;
using Moonlight.ApiServer.Services;
namespace Moonlight.ApiServer.Implementations.Startup;
public class CoreStartup : IPluginStartup
{
private readonly AppConfiguration Configuration;
private readonly BundleService BundleService;
public CoreStartup(AppConfiguration configuration, BundleService bundleService)
{
Configuration = configuration;
BundleService = bundleService;
}
public Task BuildApplication(IHostApplicationBuilder builder)
{
#region Api Docs
if (Configuration.Development.EnableApiDocs)
{
builder.Services.AddEndpointsApiExplorer();
// Configure swagger api specification generator and set the document title for the api docs to use
builder.Services.AddSwaggerGen(options => options.SwaggerDoc("main", new OpenApiInfo()
{
Title = "Moonlight API"
}));
}
#endregion
#region Assets
BundleService.BundleCss("css/core.min.css");
#endregion
return Task.CompletedTask;
}
public Task ConfigureApplication(IApplicationBuilder app)
{
return Task.CompletedTask;
}
public Task ConfigureDatabase(DatabaseContextCollection collection)
{
collection.Add<CoreDataContext>();
return Task.CompletedTask;
}
public Task ConfigureEndpoints(IEndpointRouteBuilder routeBuilder)
{
if(Configuration.Development.EnableApiDocs)
routeBuilder.MapSwagger("/api/swagger/{documentName}");
return Task.CompletedTask;
}
}