feat(commons): carry DataSourceReferenceOverride on ConnectionBinding (additive)

This commit is contained in:
Joseph Doherty
2026-05-28 11:53:24 -04:00
parent 7fc1f752f8
commit aff1323896
3 changed files with 45 additions and 6 deletions
@@ -12,8 +12,17 @@ public record MgmtDeleteInstanceCommand(int InstanceId);
/// <see cref="SetConnectionBindingsCommand"/>. This is a named record (not a
/// <c>ValueTuple</c>) so it serializes with stable, named JSON properties and can
/// evolve additively per REQ-COM-5a.
/// <para>
/// <c>DataSourceReferenceOverride</c> is an optional per-instance override of
/// the OPC UA node id (or other protocol address) for the bound attribute.
/// When non-null it replaces the template's <c>DataSourceReference</c> at
/// flattening time; when null the template default is used.
/// </para>
/// </summary>
public record ConnectionBinding(string AttributeName, int DataConnectionId);
public record ConnectionBinding(
string AttributeName,
int DataConnectionId,
string? DataSourceReferenceOverride = null);
public record SetConnectionBindingsCommand(int InstanceId, IReadOnlyList<ConnectionBinding> Bindings);
public record SetInstanceOverridesCommand(int InstanceId, IReadOnlyDictionary<string, string?> Overrides);
@@ -330,20 +330,22 @@ public class InstanceService
var results = new List<InstanceConnectionBinding>();
foreach (var (attrName, connId) in bindings)
foreach (var b in bindings)
{
if (existingMap.TryGetValue(attrName, out var existing))
if (existingMap.TryGetValue(b.AttributeName, out var existing))
{
existing.DataConnectionId = connId;
existing.DataConnectionId = b.DataConnectionId;
existing.DataSourceReferenceOverride = b.DataSourceReferenceOverride;
await _repository.UpdateInstanceConnectionBindingAsync(existing, cancellationToken);
results.Add(existing);
}
else
{
var binding = new InstanceConnectionBinding(attrName)
var binding = new InstanceConnectionBinding(b.AttributeName)
{
InstanceId = instanceId,
DataConnectionId = connId
DataConnectionId = b.DataConnectionId,
DataSourceReferenceOverride = b.DataSourceReferenceOverride
};
await _repository.AddInstanceConnectionBindingAsync(binding, cancellationToken);
results.Add(binding);