using KonSoft.InternalGateway.Aggregations.Base; using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; using Volo.Abp.DependencyInjection; namespace KonSoft.InternalGateway.Aggregations.ApplicationConfiguration; public class AppConfigurationAggregation : AggregateServiceBase, 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 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 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; } /// /// Checks "Administration" clusterId to set the initial data from the AdministrationService. /// Otherwise uses the first available service for the initial application configuration data /// /// /// private static ApplicationConfigurationDto CreateInitialAppConfigDto( IDictionary 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 }; } }