feat(transport): round-trip ElementDataType for List attributes
Add DataType? ElementDataType to TemplateAttributeDto (optional, default null for backward-compat with old bundles). Map it in both directions in EntitySerializer (export + FromBundleContent) and in all three TemplateAttribute construction sites in BundleImporter (BuildTemplate, SyncTemplateAttributesAsync add-path, and SyncTemplateAttributesAsync update-path including change-detection). Two new round-trip tests in EntitySerializerTests confirm List attributes survive export→import and that old DTOs with null ElementDataType import cleanly.
This commit is contained in:
@@ -1045,6 +1045,7 @@ public sealed class BundleImporter : IBundleImporter
|
||||
IsLocked = a.IsLocked,
|
||||
Description = a.Description,
|
||||
DataSourceReference = a.DataSourceReference,
|
||||
ElementDataType = a.ElementDataType,
|
||||
});
|
||||
}
|
||||
foreach (var al in dto.Alarms)
|
||||
@@ -1122,7 +1123,8 @@ public sealed class BundleImporter : IBundleImporter
|
||||
current.DataType != attrDto.DataType ||
|
||||
current.IsLocked != attrDto.IsLocked ||
|
||||
!string.Equals(current.Description, attrDto.Description, StringComparison.Ordinal) ||
|
||||
!string.Equals(current.DataSourceReference, attrDto.DataSourceReference, StringComparison.Ordinal);
|
||||
!string.Equals(current.DataSourceReference, attrDto.DataSourceReference, StringComparison.Ordinal) ||
|
||||
current.ElementDataType != attrDto.ElementDataType;
|
||||
if (!changed) continue;
|
||||
|
||||
current.Value = attrDto.Value;
|
||||
@@ -1130,6 +1132,7 @@ public sealed class BundleImporter : IBundleImporter
|
||||
current.IsLocked = attrDto.IsLocked;
|
||||
current.Description = attrDto.Description;
|
||||
current.DataSourceReference = attrDto.DataSourceReference;
|
||||
current.ElementDataType = attrDto.ElementDataType;
|
||||
await _templateRepo.UpdateTemplateAttributeAsync(current, ct).ConfigureAwait(false);
|
||||
await _auditService.LogAsync(
|
||||
user,
|
||||
@@ -1158,6 +1161,7 @@ public sealed class BundleImporter : IBundleImporter
|
||||
IsLocked = attrDto.IsLocked,
|
||||
Description = attrDto.Description,
|
||||
DataSourceReference = attrDto.DataSourceReference,
|
||||
ElementDataType = attrDto.ElementDataType,
|
||||
};
|
||||
ex.Attributes.Add(newAttr);
|
||||
await _auditService.LogAsync(
|
||||
|
||||
@@ -80,7 +80,8 @@ public sealed record TemplateAttributeDto(
|
||||
DataType DataType,
|
||||
bool IsLocked,
|
||||
string? Description,
|
||||
string? DataSourceReference);
|
||||
string? DataSourceReference,
|
||||
DataType? ElementDataType = null);
|
||||
|
||||
public sealed record TemplateAlarmDto(
|
||||
string Name,
|
||||
|
||||
@@ -51,7 +51,8 @@ public sealed class EntitySerializer
|
||||
DataType: a.DataType,
|
||||
IsLocked: a.IsLocked,
|
||||
Description: a.Description,
|
||||
DataSourceReference: a.DataSourceReference)).ToList(),
|
||||
DataSourceReference: a.DataSourceReference,
|
||||
ElementDataType: a.ElementDataType)).ToList(),
|
||||
Alarms: t.Alarms.Select(a => new TemplateAlarmDto(
|
||||
Name: a.Name,
|
||||
Description: a.Description,
|
||||
@@ -203,6 +204,7 @@ public sealed class EntitySerializer
|
||||
IsLocked = a.IsLocked,
|
||||
Description = a.Description,
|
||||
DataSourceReference = a.DataSourceReference,
|
||||
ElementDataType = a.ElementDataType,
|
||||
});
|
||||
}
|
||||
foreach (var al in dto.Alarms)
|
||||
|
||||
Reference in New Issue
Block a user