diff --git a/src/Altinn.App.Core/Internal/Data/InstanceDataUnitOfWork.cs b/src/Altinn.App.Core/Internal/Data/InstanceDataUnitOfWork.cs index aed0c5481..6c58d47d1 100644 --- a/src/Altinn.App.Core/Internal/Data/InstanceDataUnitOfWork.cs +++ b/src/Altinn.App.Core/Internal/Data/InstanceDataUnitOfWork.cs @@ -478,6 +478,14 @@ DataElementChange change new MemoryAsStream(bytes), authenticationMethod: GetAuthenticationMethod(change.DataType) ); + + if (change.Metadata is not null) + { + dataElement.Metadata = [.. change.Metadata]; + await _dataClient.Update(Instance, dataElement); + change.Lock = true; + } + // Update caches _binaryCache.Set(dataElement, bytes); change.DataElement = dataElement; // Set the data element so that it can be referenced later in the save process diff --git a/src/Altinn.App.Core/Models/DataElementChanges.cs b/src/Altinn.App.Core/Models/DataElementChanges.cs index bdf4b9edc..d049bc886 100644 --- a/src/Altinn.App.Core/Models/DataElementChanges.cs +++ b/src/Altinn.App.Core/Models/DataElementChanges.cs @@ -47,6 +47,11 @@ private protected DataElementChange( ContentType = contentType; } + /// + /// The metadata of the data element + /// + private List? _metadata; + /// /// The type of update: Create, Update or Delete /// @@ -72,6 +77,37 @@ private protected DataElementChange( /// The contentType of an element in storage /// public string ContentType { get; } + + /// + /// 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) + { + ArgumentException.ThrowIfNullOrWhiteSpace(key); + ArgumentException.ThrowIfNullOrWhiteSpace(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 6a1fc4d04..ab1a61b11 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 @@ -4157,6 +4157,7 @@ namespace Altinn.App.Core.Models public Altinn.App.Core.Models.DataElementIdentifier DataElementIdentifier { get; } public Altinn.Platform.Storage.Interface.Models.DataType DataType { get; } public Altinn.App.Core.Models.ChangeType Type { get; } + public void AddMetadata(string key, string value) { } } public sealed class DataElementChanges {