feat(m9/T24a): guarded move-data-connection-between-sites command + handler

This commit is contained in:
Joseph Doherty
2026-06-18 11:20:58 -04:00
parent e6191ec55a
commit 48111b50fd
5 changed files with 299 additions and 3 deletions
@@ -125,13 +125,37 @@ public class SiteRepository : ISiteRepository
return Task.CompletedTask;
}
// --- Instances (for deletion constraint checks) ---
// --- Instances (for deletion / move constraint checks) ---
/// <inheritdoc />
public async Task<IReadOnlyList<Instance>> GetInstancesBySiteIdAsync(int siteId, CancellationToken cancellationToken = default)
{
return await _dbContext.Instances
.Where(i => i.SiteId == siteId)
.Include(i => i.ConnectionBindings)
.Include(i => i.NativeAlarmSourceOverrides)
.AsSplitQuery()
.ToListAsync(cancellationToken);
}
/// <inheritdoc />
public async Task<IReadOnlyList<Instance>> GetInstancesReferencingDataConnectionAsync(int dataConnectionId, CancellationToken cancellationToken = default)
{
// The distinct instance ids whose bindings reference the connection.
// Bindings are not exposed via their own DbSet on ISiteRepository, so
// resolve them through the InstanceConnectionBindings set, then load the
// owning instances (cheap; the blocker list is expected to be tiny).
var instanceIds = await _dbContext.InstanceConnectionBindings
.Where(b => b.DataConnectionId == dataConnectionId)
.Select(b => b.InstanceId)
.Distinct()
.ToListAsync(cancellationToken);
if (instanceIds.Count == 0)
return Array.Empty<Instance>();
return await _dbContext.Instances
.Where(i => instanceIds.Contains(i.Id))
.ToListAsync(cancellationToken);
}