diff --git a/application/CohortManager/src/Functions/Shared/Data/Database/CreateCohortDistributionData.cs b/application/CohortManager/src/Functions/Shared/Data/Database/CreateCohortDistributionData.cs index 7d8a92af9f..353391e64f 100644 --- a/application/CohortManager/src/Functions/Shared/Data/Database/CreateCohortDistributionData.cs +++ b/application/CohortManager/src/Functions/Shared/Data/Database/CreateCohortDistributionData.cs @@ -39,11 +39,12 @@ public async Task> GetUnextractedCohortDi } else { - var participantsList = await _cohortDistributionDataServiceClient.GetByFilter(x => x.IsExtracted.Equals(0) && x.RequestId == Guid.Empty); - participantsToBeExtracted = participantsList.OrderBy(x => x.RecordUpdateDateTime ?? x.RecordInsertDateTime).Take(rowCount).ToList(); + + participantsToBeExtracted = (await _cohortDistributionDataServiceClient.GetByFilter(x => x.IsExtracted.Equals(0) && x.RequestId == Guid.Empty, + x => x.RecordUpdateDateTime ?? x.RecordInsertDateTime ?? DateTime.MinValue,rowCount)).ToList(); + } - //TODO do this filtering on the data services var CohortDistributionParticipantList = participantsToBeExtracted.Select(x => new CohortDistributionParticipant(x)).ToList(); diff --git a/application/CohortManager/src/Functions/Shared/DataServices.Client/DataServiceClient.cs b/application/CohortManager/src/Functions/Shared/DataServices.Client/DataServiceClient.cs index 4ea66a5810..594c6f449a 100644 --- a/application/CohortManager/src/Functions/Shared/DataServices.Client/DataServiceClient.cs +++ b/application/CohortManager/src/Functions/Shared/DataServices.Client/DataServiceClient.cs @@ -48,6 +48,15 @@ public async Task> GetByFilter(Expression> GetByFilter(Expression> predicate, Expression> orderBy, int take) + { + + var result = await GetByFilter(predicate); + var orderByFunction = orderBy.Compile(); + return result.OrderBy(orderByFunction).Take(take).ToList(); + + } + public virtual async Task GetSingle(string id) { try diff --git a/application/CohortManager/src/Functions/Shared/DataServices.Client/DataServiceStaticCachedClient.cs b/application/CohortManager/src/Functions/Shared/DataServices.Client/DataServiceStaticCachedClient.cs index 029c35d032..1b09d023b6 100644 --- a/application/CohortManager/src/Functions/Shared/DataServices.Client/DataServiceStaticCachedClient.cs +++ b/application/CohortManager/src/Functions/Shared/DataServices.Client/DataServiceStaticCachedClient.cs @@ -77,6 +77,18 @@ public async Task> GetByFilter(Expression> GetByFilter(Expression> predicate, Expression> orderBy, int take) + { + + _logger.LogInformation("Getting By Filter ordered from static data service {EntityName}", typeof(TEntity).FullName); + await Task.CompletedTask; + + var predicateFunction = predicate.Compile(); + var orderByFunction = orderBy.Compile(); + return _data.Where(predicateFunction).OrderBy(orderByFunction).Take(take).ToList(); + + } + public Task Add(TEntity entity) { throw new NotImplementedException(); diff --git a/application/CohortManager/src/Functions/Shared/DataServices.Client/IDataServiceClient.cs b/application/CohortManager/src/Functions/Shared/DataServices.Client/IDataServiceClient.cs index b0835cdbc9..1dfa41ed79 100644 --- a/application/CohortManager/src/Functions/Shared/DataServices.Client/IDataServiceClient.cs +++ b/application/CohortManager/src/Functions/Shared/DataServices.Client/IDataServiceClient.cs @@ -30,6 +30,13 @@ public interface IDataServiceClient /// /// Adds a given records to the database /// + /// linq query defining the filter on the table + /// query defining the order + /// number of records to take from the filtered result + Task> GetByFilter(Expression> predicate, Expression> orderBy, int take); + /// + /// Adds a given records to the database + /// /// object of type TEntity to be inserted in the database /// a boolean representing if the record was inserted successfully Task Add(TEntity entity); diff --git a/application/CohortManager/src/Functions/Shared/Common/Utilities/ReflectionUtilities.cs b/application/CohortManager/src/Functions/Shared/Utilities/ReflectionUtilities.cs similarity index 96% rename from application/CohortManager/src/Functions/Shared/Common/Utilities/ReflectionUtilities.cs rename to application/CohortManager/src/Functions/Shared/Utilities/ReflectionUtilities.cs index d27b407bb0..fbd5a985dd 100644 --- a/application/CohortManager/src/Functions/Shared/Common/Utilities/ReflectionUtilities.cs +++ b/application/CohortManager/src/Functions/Shared/Utilities/ReflectionUtilities.cs @@ -3,7 +3,6 @@ namespace Common; using System.ComponentModel.DataAnnotations; using System.Reflection; -// TODO: move to Shared/Utilities public static class ReflectionUtilities { /// diff --git a/tests/UnitTests/CohortDistributionTests/CohortDistributionDataTests/AddCohortDistributionTests.cs b/tests/UnitTests/CohortDistributionTests/CohortDistributionDataTests/AddCohortDistributionTests.cs index 8428332c81..80ad682ff5 100644 --- a/tests/UnitTests/CohortDistributionTests/CohortDistributionDataTests/AddCohortDistributionTests.cs +++ b/tests/UnitTests/CohortDistributionTests/CohortDistributionDataTests/AddCohortDistributionTests.cs @@ -30,6 +30,10 @@ public void Setup() .Setup(x => x.GetByFilter(It.IsAny>>())) .ReturnsAsync((Expression> filter) => _participantList.Where(filter.Compile()).ToList()); + _cohortDistributionDataServiceClient + .Setup(x => x.GetByFilter(It.IsAny>>(), It.IsAny>>(), It.IsAny())) + .ReturnsAsync((Expression> filter, Expression> orderBy, int take) => + _participantList.Where(filter.Compile()).OrderBy(orderBy.Compile()).Take(take).ToList()); _cohortDistributionDataServiceClient .Setup(x => x.GetSingle(It.IsAny()))