From 46a1556e1fc9f92b4bb7770d2252840834d3e922 Mon Sep 17 00:00:00 2001 From: Filippa Wallden Date: Thu, 25 Sep 2025 11:24:39 +0200 Subject: [PATCH 1/5] addMetadata --- .../Internal/Data/InstanceDataUnitOfWork.cs | 8 +++++ .../Models/DataElementChanges.cs | 33 +++++++++++++++++++ ...ouldNotChange_Unintentionally.verified.txt | 1 + 3 files changed, 42 insertions(+) diff --git a/src/Altinn.App.Core/Internal/Data/InstanceDataUnitOfWork.cs b/src/Altinn.App.Core/Internal/Data/InstanceDataUnitOfWork.cs index 2d6503da8d..ee7d29587a 100644 --- a/src/Altinn.App.Core/Internal/Data/InstanceDataUnitOfWork.cs +++ b/src/Altinn.App.Core/Internal/Data/InstanceDataUnitOfWork.cs @@ -396,6 +396,14 @@ DataElementChange change new MemoryAsStream(bytes), authenticationMethod: GetAuthenticationMethod(change.DataType) ); + + if (change.Metadata is not null) + { + dataElement.Metadata = [.. change.Metadata]; + change.Lock = true; + await _dataClient.Update(Instance, dataElement); + } + _binaryCache.Set(dataElement, bytes); if (change is FormDataChange formDataChange) { diff --git a/src/Altinn.App.Core/Models/DataElementChanges.cs b/src/Altinn.App.Core/Models/DataElementChanges.cs index 376923f52f..45b9c3f835 100644 --- a/src/Altinn.App.Core/Models/DataElementChanges.cs +++ b/src/Altinn.App.Core/Models/DataElementChanges.cs @@ -33,6 +33,11 @@ internal DataElementChanges(IReadOnlyList allChanges) /// public abstract class DataElementChange { + /// + /// The metadata of the data element + /// + private List? _metadata = []; + /// /// The type of update: Create, Update or Delete /// @@ -58,6 +63,34 @@ public abstract class DataElementChange /// The content type of element in storage /// public required string ContentType { get; init; } + + /// + /// The metadata of the data element + /// + internal IReadOnlyCollection? Metadata => _metadata; + + /// + /// If true, no more metadata can be added + /// + internal bool Lock { get; set; } + + /// + /// Add metadata to a created data element + /// + public void AddMetadata(string key, string value) + { + if (Type != ChangeType.Created) + { + throw new InvalidOperationException("Metadata can only be added to created data elements"); + } + + if (Lock) + { + throw new InvalidOperationException("Metadata already locked"); + } + _metadata ??= []; + _metadata.Add(new KeyValueEntry { Key = key, Value = value }); + } } /// diff --git a/test/Altinn.App.Core.Tests/PublicApiTests.PublicApi_ShouldNotChange_Unintentionally.verified.txt b/test/Altinn.App.Core.Tests/PublicApiTests.PublicApi_ShouldNotChange_Unintentionally.verified.txt index 8e71e4f24f..30ffc8cfd3 100644 --- a/test/Altinn.App.Core.Tests/PublicApiTests.PublicApi_ShouldNotChange_Unintentionally.verified.txt +++ b/test/Altinn.App.Core.Tests/PublicApiTests.PublicApi_ShouldNotChange_Unintentionally.verified.txt @@ -3919,6 +3919,7 @@ namespace Altinn.App.Core.Models public Altinn.App.Core.Models.DataElementIdentifier DataElementIdentifier { get; } public required Altinn.Platform.Storage.Interface.Models.DataType DataType { get; init; } public required Altinn.App.Core.Models.ChangeType Type { get; init; } + public void AddMetadata(string key, string value) { } } public sealed class DataElementChanges { From 6382df0ceee14062101bc6741101c8923ffe935a Mon Sep 17 00:00:00 2001 From: Filippa Wallden Date: Tue, 21 Oct 2025 09:52:59 +0200 Subject: [PATCH 2/5] minor update to merge --- .../Internal/Data/InstanceDataUnitOfWork.cs | 2 +- src/Altinn.App.Core/Models/DataElementChanges.cs | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Altinn.App.Core/Internal/Data/InstanceDataUnitOfWork.cs b/src/Altinn.App.Core/Internal/Data/InstanceDataUnitOfWork.cs index ba62aa59c0..c5e374ad07 100644 --- a/src/Altinn.App.Core/Internal/Data/InstanceDataUnitOfWork.cs +++ b/src/Altinn.App.Core/Internal/Data/InstanceDataUnitOfWork.cs @@ -448,7 +448,6 @@ DataElementChange change new MemoryAsStream(bytes), authenticationMethod: GetAuthenticationMethod(change.DataType) ); - // Update caches if (change.Metadata is not null) { @@ -457,6 +456,7 @@ DataElementChange change await _dataClient.Update(Instance, dataElement); } + // Update caches _binaryCache.Set(dataElement, bytes); change.DataElement = dataElement; // Set the data element so that it can be referenced later in the save process if (change is FormDataChange formDataChange) diff --git a/src/Altinn.App.Core/Models/DataElementChanges.cs b/src/Altinn.App.Core/Models/DataElementChanges.cs index d18c0d65f0..1abc0eee33 100644 --- a/src/Altinn.App.Core/Models/DataElementChanges.cs +++ b/src/Altinn.App.Core/Models/DataElementChanges.cs @@ -34,11 +34,6 @@ internal DataElementChanges(IReadOnlyList allChanges) /// public abstract class DataElementChange { - /// - /// The metadata of the data element - /// - private List? _metadata = []; - internal DataElementChange(ChangeType type, DataType dataType, string contentType, DataElement? dataElement = null) { Type = type; @@ -47,6 +42,11 @@ internal DataElementChange(ChangeType type, DataType dataType, string contentTyp ContentType = contentType; } + /// + /// The metadata of the data element + /// + private List? _metadata = []; + /// /// The type of update: Create, Update or Delete /// From e46fc82e63e31fb5d7ba4df8256163f38fa24fcc Mon Sep 17 00:00:00 2001 From: Filippa Wallden Date: Thu, 11 Dec 2025 12:37:57 +0100 Subject: [PATCH 3/5] minor updates coderabbitai --- .../Internal/Data/InstanceDataUnitOfWork.cs | 2 +- src/Altinn.App.Core/Models/DataElementChanges.cs | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Altinn.App.Core/Internal/Data/InstanceDataUnitOfWork.cs b/src/Altinn.App.Core/Internal/Data/InstanceDataUnitOfWork.cs index c5e374ad07..cda3674954 100644 --- a/src/Altinn.App.Core/Internal/Data/InstanceDataUnitOfWork.cs +++ b/src/Altinn.App.Core/Internal/Data/InstanceDataUnitOfWork.cs @@ -452,8 +452,8 @@ DataElementChange change if (change.Metadata is not null) { dataElement.Metadata = [.. change.Metadata]; - change.Lock = true; await _dataClient.Update(Instance, dataElement); + change.Lock = true; } // Update caches diff --git a/src/Altinn.App.Core/Models/DataElementChanges.cs b/src/Altinn.App.Core/Models/DataElementChanges.cs index 1abc0eee33..f10fa627be 100644 --- a/src/Altinn.App.Core/Models/DataElementChanges.cs +++ b/src/Altinn.App.Core/Models/DataElementChanges.cs @@ -45,7 +45,7 @@ internal DataElementChange(ChangeType type, DataType dataType, string contentTyp /// /// The metadata of the data element /// - private List? _metadata = []; + private List? _metadata; /// /// The type of update: Create, Update or Delete @@ -88,6 +88,9 @@ internal DataElementChange(ChangeType type, DataType dataType, string contentTyp /// public void AddMetadata(string key, string value) { + ArgumentException.ThrowIfNullOrWhiteSpace(key); + ArgumentException.ThrowIfNullOrWhiteSpace(value); + if (Type != ChangeType.Created) { throw new InvalidOperationException("Metadata can only be added to created data elements"); @@ -97,7 +100,7 @@ public void AddMetadata(string key, string value) { throw new InvalidOperationException("Metadata already locked"); } - _metadata ??= []; + _metadata = []; _metadata.Add(new KeyValueEntry { Key = key, Value = value }); } } From c7387091387a372adfd922b13cd8815f27f62235 Mon Sep 17 00:00:00 2001 From: Filippa Wallden Date: Thu, 11 Dec 2025 12:50:58 +0100 Subject: [PATCH 4/5] minor formatting edit --- src/Altinn.App.Core/Models/DataElementChanges.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Altinn.App.Core/Models/DataElementChanges.cs b/src/Altinn.App.Core/Models/DataElementChanges.cs index f9c84e6e19..3d5b4eba03 100644 --- a/src/Altinn.App.Core/Models/DataElementChanges.cs +++ b/src/Altinn.App.Core/Models/DataElementChanges.cs @@ -105,7 +105,7 @@ public void AddMetadata(string key, string value) { throw new InvalidOperationException("Metadata already locked"); } - _metadata = []; + _metadata = []; _metadata.Add(new KeyValueEntry { Key = key, Value = value }); } } From e46b82827569e2970fdc52456974a86e1811af36 Mon Sep 17 00:00:00 2001 From: Filippa Wallden Date: Thu, 11 Dec 2025 12:54:49 +0100 Subject: [PATCH 5/5] minor edit --- src/Altinn.App.Core/Models/DataElementChanges.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Altinn.App.Core/Models/DataElementChanges.cs b/src/Altinn.App.Core/Models/DataElementChanges.cs index 3d5b4eba03..d049bc8866 100644 --- a/src/Altinn.App.Core/Models/DataElementChanges.cs +++ b/src/Altinn.App.Core/Models/DataElementChanges.cs @@ -105,7 +105,7 @@ public void AddMetadata(string key, string value) { throw new InvalidOperationException("Metadata already locked"); } - _metadata = []; + _metadata ??= []; _metadata.Add(new KeyValueEntry { Key = key, Value = value }); } }