using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Text.Json; using Tiku.Domain.Common; using Tiku.Domain.Tenancy; namespace Tiku.Api.Contracts; /// /// 租户解析查询参数。 /// public sealed class TenantResolveQueryDto { /// /// 要解析的访问域名,例如 student.example.com。本地开发也可以直接传 localhost。 /// [StringLength(253)] [Description("要解析的访问域名,例如 student.example.com。本地开发也可以直接传 localhost。")] public string? Host { get; set; } /// /// 租户编码;本地开发或无独立域名时使用,例如 master。 /// [StringLength(100)] [Description("租户编码;本地开发或无独立域名时使用,例如 master。")] public string? TenantCode { get; set; } } /// /// 租户解析响应。 /// /// 公开租户基础信息。 /// 公开品牌配置。 /// 面向前端公开的功能开关。 /// 面向管理端公开的功能开关。 /// 可公开的租户配置,不包含密钥或内部配置。 public sealed record TenantResolveResponseDto( PublicTenantDto Tenant, PublicTenantBrandingDto Branding, JsonElement Features, JsonElement AdminFeatures, JsonElement PublicConfig); /// /// 可公开给客户端的租户基础信息。 /// /// 租户 ID。 /// 租户编码。 /// 租户名称。 /// 租户状态。 /// 租户模式。 /// 当前匹配到的访问域名。 public sealed record PublicTenantDto( Guid Id, string Slug, string Name, TenantStatus Status, TenantMode Mode, string? Host); /// /// 可公开给客户端的租户品牌信息。 /// /// 品牌名称。 /// 品牌短名称。 /// 品牌标语。 /// Logo 地址。 /// Favicon 地址。 /// 客服微信。 /// 公众号或服务号名称。 /// 公开主题配置。 /// 公开资源配置。 public sealed record PublicTenantBrandingDto( string? BrandName, string? ShortName, string? Slogan, string? LogoUrl, string? FaviconUrl, string? ServiceWechat, string? ServiceAccountName, JsonElement Theme, JsonElement PublicAssets) { public static PublicTenantBrandingDto Empty { get; } = new( null, null, null, null, null, null, null, JsonDefaults.Object(), JsonDefaults.Object()); }