using System; namespace EAIAdminDAL.DTO { /// Admin CRUD DTO for MEAIPROMPTTEMPLATE — mirrors gbEAI's maiprompttemplate. See /// EAIInitiativeAdminDTO for the shared shape/conventions this follows. public class EAIPromptTemplateAdminDTO { public int PromptId { get; set; } public int TenantId { get; set; } /// Uniqueness is per (TenantId, InitiativeCode, CapabilityCode) — NOT globally /// unique like Initiative/Capability/Bot/AgentRoute codes, matching gbEAI's own /// maiprompttemplate lookup key shape. public string InitiativeCode { get; set; } = string.Empty; public string CapabilityCode { get; set; } = string.Empty; public string PromptTemplate { get; set; } = string.Empty; /// Optional per-report/per-flow prompt granularity — e.g. MREPORT.ReportCode for /// report-driven calls, GopFlowCode for flow-driven calls. Null = the capability-wide /// default/fallback row (at most one per Tenant+Initiative+Capability); a non-null value /// creates a variant row resolved in preference to the default when present (see /// prompt_resolver.py's variant_code fallback). Immutable once created — same rationale as /// InitiativeCode/CapabilityCode. public string? VariantCode { get; set; } /// Read-only, server-computed — refreshed from gbEAI's push response after every /// successful sync (gbEAI bumps its own version on every update). Never client-set; the /// BLL ignores whatever value arrives on the wire and always uses the sync result's value. public int PromptVersion { get; set; } = 1; public long? EAIRemoteId { get; set; } public short Version { get; set; } public byte Status { get; set; } = 1; public int? CreatedById { get; set; } public string? CreatedByName { get; set; } public DateTime CreatedOn { get; set; } public int? ModifiedById { get; set; } public string? ModifiedByName { get; set; } public DateTime? ModifiedOn { get; set; } } }