From 46a1556e1fc9f92b4bb7770d2252840834d3e922 Mon Sep 17 00:00:00 2001 From: Filippa Wallden Date: Thu, 25 Sep 2025 11:24:39 +0200 Subject: [PATCH 1/2] 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 2d6503da8..ee7d29587 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 376923f52..45b9c3f83 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 8e71e4f24..30ffc8cfd 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/2] 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 ba62aa59c..c5e374ad0 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 d18c0d65f..1abc0eee3 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 ///