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);
}
}