using Microsoft.EntityFrameworkCore; using ZB.MOM.WW.ScadaBridge.Commons.Entities.Schemas; using ZB.MOM.WW.ScadaBridge.Commons.Interfaces.Repositories; namespace ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Repositories; /// /// EF Core implementation of over the central /// SharedSchemas JSON-Schema library table (M9, Task T32a). Plain tracked EF /// reads/writes against the shared , saving on each /// mutating call — mirrors the SecuredWriteRepository data-access shape. /// public class SharedSchemaRepository : ISharedSchemaRepository { private readonly ScadaBridgeDbContext _context; /// /// Initializes a new instance of the class. /// /// The EF Core database context. public SharedSchemaRepository(ScadaBridgeDbContext context) { _context = context ?? throw new ArgumentNullException(nameof(context)); } /// public async Task AddAsync(SharedSchema schema, CancellationToken ct = default) { ArgumentNullException.ThrowIfNull(schema); await _context.Set().AddAsync(schema, ct); await _context.SaveChangesAsync(ct); return schema.Id; } /// public async Task GetByIdAsync(int id, CancellationToken ct = default) { return await _context.Set().FindAsync([id], ct); } /// public async Task GetByNameAsync(string name, CancellationToken ct = default) { return await _context.Set() .AsNoTracking() .FirstOrDefaultAsync(s => s.Name == name, ct); } /// public async Task> ListAsync(CancellationToken ct = default) { return await _context.Set() .AsNoTracking() .OrderBy(s => s.Name) .ToListAsync(ct); } /// public async Task UpdateAsync(SharedSchema schema, CancellationToken ct = default) { ArgumentNullException.ThrowIfNull(schema); _context.Set().Update(schema); await _context.SaveChangesAsync(ct); } /// public async Task DeleteAsync(int id, CancellationToken ct = default) { var entity = await _context.Set().FindAsync([id], ct); if (entity is null) { return; } _context.Set().Remove(entity); await _context.SaveChangesAsync(ct); } }