feat(m9/T24a): guarded move-data-connection-between-sites command + handler
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user