Skip to content
Closed
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions src/Altinn.App.Core/Internal/Data/InstanceDataUnitOfWork.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
36 changes: 36 additions & 0 deletions src/Altinn.App.Core/Models/DataElementChanges.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,11 @@ private protected DataElementChange(
ContentType = contentType;
}

/// <summary>
/// The metadata of the data element
/// </summary>
private List<KeyValueEntry>? _metadata;

/// <summary>
/// The type of update: Create, Update or Delete
/// </summary>
Expand All @@ -72,6 +77,37 @@ private protected DataElementChange(
/// The contentType of an element in storage
/// </summary>
public string ContentType { get; }

/// <summary>
/// The metadata of the data element
/// </summary>
internal IReadOnlyCollection<KeyValueEntry>? Metadata => _metadata;

/// <summary>
/// If true, no more metadata can be added
/// </summary>
internal bool Lock { get; set; }

/// <summary>
/// Add metadata to a created data element
/// </summary>
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 });
}
}

/// <summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand Down
Loading