using System.Text.Json; using Tiku.Domain.Common; namespace Tiku.Domain.Tenancy; public sealed class TenantDomain : AuditableTenantEntity { public string Host { get; set; } = string.Empty; public TenantDomainType DomainType { get; set; } = TenantDomainType.Custom; public TenantDomainStatus Status { get; set; } = TenantDomainStatus.Pending; public bool IsPrimary { get; set; } public string? VerificationToken { get; set; } public DateTimeOffset? VerifiedAt { get; set; } } public enum TenantDomainType { System, Custom, Miniapp } public enum TenantDomainStatus { Pending, Active, Failed, Disabled } public sealed class TenantBranding : IHasTimestamps { public Guid TenantId { get; set; } public string BrandName { get; set; } = string.Empty; public string? ShortName { get; set; } public string? Slogan { get; set; } public string? OrganizationName { get; set; } public string? LogoUrl { get; set; } public string? FaviconUrl { get; set; } public string? ServiceWechat { get; set; } public string? ServiceAccountName { get; set; } public JsonElement Theme { get; set; } = JsonDefaults.Object(); public JsonElement PublicAssets { get; set; } = JsonDefaults.Object(); public DateTimeOffset CreatedAt { get; set; } = DateTimeOffset.UtcNow; public DateTimeOffset UpdatedAt { get; set; } = DateTimeOffset.UtcNow; } public sealed class TenantSettings : IHasTimestamps { public Guid TenantId { get; set; } public JsonElement FeatureFlags { get; set; } = JsonDefaults.Object(); public JsonElement AdminFeatureFlags { get; set; } = JsonDefaults.Object(); public JsonElement PublicConfig { get; set; } = JsonDefaults.Object(); public DateTimeOffset CreatedAt { get; set; } = DateTimeOffset.UtcNow; public DateTimeOffset UpdatedAt { get; set; } = DateTimeOffset.UtcNow; }