using System.ComponentModel.DataAnnotations; namespace Fitness_core_BE.DTOs.CustomerPlan { public class UpdateCustomerPlanRequest { [Required] public Guid CustomerPlanId { get; set; } public string? PlanName { get; set; } public string? PlanDescription { get; set; } [Range(0, double.MaxValue, ErrorMessage = "Plan price must be a positive value")] public decimal? PlanPrice { get; set; } public bool? HasOnboardingFee { get; set; } [Range(0, double.MaxValue, ErrorMessage = "Onboarding fee must be zero or greater")] public decimal? OnboardingFeeAmount { get; set; } [Range(1, int.MaxValue, ErrorMessage = "Duration must be at least 1 day")] public int? DurationInDays { get; set; } public string? PlanScope { get; set; } public int? MemberLimit { get; set; } public string? DurationMode { get; set; } public DateTime? ValidFrom { get; set; } public DateTime? ValidTo { get; set; } public bool? AllowSplitPayments { get; set; } public int? InstallmentCount { get; set; } [Range(1, int.MaxValue, ErrorMessage = "SessionsPerCycle must be at least 1 when set")] public int? SessionsPerCycle { get; set; } public string? SessionRolloverPolicy { get; set; } [Range(0, int.MaxValue, ErrorMessage = "RolloverGraceDays must be zero or greater")] public int? RolloverGraceDays { get; set; } public string? BillingTiming { get; set; } public bool? IsActive { get; set; } /// Replaces this plan's place set when provided (empty array clears it back /// to unrestricted). Omit/null to leave the plan's places unchanged. public List? PlaceIds { get; set; } } }