using System.ComponentModel.DataAnnotations; namespace OTSSignsOrchestrator.Core.Models.DTOs; public class CreateInstanceDto { [Required, MaxLength(100)] public string CustomerName { get; set; } = string.Empty; /// Exactly 3 lowercase letters used to derive all resource names. [Required, MaxLength(3), MinLength(3), RegularExpression("^[a-z]{3}$", ErrorMessage = "Abbreviation must be exactly 3 lowercase letters.")] public string CustomerAbbrev { get; set; } = string.Empty; /// SSH host to deploy to. public Guid? SshHostId { get; set; } /// Pangolin Newt ID (optional — tunnel service excluded if not provided). [MaxLength(500)] public string? NewtId { get; set; } /// Pangolin Newt Secret (optional — tunnel service excluded if not provided). [MaxLength(500)] public string? NewtSecret { get; set; } // ── NFS volume settings (optional — falls back to global settings) ── [MaxLength(200)] public string? NfsServer { get; set; } /// NFS export path on the server (e.g. "/srv/nfs"). [MaxLength(500)] public string? NfsExport { get; set; } /// Optional subfolder within the export (e.g. "ots_cms"). Omit to use the export root. [MaxLength(500)] public string? NfsExportFolder { get; set; } [MaxLength(500)] public string? NfsExtraOptions { get; set; } /// /// When true, any existing Docker volumes with the same stack prefix are removed before /// deploying, so fresh volumes are created from the current compose driver_opts. /// Defaults to false to avoid accidental data loss on re-deploys. /// public bool PurgeStaleVolumes { get; set; } = false; }