using System.ComponentModel.DataAnnotations; namespace AmtScanner.Api.Models; /// /// 远程访问临时 Token /// public class RemoteAccessToken { [Key] public long Id { get; set; } /// /// 唯一 Token 字符串 /// [Required] [MaxLength(64)] public string Token { get; set; } = string.Empty; /// /// 关联的设备 ID /// public long DeviceId { get; set; } /// /// 关联的设备 /// public AmtDevice? Device { get; set; } /// /// 创建时间 /// public DateTime CreatedAt { get; set; } = DateTime.UtcNow; /// /// 过期时间 /// public DateTime ExpiresAt { get; set; } /// /// 是否已使用(一次性 Token) /// public bool IsUsed { get; set; } = false; /// /// 使用时间 /// public DateTime? UsedAt { get; set; } /// /// 最大使用次数(0 表示无限制) /// public int MaxUseCount { get; set; } = 1; /// /// 已使用次数 /// public int UseCount { get; set; } = 0; /// /// 创建者备注 /// [MaxLength(500)] public string? Note { get; set; } /// /// 检查 Token 是否有效 /// public bool IsValid() { if (DateTime.UtcNow > ExpiresAt) return false; if (MaxUseCount > 0 && UseCount >= MaxUseCount) return false; return true; } }