using Microsoft.EntityFrameworkCore;
using ZB.MOM.WW.ScadaBridge.Commons.Interfaces.Services;
namespace ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Services;
///
/// Resolves instance unique names to site identifiers using the configuration database.
///
public class InstanceLocator : IInstanceLocator
{
private readonly ScadaBridgeDbContext _context;
/// Initializes the locator with the EF Core database context.
/// The database context used to look up instances and sites.
public InstanceLocator(ScadaBridgeDbContext context)
{
_context = context ?? throw new ArgumentNullException(nameof(context));
}
///
public async Task GetSiteIdForInstanceAsync(
string instanceUniqueName,
CancellationToken cancellationToken = default)
{
var instance = await _context.Set()
.FirstOrDefaultAsync(i => i.UniqueName == instanceUniqueName, cancellationToken);
if (instance == null)
return null;
var site = await _context.Set()
.FindAsync(new object[] { instance.SiteId }, cancellationToken);
return site?.SiteIdentifier;
}
}