using System.Text.Json.Serialization; using TakeoutSaaS.Domain.Identity.Enums; using TakeoutSaaS.Shared.Abstractions.Serialization; namespace TakeoutSaaS.Application.Identity.Contracts; /// /// 用户详情 DTO。 /// public sealed record UserDetailDto { /// /// 用户 ID。 /// [JsonConverter(typeof(SnowflakeIdJsonConverter))] public long UserId { get; init; } /// /// 租户 ID。 /// [JsonConverter(typeof(SnowflakeIdJsonConverter))] public long TenantId { get; init; } /// /// 商户 ID。 /// [JsonConverter(typeof(NullableSnowflakeIdJsonConverter))] public long? MerchantId { get; init; } /// /// 登录账号。 /// public string Account { get; init; } = string.Empty; /// /// 展示名称。 /// public string DisplayName { get; init; } = string.Empty; /// /// 手机号。 /// public string? Phone { get; init; } /// /// 邮箱。 /// public string? Email { get; init; } /// /// 用户状态。 /// public IdentityUserStatus Status { get; init; } /// /// 是否处于锁定状态。 /// public bool IsLocked { get; init; } /// /// 角色编码列表。 /// public string[] Roles { get; init; } = Array.Empty(); /// /// 角色 ID 列表(字符串)。 /// public string[] RoleIds { get; init; } = Array.Empty(); /// /// 权限编码列表。 /// public string[] Permissions { get; init; } = Array.Empty(); /// /// 创建时间(UTC)。 /// public DateTime CreatedAt { get; init; } /// /// 最近登录时间(UTC)。 /// public DateTime? LastLoginAt { get; init; } /// /// 头像地址。 /// public string? Avatar { get; init; } /// /// 并发控制版本。 /// public byte[] RowVersion { get; init; } = Array.Empty(); }