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