using System;
namespace Aging.Infrastructure.Contracts
{
///
/// 预约状态枚举
///
public enum ReservationState
{
///
/// 活跃状态
///
Active,
///
/// 已释放
///
Released,
///
/// 冲突状态
///
Conflicted
}
///
/// 长期预约实体,表示对某个硬件资源的持久占用。
/// 预约期间,其他所有者无法获取该资源。
///
public sealed class ResourceReservation
{
///
/// 预约唯一标识
///
public string ReservationId { get; }
///
/// 被预约的资源键
///
public ResourceKey Resource { get; }
///
/// 预约所有者令牌
///
public ResourceOwnerToken Owner { get; }
///
/// 预约状态
///
public ReservationState State { get; set; }
///
/// 预约创建时间
///
public DateTime ReservedAt { get; }
///
/// 预约描述(可选)
///
public string? Description { get; set; }
///
/// 初始化资源预约实例
///
/// 资源键
/// 所有者令牌
/// 预约描述(可选)
public ResourceReservation(ResourceKey resource, ResourceOwnerToken owner, string? description = null)
{
ReservationId = Guid.NewGuid().ToString();
Resource = resource ?? throw new ArgumentNullException(nameof(resource));
Owner = owner ?? throw new ArgumentNullException(nameof(owner));
State = ReservationState.Active;
ReservedAt = DateTime.UtcNow;
Description = description;
}
}
}