2525using Monai . Deploy . WorkflowManager . Common . Database . Interfaces ;
2626using Monai . Deploy . WorkflowManager . Common . Logging ;
2727using Monai . Deploy . WorkflowManager . Common . Storage . Services ;
28+ using Microsoft . Extensions . Options ;
29+ using Monai . Deploy . WorkflowManager . Common . Configuration ;
2830
2931namespace Monai . Deploy . WorkflowManager . Common . Miscellaneous . Services
3032{
@@ -34,23 +36,31 @@ public class PayloadService : IPayloadService
3436
3537 private readonly IWorkflowInstanceRepository _workflowInstanceRepository ;
3638
39+ private readonly IWorkflowRepository _workflowRepository ;
40+
3741 private readonly IDicomService _dicomService ;
3842
3943 private readonly IStorageService _storageService ;
4044
45+ private readonly WorkflowManagerOptions _options ;
46+
4147 private readonly ILogger < PayloadService > _logger ;
4248
4349 public PayloadService (
4450 IPayloadRepository payloadRepository ,
4551 IDicomService dicomService ,
4652 IWorkflowInstanceRepository workflowInstanceRepository ,
53+ IWorkflowRepository workflowRepository ,
4754 IServiceScopeFactory serviceScopeFactory ,
55+ IOptions < WorkflowManagerOptions > options ,
4856 ILogger < PayloadService > logger )
4957 {
5058 _payloadRepository = payloadRepository ?? throw new ArgumentNullException ( nameof ( payloadRepository ) ) ;
5159 _workflowInstanceRepository = workflowInstanceRepository ?? throw new ArgumentNullException ( nameof ( workflowInstanceRepository ) ) ;
5260 _dicomService = dicomService ?? throw new ArgumentNullException ( nameof ( dicomService ) ) ;
5361 _logger = logger ?? throw new ArgumentNullException ( nameof ( logger ) ) ;
62+ _workflowRepository = workflowRepository ?? throw new ArgumentNullException ( nameof ( workflowRepository ) ) ;
63+ _options = options ? . Value ?? throw new ArgumentNullException ( nameof ( options ) ) ;
5464
5565 var scopeFactory = serviceScopeFactory ?? throw new ArgumentNullException ( nameof ( serviceScopeFactory ) ) ;
5666 var scope = scopeFactory . CreateScope ( ) ;
@@ -85,7 +95,8 @@ public PayloadService(
8595 DataTrigger = eventPayload . DataTrigger ,
8696 Timestamp = eventPayload . Timestamp ,
8797 PatientDetails = patientDetails ,
88- PayloadDeleted = PayloadDeleted . No
98+ PayloadDeleted = PayloadDeleted . No ,
99+ Expires = await GetExpiry ( DateTime . UtcNow , eventPayload . WorkflowInstanceId )
89100 } ;
90101
91102 if ( await _payloadRepository . CreateAsync ( payload ) )
@@ -106,6 +117,27 @@ public PayloadService(
106117 return null ;
107118 }
108119
120+ public async Task < DateTime ? > GetExpiry ( DateTime now , string ? workflowInstanceId )
121+ {
122+ var daysToKeep = await GetWorkflowDataExpiry ( workflowInstanceId ) ;
123+ daysToKeep ??= _options . DataRetentionDays ;
124+
125+ if ( daysToKeep == - 1 ) { return null ; }
126+
127+ return now . AddDays ( daysToKeep . Value ) ;
128+ }
129+
130+ private async Task < int ? > GetWorkflowDataExpiry ( string ? workflowInstanceId )
131+ {
132+ if ( string . IsNullOrWhiteSpace ( workflowInstanceId ) ) { return null ; }
133+
134+ var workflowInstance = await _workflowInstanceRepository . GetByWorkflowInstanceIdAsync ( workflowInstanceId ) ;
135+
136+ if ( workflowInstance is null ) { return null ; }
137+
138+ return ( await _workflowRepository . GetByWorkflowIdAsync ( workflowInstance . WorkflowId ) ) ? . Workflow ? . DataRetentionDays ?? null ;
139+ }
140+
109141 public async Task < Payload > GetByIdAsync ( string payloadId )
110142 {
111143 ArgumentNullException . ThrowIfNullOrWhiteSpace ( payloadId , nameof ( payloadId ) ) ;
0 commit comments