using System.ComponentModel.DataAnnotations; namespace Fitness_core_BE.DTOs.TimeBankCard { public class IssueTimeBankCardRequest { [Required] public string RfidTagId { get; set; } = string.Empty; [Required] [Range(1, int.MaxValue, ErrorMessage = "TotalMinutesPurchased must be at least 1")] public int TotalMinutesPurchased { get; set; } [Range(0, double.MaxValue, ErrorMessage = "AmountPaid must be zero or greater")] public decimal AmountPaid { get; set; } /// Ties the card to a member's own account; omit for a walk-in-only card. public Guid? CustomerId { get; set; } public DateTime? ExpiresAt { get; set; } } // No MinutesToDeduct -- the swipe itself is tap-in (first swipe, starts the clock) or // tap-out (second swipe, deducts the elapsed time). See TimeBankCard.ActiveSessionStartedAt. public class SwipeTimeBankCardRequest { [Required] public string RfidTagId { get; set; } = string.Empty; [Required] public Guid FacilityId { get; set; } } }