53 lines
2.2 KiB
C#
53 lines
2.2 KiB
C#
using System.Text.Json;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Tiku.Application.Tenancy;
|
|
using Tiku.Domain.Common;
|
|
using Tiku.Domain.Operations;
|
|
using Tiku.Infrastructure.Persistence;
|
|
|
|
namespace Tiku.Infrastructure.Tenancy;
|
|
|
|
internal sealed class PublicTenantConfigurationQuery(ITenancyPersistence tenancyPersistence,
|
|
ITenantAdministrationPersistence tenantAdministrationPersistence)
|
|
: IPublicTenantConfigurationQuery
|
|
{
|
|
public async Task<PublicTenantConfiguration> GetAsync(
|
|
Guid tenantId,
|
|
CancellationToken cancellationToken = default)
|
|
{
|
|
var branding = await tenancyPersistence.TenantBrandings.AsNoTracking()
|
|
.SingleOrDefaultAsync(item => item.TenantId == tenantId, cancellationToken);
|
|
var settings = await tenancyPersistence.TenantSettings.AsNoTracking()
|
|
.SingleOrDefaultAsync(item => item.TenantId == tenantId, cancellationToken);
|
|
var theme = await tenantAdministrationPersistence.TenantThemeConfigs.AsNoTracking()
|
|
.SingleOrDefaultAsync(
|
|
item => item.TenantId == tenantId && item.Status == TenantThemeConfigStatus.Published,
|
|
cancellationToken);
|
|
|
|
return new PublicTenantConfiguration(
|
|
branding?.BrandName,
|
|
branding?.ShortName,
|
|
branding?.Slogan,
|
|
branding?.LogoUrl,
|
|
branding?.FaviconUrl,
|
|
branding?.ServiceWechat,
|
|
branding?.ServiceAccountName,
|
|
IsNonEmptyObject(theme?.ActiveTheme) ? theme!.ActiveTheme.Clone() : CloneOrDefault(branding?.Theme),
|
|
IsNonEmptyObject(theme?.ActivePublicAssets)
|
|
? theme!.ActivePublicAssets.Clone()
|
|
: CloneOrDefault(branding?.PublicAssets),
|
|
CloneOrDefault(settings?.FeatureFlags),
|
|
CloneOrDefault(settings?.AdminFeatureFlags),
|
|
CloneOrDefault(settings?.PublicConfig));
|
|
}
|
|
|
|
private static bool IsNonEmptyObject(JsonElement? value)
|
|
{
|
|
return value is { ValueKind: JsonValueKind.Object } json && json.EnumerateObject().Any();
|
|
}
|
|
|
|
private static JsonElement CloneOrDefault(JsonElement? value)
|
|
{
|
|
return value.HasValue ? value.Value.Clone() : JsonDefaults.Object();
|
|
}
|
|
} |