feat 网关继承微服务Swagger
This commit is contained in:
@ -0,0 +1,10 @@
|
||||
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations;
|
||||
|
||||
namespace KonSoft.InternalGateway.Aggregations.Localization;
|
||||
|
||||
public interface ILocalizationAggregation
|
||||
{
|
||||
string LocalizationRouteName { get; }
|
||||
string LocalizationEndpoint { get; }
|
||||
Task<ApplicationLocalizationDto> GetLocalizationAsync(LocalizationRequest input);
|
||||
}
|
||||
@ -0,0 +1,6 @@
|
||||
using KonSoft.InternalGateway.Aggregations.Base;
|
||||
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations;
|
||||
|
||||
namespace KonSoft.InternalGateway.Aggregations.Localization;
|
||||
|
||||
public interface ILocalizationRemoteService : IAggregateRemoteService<ApplicationLocalizationDto>;
|
||||
@ -0,0 +1,69 @@
|
||||
using KonSoft.InternalGateway.Aggregations.Base;
|
||||
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations;
|
||||
using Volo.Abp.DependencyInjection;
|
||||
|
||||
namespace KonSoft.InternalGateway.Aggregations.Localization;
|
||||
|
||||
public class LocalizationAggregation : AggregateServiceBase<ApplicationLocalizationDto>, ILocalizationAggregation,
|
||||
ITransientDependency
|
||||
{
|
||||
public string LocalizationRouteName => "EshopOnAbpLocalization";
|
||||
public string LocalizationEndpoint => "api/abp/application-localization";
|
||||
protected LocalizationCachedService LocalizationCachedService { get; }
|
||||
|
||||
public LocalizationAggregation(
|
||||
LocalizationCachedService localizationCachedService,
|
||||
ILocalizationRemoteService localizationRemoteService)
|
||||
: base(localizationRemoteService)
|
||||
{
|
||||
LocalizationCachedService = localizationCachedService;
|
||||
}
|
||||
|
||||
public async Task<ApplicationLocalizationDto> GetLocalizationAsync(LocalizationRequest input)
|
||||
{
|
||||
// Check the cache service
|
||||
var cachedLocalization = LocalizationCachedService
|
||||
.GetManyAsync(input.Endpoints.Keys.ToArray());
|
||||
|
||||
// Compare cache with input service list
|
||||
var missingLocalizationKeys = GetMissingServiceKeys(cachedLocalization, input.Endpoints);
|
||||
|
||||
if (missingLocalizationKeys.Count != 0)
|
||||
{
|
||||
// Make request to remote localization service to get missing localizations
|
||||
var remoteLocalizationResults =
|
||||
await GetMultipleFromRemoteAsync(missingLocalizationKeys, input.Endpoints);
|
||||
|
||||
// Update localization cache
|
||||
foreach (var result in remoteLocalizationResults)
|
||||
{
|
||||
LocalizationCachedService.Add(result.Key, result.Value);
|
||||
}
|
||||
|
||||
cachedLocalization = LocalizationCachedService
|
||||
.GetManyAsync(input.Endpoints.Keys.ToArray());
|
||||
}
|
||||
|
||||
//merge result
|
||||
var mergedResult = MergeLocalizationData(cachedLocalization);
|
||||
|
||||
//return result
|
||||
return mergedResult;
|
||||
}
|
||||
|
||||
private static ApplicationLocalizationDto MergeLocalizationData(
|
||||
IDictionary<string, ApplicationLocalizationDto> resourceDictionary)
|
||||
{
|
||||
var localizationDto = new ApplicationLocalizationDto();
|
||||
|
||||
foreach (var localization in resourceDictionary)
|
||||
{
|
||||
foreach (var resource in localization.Value.Resources)
|
||||
{
|
||||
localizationDto.Resources.TryAdd(resource.Key, resource.Value);
|
||||
}
|
||||
}
|
||||
|
||||
return localizationDto;
|
||||
}
|
||||
}
|
||||
@ -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.Localization;
|
||||
|
||||
public class LocalizationCachedService(IMemoryCache localizationCache)
|
||||
: CachedServiceBase<ApplicationLocalizationDto>(localizationCache), ISingletonDependency;
|
||||
@ -0,0 +1,18 @@
|
||||
using KonSoft.InternalGateway.Aggregations.Base;
|
||||
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations;
|
||||
using Volo.Abp.DependencyInjection;
|
||||
using Volo.Abp.Json;
|
||||
|
||||
namespace KonSoft.InternalGateway.Aggregations.Localization;
|
||||
|
||||
public class LocalizationRemoteService : AggregateRemoteServiceBase<ApplicationLocalizationDto>,
|
||||
ILocalizationRemoteService, ITransientDependency
|
||||
{
|
||||
public LocalizationRemoteService(
|
||||
IHttpContextAccessor httpContextAccessor,
|
||||
IJsonSerializer jsonSerializer,
|
||||
ILogger<AggregateRemoteServiceBase<ApplicationLocalizationDto>> logger)
|
||||
: base(httpContextAccessor, jsonSerializer, logger)
|
||||
{
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
using KonSoft.InternalGateway.Aggregations.Base;
|
||||
|
||||
namespace KonSoft.InternalGateway.Aggregations.Localization;
|
||||
|
||||
public class LocalizationRequest : IRequestInput
|
||||
{
|
||||
public Dictionary<string, string> Endpoints { get; } = new();
|
||||
public string CultureName { get; set; }
|
||||
|
||||
public LocalizationRequest(string cultureName)
|
||||
{
|
||||
CultureName = cultureName;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user