Skip to content

Commit 150e36d

Browse files
authored
Merge pull request #1012 from Project-MONAI/nds-addAccessionId
adding accession Id filtering for counts
2 parents 5a6f2e6 + 96a5162 commit 150e36d

18 files changed

+145
-40
lines changed

src/WorkflowManager/Common/Interfaces/IPaginatedApi.cs

100644100755
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,13 @@
1414
* limitations under the License.
1515
*/
1616

17+
using MongoDB.Driver;
18+
1719
namespace Monai.Deploy.WorkflowManager.Common.Miscellaneous.Interfaces
1820
{
1921
public interface IPaginatedApi<T>
2022
{
21-
Task<long> CountAsync();
23+
Task<long> CountAsync(FilterDefinition<T>? filter = null);
2224

2325
Task<IList<T>> GetAllAsync(int? skip = null, int? limit = null);
2426
}

src/WorkflowManager/Common/Interfaces/IPayloadService.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
using Monai.Deploy.Messaging.Events;
1818
using Monai.Deploy.WorkflowManager.Common.Contracts.Models;
19+
using MongoDB.Driver;
1920

2021
namespace Monai.Deploy.WorkflowManager.Common.Miscellaneous.Interfaces
2122
{
@@ -38,8 +39,9 @@ public interface IPayloadService : IPaginatedApi<PayloadDto>
3839
/// </summary>
3940
Task<IList<PayloadDto>> GetAllAsync(int? skip = null,
4041
int? limit = null,
41-
string? patientId = "",
42-
string? patientName = "");
42+
string? patientId = null,
43+
string? patientName = null,
44+
string? accessionId = null);
4345
new Task<IList<PayloadDto>> GetAllAsync(int? skip = null, int? limit = null);
4446

4547
/// <summary>
@@ -63,5 +65,7 @@ Task<IList<PayloadDto>> GetAllAsync(int? skip = null,
6365
/// <param name="payload">updated payload.</param>
6466
/// <returns>true if the update is successful, false otherwise.</returns>
6567
Task<bool> UpdateAsyncWorkflowIds(Payload payload);
68+
69+
Task<long> CountAsync(FilterDefinition<Payload> filter);
6670
}
6771
}

src/WorkflowManager/Common/Services/PayloadService.cs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
using Monai.Deploy.WorkflowManager.Common.Storage.Services;
2727
using Microsoft.Extensions.Options;
2828
using Monai.Deploy.WorkflowManager.Common.Configuration;
29+
using MongoDB.Driver;
2930

3031
namespace Monai.Deploy.WorkflowManager.Common.Miscellaneous.Services
3132
{
@@ -149,10 +150,11 @@ public async Task<Payload> GetByIdAsync(string payloadId)
149150

150151
public async Task<IList<PayloadDto>> GetAllAsync(int? skip = null,
151152
int? limit = null,
152-
string? patientId = "",
153-
string? patientName = "")
153+
string? patientId = null,
154+
string? patientName = null,
155+
string? accessionId = null)
154156
=> await CreatePayloadsDto(
155-
await _payloadRepository.GetAllAsync(skip, limit, patientId ?? string.Empty, patientName ?? string.Empty)
157+
await _payloadRepository.GetAllAsync(skip, limit, patientId, patientName, accessionId)
156158
);
157159

158160
public async Task<IList<PayloadDto>> GetAllAsync(int? skip = null, int? limit = null)
@@ -193,7 +195,13 @@ private async Task<IList<PayloadDto>> CreatePayloadsDto(IList<Payload> payloads)
193195
return dtos;
194196
}
195197

196-
public async Task<long> CountAsync() => await _payloadRepository.CountAsync();
198+
public async Task<long> CountAsync(FilterDefinition<Payload> filter)
199+
=> await _payloadRepository.CountAsync(filter);
200+
201+
202+
// this has to be here because of the base, but dont use it !
203+
public Task<long> CountAsync(FilterDefinition<PayloadDto>? filter)
204+
=> throw new NotImplementedException();
197205

