feat 网关继承微服务Swagger
This commit is contained in:
@ -0,0 +1,91 @@
|
||||
using KonSoft.InternalGateway.Aggregations.Base;
|
||||
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations;
|
||||
using Volo.Abp.DependencyInjection;
|
||||
|
||||
namespace KonSoft.InternalGateway.Aggregations.ApplicationConfiguration;
|
||||
|
||||
public class AppConfigurationAggregation : AggregateServiceBase<ApplicationConfigurationDto>,
|
||||
IAppConfigurationAggregation, ITransientDependency
|
||||
{
|
||||
public string AppConfigRouteName => "EshopOnAbpApplicationConfiguration";
|
||||
public string AppConfigEndpoint => "api/abp/application-configuration";
|
||||
|
||||
protected IAppConfigurationRemoteService AppConfigurationRemoteService { get; }
|
||||
|
||||
public AppConfigurationAggregation(
|
||||
IAppConfigurationRemoteService appConfigurationRemoteService) : base(
|
||||
appConfigurationRemoteService)
|
||||
{
|
||||
AppConfigurationRemoteService = appConfigurationRemoteService;
|
||||
}
|
||||
|
||||
public async Task<ApplicationConfigurationDto> GetAppConfigurationAsync(AppConfigurationRequest input)
|
||||
{
|
||||
var remoteAppConfigurationResults =
|
||||
await AppConfigurationRemoteService.GetMultipleAsync(input.Endpoints);
|
||||
|
||||
//merge only application configuration settings data
|
||||
var mergedResult = MergeAppConfigurationSettingsData(remoteAppConfigurationResults);
|
||||
|
||||
//return result
|
||||
return mergedResult;
|
||||
}
|
||||
|
||||
private static ApplicationConfigurationDto MergeAppConfigurationSettingsData(
|
||||
IDictionary<string, ApplicationConfigurationDto> appConfigurations)
|
||||
{
|
||||
var appConfigurationDto = CreateInitialAppConfigDto(appConfigurations);
|
||||
|
||||
foreach (var (_, appConfig) in appConfigurations)
|
||||
{
|
||||
foreach (var resource in appConfig.Setting.Values)
|
||||
{
|
||||
appConfigurationDto.Setting.Values.TryAdd(resource.Key, resource.Value);
|
||||
}
|
||||
}
|
||||
|
||||
return appConfigurationDto;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks "Administration" clusterId to set the initial data from the AdministrationService.
|
||||
/// Otherwise uses the first available service for the initial application configuration data
|
||||
/// </summary>
|
||||
/// <param name="appConfigurations"></param>
|
||||
/// <returns></returns>
|
||||
private static ApplicationConfigurationDto CreateInitialAppConfigDto(
|
||||
IDictionary<string, ApplicationConfigurationDto> appConfigurations
|
||||
)
|
||||
{
|
||||
if (appConfigurations.Count == 0)
|
||||
{
|
||||
return new ApplicationConfigurationDto();
|
||||
}
|
||||
|
||||
if (appConfigurations.TryGetValue("Administration_AppConfig", out var administrationServiceData))
|
||||
{
|
||||
return MapServiceData(administrationServiceData);
|
||||
}
|
||||
|
||||
return MapServiceData(appConfigurations.First().Value);
|
||||
}
|
||||
|
||||
private static ApplicationConfigurationDto MapServiceData(ApplicationConfigurationDto appConfiguration)
|
||||
{
|
||||
return new ApplicationConfigurationDto
|
||||
{
|
||||
Localization = appConfiguration.Localization,
|
||||
Auth = appConfiguration.Auth,
|
||||
Clock = appConfiguration.Clock,
|
||||
Setting = appConfiguration.Setting,
|
||||
Features = appConfiguration.Features,
|
||||
Timing = appConfiguration.Timing,
|
||||
CurrentTenant = appConfiguration.CurrentTenant,
|
||||
CurrentUser = appConfiguration.CurrentUser,
|
||||
ExtraProperties = appConfiguration.ExtraProperties,
|
||||
GlobalFeatures = appConfiguration.GlobalFeatures,
|
||||
MultiTenancy = appConfiguration.MultiTenancy,
|
||||
ObjectExtensions = appConfiguration.ObjectExtensions
|
||||
};
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,9 @@
|
||||
using KonSoft.InternalGateway.Aggregations.Base;
|
||||
using Microsoft.Extensions.Caching.Memory;
|
||||
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations;
|
||||
using Volo.Abp.DependencyInjection;
|
||||
|
||||
namespace KonSoft.InternalGateway.Aggregations.ApplicationConfiguration;
|
||||
|
||||
public class AppConfigurationCachedService(IMemoryCache applicationConfigurationCache)
|
||||
: CachedServiceBase<ApplicationConfigurationDto>(applicationConfigurationCache), ISingletonDependency;
|
||||
@ -0,0 +1,13 @@
|
||||
using KonSoft.InternalGateway.Aggregations.Base;
|
||||
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations;
|
||||
using Volo.Abp.DependencyInjection;
|
||||
using Volo.Abp.Json;
|
||||
|
||||
namespace KonSoft.InternalGateway.Aggregations.ApplicationConfiguration;
|
||||
|
||||
public class AppConfigurationRemoteService(
|
||||
IHttpContextAccessor httpContextAccessor,
|
||||
IJsonSerializer jsonSerializer,
|
||||
ILogger<AggregateRemoteServiceBase<ApplicationConfigurationDto>> logger)
|
||||
: AggregateRemoteServiceBase<ApplicationConfigurationDto>(httpContextAccessor, jsonSerializer, logger),
|
||||
IAppConfigurationRemoteService, ITransientDependency;
|
||||
@ -0,0 +1,8 @@
|
||||
using KonSoft.InternalGateway.Aggregations.Base;
|
||||
|
||||
namespace KonSoft.InternalGateway.Aggregations.ApplicationConfiguration;
|
||||
|
||||
public class AppConfigurationRequest : IRequestInput
|
||||
{
|
||||
public Dictionary<string, string> Endpoints { get; } = new();
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations;
|
||||
|
||||
namespace KonSoft.InternalGateway.Aggregations.ApplicationConfiguration;
|
||||
|
||||
public interface IAppConfigurationAggregation
|
||||
{
|
||||
string AppConfigRouteName { get; }
|
||||
string AppConfigEndpoint { get; }
|
||||
Task<ApplicationConfigurationDto> GetAppConfigurationAsync(AppConfigurationRequest input);
|
||||
}
|
||||
@ -0,0 +1,6 @@
|
||||
using KonSoft.InternalGateway.Aggregations.Base;
|
||||
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations;
|
||||
|
||||
namespace KonSoft.InternalGateway.Aggregations.ApplicationConfiguration;
|
||||
|
||||
public interface IAppConfigurationRemoteService : IAggregateRemoteService<ApplicationConfigurationDto>;
|
||||
Reference in New Issue
Block a user