47 lines
2.1 KiB
C#
47 lines
2.1 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using Tiku.Application.Tenancy;
|
|
using Tiku.Domain.Common;
|
|
using Tiku.Domain.Operations;
|
|
using Tiku.Domain.Tenancy;
|
|
using Tiku.Infrastructure.Persistence;
|
|
|
|
namespace Tiku.Infrastructure.Tenancy;
|
|
|
|
internal sealed class PublicTenantConfigurationQuery(TikuDbContext dbContext)
|
|
: IPublicTenantConfigurationQuery
|
|
{
|
|
public async Task<PublicTenantConfiguration> GetAsync(
|
|
Guid tenantId,
|
|
CancellationToken cancellationToken = default)
|
|
{
|
|
var branding = await dbContext.TenantBrandings.AsNoTracking()
|
|
.SingleOrDefaultAsync(item => item.TenantId == tenantId, cancellationToken);
|
|
var settings = await dbContext.TenantSettings.AsNoTracking()
|
|
.SingleOrDefaultAsync(item => item.TenantId == tenantId, cancellationToken);
|
|
var theme = await dbContext.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(System.Text.Json.JsonElement? value) =>
|
|
value is { ValueKind: System.Text.Json.JsonValueKind.Object } json && json.EnumerateObject().Any();
|
|
|
|
private static System.Text.Json.JsonElement CloneOrDefault(System.Text.Json.JsonElement? value) =>
|
|
value.HasValue ? value.Value.Clone() : JsonDefaults.Object();
|
|
}
|