using System.ComponentModel.DataAnnotations; namespace Tau.Acuvim.Portal.Domain.Fleet; public class Customer { public Guid Id { get; set; } = Guid.NewGuid(); [MaxLength(50)] public string Code { get; set; } = string.Empty; [MaxLength(200)] public string Name { get; set; } = string.Empty; [MaxLength(64)] public string TokenHash { get; set; } = string.Empty; // Previous token kept after rotation for a grace window so customer ops has // time to update .env + restart without dropping pushes. Null when no // rotation has happened yet or when the previous slot has been cleared. [MaxLength(64)] public string? PreviousTokenHash { get; set; } public DateTime? PreviousTokenExpiresAt { get; set; } public DateTime TokenIssuedAt { get; set; } = DateTime.UtcNow; public DateTime? TokenRotatedAt { get; set; } public bool IsActive { get; set; } = true; public DateTime? FirstSeenAt { get; set; } public DateTime? LastSeenAt { get; set; } public DateTime CreatedAt { get; set; } = DateTime.UtcNow; }