using ScadaLink.Commons.Entities.Templates; using ScadaLink.Commons.Interfaces.Repositories; using ScadaLink.Commons.Interfaces.Services; using ScadaLink.Commons.Types; namespace ScadaLink.TemplateEngine; /// /// Core service for Template Engine operations. /// Covers CRUD for templates and their members (attributes, alarms, scripts, compositions), /// inheritance and composition rules, override/locking validation, collision detection, and acyclicity enforcement. /// public class TemplateService { private readonly ITemplateEngineRepository _repository; private readonly IAuditService _auditService; public TemplateService(ITemplateEngineRepository repository, IAuditService auditService) { _repository = repository ?? throw new ArgumentNullException(nameof(repository)); _auditService = auditService ?? throw new ArgumentNullException(nameof(auditService)); } // ======================================================================== // WP-1: Template CRUD with Inheritance // ======================================================================== public async Task> CreateTemplateAsync( string name, string? description, int? parentTemplateId, string user, int? folderId = null, CancellationToken cancellationToken = default) { if (string.IsNullOrWhiteSpace(name)) return Result