Files
tiku-backend.net/Tiku.Infrastructure/Tenancy/PublicTenantConfigurationQuery.cs
xiong 33375a38d7
Some checks failed
ci / release-gate (push) Has been cancelled
refactor(architecture): harden module boundaries
2026-08-04 12:10:36 +08:00

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();
}
}