Skip to content

Commit 462a3fd

Browse files
committed
Store payload IDs in DicomAssociationInfo table
Signed-off-by: Victor Chang <[email protected]>
1 parent 6d2cf96 commit 462a3fd

12 files changed

+466
-21
lines changed

src/Api/DicomAssociationInfo.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616

1717
using System;
18+
using System.Collections.Generic;
1819

1920
namespace Monai.Deploy.InformaticsGateway.Api
2021
{
@@ -30,14 +31,21 @@ public class DicomAssociationInfo : MongoDBEntityBase
3031
public string Errors { get; set; } = string.Empty;
3132
public TimeSpan Duration { get; private set; } = default!;
3233

34+
public HashSet<string> PayloadIds { get; private set; }
35+
3336
public DicomAssociationInfo()
3437
{
3538
FileCount = 0;
39+
PayloadIds = new HashSet<string>();
3640
}
3741

38-
public void FileReceived()
42+
public void FileReceived(string? payloadId)
3943
{
40-
FileCount++;
44+
if (!string.IsNullOrWhiteSpace(payloadId))
45+
{
46+
FileCount++;
47+
PayloadIds.Add(payloadId);
48+
}
4149
}
4250

4351
public void Disconnect()

src/Database/EntityFramework/Configuration/DicomAssociationInfoConfiguration.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@
1515
* limitations under the License.
1616
*/
1717

18+
using System.Text.Json;
19+
using System.Text.Json.Serialization;
1820
using Microsoft.EntityFrameworkCore;
21+
using Microsoft.EntityFrameworkCore.ChangeTracking;
1922
using Microsoft.EntityFrameworkCore.Metadata.Builders;
2023
using Monai.Deploy.InformaticsGateway.Api;
2124

@@ -25,6 +28,15 @@ internal class DicomAssociationInfoConfiguration : IEntityTypeConfiguration<Dico
2528
{
2629
public void Configure(EntityTypeBuilder<DicomAssociationInfo> builder)
2730
{
31+
var comparer = new ValueComparer<HashSet<string>>(
32+
(c1, c2) => c1.SequenceEqual(c2),
33+
c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())),
34+
c => c.ToHashSet());
35+
36+
var jsonSerializerSettings = new JsonSerializerOptions
37+
{
38+
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
39+
};
2840
builder.HasKey(j => j.Id);
2941
builder.Property(j => j.CalledAeTitle).IsRequired();
3042
builder.Property(j => j.CalledAeTitle).IsRequired();
@@ -35,6 +47,11 @@ public void Configure(EntityTypeBuilder<DicomAssociationInfo> builder)
3547
builder.Property(j => j.RemoteHost).IsRequired();
3648
builder.Property(j => j.RemotePort).IsRequired();
3749
builder.Property(j => j.Errors).IsRequired();
50+
builder.Property(j => j.PayloadIds).IsRequired()
51+
.HasConversion(
52+
v => JsonSerializer.Serialize(v, jsonSerializerSettings),
53+
v => JsonSerializer.Deserialize<HashSet<string>>(v, jsonSerializerSettings))
54+
.Metadata.SetValueComparer(comparer);
3855
}
3956
}
4057
}

0 commit comments

Comments
 (0)