using System.Security.Cryptography; using System.Text; using Microsoft.EntityFrameworkCore; using ZB.MOM.WW.OtOpcUa.Configuration; using ZB.MOM.WW.OtOpcUa.Configuration.Entities; namespace ZB.MOM.WW.OtOpcUa.Admin.Services; /// /// Draft-generation CRUD for rows — the C# source code referenced /// by Phase 7 virtual tags and scripted alarms. is /// recomputed on every save so Core.Scripting's compile cache sees a fresh key when /// source changes and reuses the compile when it doesn't. /// public sealed class ScriptService(OtOpcUaConfigDbContext db) { public Task> ListAsync(long generationId, CancellationToken ct) => db.Scripts.AsNoTracking() .Where(s => s.GenerationId == generationId) .OrderBy(s => s.Name) .ToListAsync(ct); public Task GetAsync(long generationId, string scriptId, CancellationToken ct) => db.Scripts.AsNoTracking() .FirstOrDefaultAsync(s => s.GenerationId == generationId && s.ScriptId == scriptId, ct); public async Task