198206
public async Task<bool> DeletePayloadFromStorageAsync(string payloadId)
199207
{

src/WorkflowManager/Common/Services/WorkflowInstanceService.cs

100644100755
Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@
1414
* limitations under the License.
1515
*/
1616

17-
using Ardalis.GuardClauses;
1817
using Microsoft.Extensions.Logging;
1918
using Monai.Deploy.Messaging.Events;
2019
using Monai.Deploy.WorkflowManager.Common.Miscellaneous.Exceptions;
2120
using Monai.Deploy.WorkflowManager.Common.Miscellaneous.Interfaces;
2221
using Monai.Deploy.WorkflowManager.Common.Contracts.Models;
2322
using Monai.Deploy.WorkflowManager.Common.Database.Interfaces;
2423
using Monai.Deploy.WorkflowManager.Common.Logging;
24+
using MongoDB.Driver;
2525

2626
namespace Monai.Deploy.WorkflowManager.Common.Miscellaneous.Services
2727
{
@@ -87,7 +87,11 @@ public async Task UpdateExportCompleteMetadataAsync(string workflowInstanceId, s
8787
await _workflowInstanceRepository.UpdateExportCompleteMetadataAsync(workflowInstanceId, executionId, resultMetadata);
8888
}
8989

90-
public async Task<long> CountAsync() => await _workflowInstanceRepository.CountAsync();
90+
public async Task<long> CountAsync(FilterDefinition<WorkflowInstance>? filter)
91+
{
92+
filter = filter ?? Builders<WorkflowInstance>.Filter.Empty;
93+
return await _workflowInstanceRepository.CountAsync(filter);
94+
}
9195

9296
public async Task<IList<WorkflowInstance>> GetAllAsync(int? skip = null, int? limit = null, Status? status = null, string? payloadId = null)
9397
=> await _workflowInstanceRepository.GetAllAsync(skip, limit, status, payloadId);

src/WorkflowManager/Common/Services/WorkflowService.cs

100644100755
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
using Monai.Deploy.WorkflowManager.Common.Contracts.Models;
2020
using Monai.Deploy.WorkflowManager.Common.Database.Interfaces;
2121
using Monai.Deploy.WorkflowManager.Common.Logging;
22+
using MongoDB.Driver;
2223

2324
namespace Monai.Deploy.WorkflowManager.Common.Miscellaneous.Services
2425
{
@@ -83,7 +84,8 @@ public Task<DateTime> DeleteWorkflowAsync(WorkflowRevision workflow)
8384
return result;
8485
}
8586

86-
public async Task<long> CountAsync() => await _workflowRepository.CountAsync();
87+
public async Task<long> CountAsync(FilterDefinition<WorkflowRevision>? filter)
88+
=> await _workflowRepository.CountAsync(filter ?? Builders<WorkflowRevision>.Filter.Empty);
8789

8890
public async Task<IList<WorkflowRevision>> GetAllAsync(int? skip = null, int? limit = null)
8991
=> await _workflowRepository.GetAllAsync(skip, limit);

src/WorkflowManager/Database/Interfaces/IPayloadRepository.cs

100644100755
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
using System.Collections.Generic;
1919
using System.Threading.Tasks;
2020
using Monai.Deploy.WorkflowManager.Common.Contracts.Models;
21+
using MongoDB.Driver;
2122

2223
namespace Monai.Deploy.WorkflowManager.Common.Database.Interfaces
2324
{
@@ -32,7 +33,7 @@ public interface IPayloadRepository
3233
/// <summary>
3334
/// Retrieves a list of payloads in the database.
3435
/// </summary>
35-
Task<IList<Payload>> GetAllAsync(int? skip = null, int? limit = null, string patientId = "", string patientName = "");
36+
Task<IList<Payload>> GetAllAsync(int? skip = null, int? limit = null, string? patientId = null, string? patientName = null, string? accessionId = null);
3637

3738
/// <summary>
3839
/// Retrieves a payload by id in the database.
@@ -44,7 +45,7 @@ public interface IPayloadRepository
4445
/// Gets count of objects
4546
/// </summary>
4647
/// <returns>Count of objects.</returns>
47-
Task<long> CountAsync();
48+
Task<long> CountAsync(FilterDefinition<Payload> filter);
4849

4950
/// <summary>
5051
/// Updates a payload in the database.

src/WorkflowManager/Database/Interfaces/IWorkflowInstanceRepository.cs

100644100755
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
using System.Threading.Tasks;
1919
using Monai.Deploy.Messaging.Events;
2020
using Monai.Deploy.WorkflowManager.Common.Contracts.Models;
21+
using MongoDB.Driver;
2122

2223
namespace Monai.Deploy.WorkflowManager.Common.Database.Interfaces
2324
{
@@ -44,7 +45,7 @@ public interface IWorkflowInstanceRepository
4445
/// Gets count of Workflow Instances.
4546
/// </summary>
4647
/// <returns></returns>
47-
Task<long> CountAsync();
48+
Task<long> CountAsync(FilterDefinition<WorkflowInstance> filter);
4849

4950
/// <summary>
5051
/// Gets the count of workflow instances with a filter.

src/WorkflowManager/Database/Interfaces/IWorkflowRepository.cs

100644100755
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
using System.Collections.Generic;
1919
using System.Threading.Tasks;
2020
using Monai.Deploy.WorkflowManager.Common.Contracts.Models;
21+
using MongoDB.Driver;
2122

2223
namespace Monai.Deploy.WorkflowManager.Common.Database.Interfaces
2324
{
@@ -97,7 +98,7 @@ public interface IWorkflowRepository
9798
/// <returns></returns>
9899
Task<DateTime> SoftDeleteWorkflow(WorkflowRevision workflow);
99100

100-
Task<long> CountAsync();
101+
Task<long> CountAsync(FilterDefinition<WorkflowRevision> filter);
101102

102103
Task<IList<WorkflowRevision>> GetAllAsync(int? skip, int? limit);
103104

src/WorkflowManager/Database/Repositories/PayloadRepository.cs

100644100755
Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,10 @@ private async Task EnsureIndex()
7171
}
7272
}
7373

74-
public Task<long> CountAsync() => CountAsync(_payloadCollection, null);
74+
public Task<long> CountAsync(FilterDefinition<Payload> filter)
75+
{
76+
return CountAsync(_payloadCollection, filter);
77+
}
7578

7679
public async Task<bool> CreateAsync(Payload payload)
7780
{
@@ -91,18 +94,19 @@ public async Task<bool> CreateAsync(Payload payload)
9194
}
9295
}
9396

94-
public async Task<IList<Payload>> GetAllAsync(int? skip = null, int? limit = null, string? patientId = "", string? patientName = "")
97+
public async Task<IList<Payload>> GetAllAsync(int? skip = null, int? limit = null, string? patientId = null, string? patientName = null, string? accessionId = null)
9598
{
9699
var builder = Builders<Payload>.Filter;
97100
var filter = builder.Empty;
98-
if (!string.IsNullOrEmpty(patientId))
99-
{
100-
filter &= builder.Regex(p => p.PatientDetails.PatientId, new BsonRegularExpression($"/{patientId}/i"));
101-
}
102-
if (!string.IsNullOrEmpty(patientName))
103-
{
104-
filter &= builder.Regex(p => p.PatientDetails.PatientName, new BsonRegularExpression($"/{patientName}/i"));
105-
}
101+
if (!string.IsNullOrEmpty(patientId)) filter
102+
&= builder.Regex(p => p.PatientDetails.PatientId, new BsonRegularExpression($"/{patientId}/i"));
103+
104+
if (!string.IsNullOrEmpty(patientName)) filter
105+
&= builder.Regex(p => p.PatientDetails.PatientName, new BsonRegularExpression($"/{patientName}/i"));
106+
107+
if (!string.IsNullOrWhiteSpace(accessionId)) filter
108+
&= builder.Regex(p => p.AccessionId, new BsonRegularExpression($"/{accessionId}/i"));
109+
106110

107111
return await GetAllAsync(_payloadCollection,
108112
filter,

src/WorkflowManager/Database/Repositories/WorkflowInstanceRepository.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,10 @@ public async Task<WorkflowInstance> GetByWorkflowInstanceIdAsync(string workflow
313313
return workflow;
314314
}
315315

316-
public async Task<long> CountAsync() => await CountAsync(_workflowInstanceCollection, null);
316+
public async Task<long> CountAsync(FilterDefinition<WorkflowInstance> filter)
317+
{
318+
return await CountAsync(_workflowInstanceCollection, filter);
319+
}
317320

318321
public async Task<long> FilteredCountAsync(Status? status = null, string? payloadId = null)
319322
{

src/WorkflowManager/Database/Repositories/WorkflowRepository.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,12 @@ await _workflowCollection.UpdateManyAsync(
272272
return deletedTimeStamp;
273273
}
274274

275-
public async Task<long> CountAsync() => await _workflowCollection.CountDocumentsAsync(x => x.Deleted == null);
275+
public async Task<long> CountAsync(FilterDefinition<WorkflowRevision> filter)
276+
{
277+
var builder = Builders<WorkflowRevision>.Filter;
278+
filter &= builder.Eq(p => p.Deleted, null);
279+
return await _workflowCollection.CountDocumentsAsync(filter);
280+
}
276281

277282
public async Task<IList<WorkflowRevision>> GetAllAsync(int? skip = null, int? limit = null)
278283
=> await GetAllAsync(_workflowCollection,

src/WorkflowManager/WorkflowManager/Controllers/PayloadsController.cs

100644100755
Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
using Monai.Deploy.WorkflowManager.Common.Miscellaneous.Interfaces;
3131
using Monai.Deploy.WorkflowManager.Common.Miscellaneous.Services;
3232
using Monai.Deploy.WorkflowManager.Common.Miscellaneous.Wrappers;
33+
using MongoDB.Bson;
34+
using MongoDB.Driver;
3335

3436
namespace Monai.Deploy.WorkflowManager.Common.ControllersShared
3537
{
@@ -72,11 +74,16 @@ public PayloadsController(
7274
/// <param name="filter">Filters.</param>
7375
/// <param name="patientId">Optional patient Id.</param>
7476
/// <param name="patientName">Optional patient name.</param>
77+
/// <param name="accessionId">Optional accession Id.</param>
7578
/// <returns>paged response of subset of all workflows.</returns>
7679
[HttpGet]
7780
[ProducesResponseType(typeof(PagedResponse<List<Payload>>), StatusCodes.Status200OK)]
7881
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status500InternalServerError)]
79-
public async Task<IActionResult> GetAllAsync([FromQuery] PaginationFilter filter, [FromQuery] string patientId = "", [FromQuery] string patientName = "")
82+
public async Task<IActionResult> GetAllAsync(
83+
[FromQuery] PaginationFilter filter,
84+
[FromQuery] string patientId = null,
85+
[FromQuery] string patientName = null,
86+
[FromQuery] string accessionId = null)
8087
{
8188
try
8289
{
@@ -88,9 +95,28 @@ public async Task<IActionResult> GetAllAsync([FromQuery] PaginationFilter filter
8895
(validFilter.PageNumber - 1) * validFilter.PageSize,
8996
validFilter.PageSize,
9097
patientId,
91-
patientName);
98+
patientName,
99+
accessionId);
92100

93-
var dataTotal = await _payloadService.CountAsync();
101+
var builder = Builders<Payload>.Filter;
102+
var dbFilter = builder.Empty;
103+
104+
if (!string.IsNullOrEmpty(patientId))
105+
{
106+
dbFilter &= builder.Regex(p => p.PatientDetails.PatientId, new BsonRegularExpression($"/{patientId}/i"));
107+
}
108+
109+
if (!string.IsNullOrEmpty(patientName))
110+
{
111+
dbFilter &= builder.Regex(p => p.PatientDetails.PatientName, new BsonRegularExpression($"/{patientName}/i"));
112+
}
113+
114+
if (!string.IsNullOrWhiteSpace(accessionId))
115+
{
116+
dbFilter &= builder.Regex(p => p.AccessionId, new BsonRegularExpression($"/{accessionId}/i"));
117+
}
118+
119+
var dataTotal = await _payloadService.CountAsync(dbFilter);
94120
var pagedReponse = CreatePagedResponse(pagedData.ToList(), validFilter, dataTotal, _uriService, route);
95121

96122
return Ok(pagedReponse);

src/WorkflowManager/WorkflowManager/Controllers/TaskStatsController.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,12 +140,11 @@ public async Task<IActionResult> GetDailyStatsAsync([FromQuery] TimeFilter filte
140140
TotalApprovals = g.Count(i => string.Compare(i.Status, "Succeeded", true) == 0 && i.Reason == FailureReason.None),
141141
TotalRejections = g.Count(i => string.Compare(i.Status, "Failed", true) == 0 && i.Reason == FailureReason.Rejected),
142142
TotalCancelled = g.Count(i => string.Compare(i.Status, "Failed", true) == 0 && i.Reason == FailureReason.TimedOut),
143-
//TotalAwaitingReview = g.Count(i => string.Compare(i.Status, ApplicationReviewStatus.AwaitingReview.ToString(), true) == 0),
143+
144+
// TotalAwaitingReview = g.Count(i => string.Compare(i.Status, ApplicationReviewStatus.AwaitingReview.ToString(), true) == 0),
144145
TotalAwaitingReview = g.Count(i => string.Compare(i.Status, TaskExecutionStatus.Accepted.ToString(), true) == 0),
145146
});
146147

147-
148-
149148
var pagedStats = statsDto.Skip((filter.PageNumber - 1) * pageSize).Take(pageSize);
150149

151150
var res = CreateStatsPagedResponse(pagedStats, validFilter, statsDto.Count(), _uriService, route);

tests/UnitTests/Common.Tests/Services/PayloadServiceTests.cs

100644100755
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ public async Task GetAll_ReturnsCompletedPayloads()
234234

235235
_payloadRepository.Setup(p =>
236236
p.GetAllAsync(
237-
It.IsAny<int?>(), It.IsAny<int?>(), It.IsAny<string>(), It.IsAny<string>())
237+
It.IsAny<int?>(), It.IsAny<int?>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())
238238
).ReturnsAsync(() => input);
239239
var param = new List<string>() { input.First().Id };
240240
_workflowInstanceRepository.Setup(r =>
@@ -301,7 +301,7 @@ public async Task GetAll_ReturnsPayloads()
301301

302302
_payloadRepository.Setup(p =>
303303
p.GetAllAsync(
304-
It.IsAny<int?>(), It.IsAny<int?>(), It.IsAny<string>(), It.IsAny<string>())
304+
It.IsAny<int?>(), It.IsAny<int?>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())
305305
).ReturnsAsync(() => input);
306306
var param = input.Select(i => i.PayloadId).ToList();
307307
_workflowInstanceRepository.Setup(r =>

tests/UnitTests/Common.Tests/Services/WorkflowServiceTests.cs

100644100755
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
using Monai.Deploy.WorkflowManager.Common.Database.Interfaces;
2222
using Moq;
2323
using Xunit;
24+
using MongoDB.Driver;
2425

2526
namespace Monai.Deploy.WorkflowManger.Common.Tests.Services
2627
{
@@ -137,7 +138,7 @@ public async Task WorkflowService_DeleteWorkflow_Calls_SoftDelete()
137138
public async Task WorkflowService_Count_Calls_Count()
138139
{
139140
var result = await WorkflowService.CountAsync();
140-
_workflowRepository.Verify(r => r.CountAsync(), Times.Once());
141+
_workflowRepository.Verify(r => r.CountAsync(Builders<WorkflowRevision>.Filter.Empty), Times.Once());
141142
}
142143

143144
[Fact]

0 commit comments

Comments
 (0)