namespace ZB.MOM.WW.ScadaBridge.Commons.Messages.Management; public record ListTemplatesCommand; public record GetTemplateCommand(int TemplateId); public record CreateTemplateCommand(string Name, string? Description, int? ParentTemplateId); /// /// Updates a template. Optional fields use leave-unchanged semantics (followup #5): /// a null keeps the stored description (pass an empty /// string to clear it), and a null keeps the /// existing parent (the parent is immutable; a non-null value that differs is rejected). /// public record UpdateTemplateCommand(int TemplateId, string Name, string? Description, int? ParentTemplateId); public record DeleteTemplateCommand(int TemplateId); public record ValidateTemplateCommand(int TemplateId); /// /// Read-only authoring query (M9/T26a): returns the EFFECTIVE inherited member /// set for a template — computed fresh from the full inheritance chain /// (arbitrary depth), annotated per member with origin + lock state — plus a /// staleness summary comparing the template's stored rows against the resolved /// set. Feeds the template editor's inheritance preview + base-change banner; /// never mutates stored rows. Response: . /// public record GetResolvedTemplateMembersCommand(int TemplateId); /// /// Reconciles a template's STORED inherited member rows with the resolved /// effective inherited set, for the template and its whole derived subtree: /// materializes missing inherited placeholders (e.g. base members added after a /// derived template was created), re-syncs drifted placeholders to the live /// effective value, and removes orphaned inherited rows. After a resync the /// editor's editable member tabs are complete and the "base changed" staleness /// banner clears. Designer-gated, audited. Response: /// . /// public record ResyncInheritedMembersCommand(int TemplateId); // Template member operations public record AddTemplateAttributeCommand(int TemplateId, string Name, string DataType, string? Value, string? Description, string? DataSourceReference, bool IsLocked, string? ElementDataType = null); public record UpdateTemplateAttributeCommand(int AttributeId, string Name, string DataType, string? Value, string? Description, string? DataSourceReference, bool IsLocked, string? ElementDataType = null); public record DeleteTemplateAttributeCommand(int AttributeId); public record AddTemplateAlarmCommand(int TemplateId, string Name, string TriggerType, int PriorityLevel, string? Description, string? TriggerConfiguration, bool IsLocked); public record UpdateTemplateAlarmCommand(int AlarmId, string Name, string TriggerType, int PriorityLevel, string? Description, string? TriggerConfiguration, bool IsLocked); public record DeleteTemplateAlarmCommand(int AlarmId); // Native alarm source bindings (read-only mirror of an OPC UA A&C / MxGateway source's alarms) public record AddTemplateNativeAlarmSourceCommand(int TemplateId, string Name, string ConnectionName, string SourceReference, string? ConditionFilter, string? Description, bool IsLocked); public record UpdateTemplateNativeAlarmSourceCommand(int NativeAlarmSourceId, string Name, string ConnectionName, string SourceReference, string? ConditionFilter, string? Description, bool IsLocked); public record DeleteTemplateNativeAlarmSourceCommand(int NativeAlarmSourceId); public record ListTemplateNativeAlarmSourcesCommand(int TemplateId); // MinTimeBetweenRuns/ExecutionTimeoutSeconds are additive trailing optionals (default null = "unset"): // MinTimeBetweenRuns mirrors the TemplateScript.MinTimeBetweenRuns TimeSpan throttle/re-fire interval; // ExecutionTimeoutSeconds mirrors the per-script TemplateScript.ExecutionTimeoutSeconds override (seconds; // null/non-positive falls back to the site's global default). Both were previously settable only via // Transport bundle import — these fields close the CLI/UI authoring gap (#54). Additive-only: never reorder. public record AddTemplateScriptCommand(int TemplateId, string Name, string Code, string? TriggerType, string? TriggerConfiguration, bool IsLocked, string? ParameterDefinitions = null, string? ReturnDefinition = null, TimeSpan? MinTimeBetweenRuns = null, int? ExecutionTimeoutSeconds = null); public record UpdateTemplateScriptCommand(int ScriptId, string Name, string Code, string? TriggerType, string? TriggerConfiguration, bool IsLocked, string? ParameterDefinitions = null, string? ReturnDefinition = null, TimeSpan? MinTimeBetweenRuns = null, int? ExecutionTimeoutSeconds = null); public record DeleteTemplateScriptCommand(int ScriptId); public record AddTemplateCompositionCommand(int TemplateId, string InstanceName, int ComposedTemplateId); public record DeleteTemplateCompositionCommand(int CompositionId);