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