Example #1
0
        public Paginated <CaseSubmissionResponse> ExecuteGetByQuery(QueryCaseSubmissionsRequest request)
        {
            if (CheckIfInvalidRequest(request))
            {
                throw new QueryCaseSubmissionsException("Provide at minimum one query parameter");
            }

            var filter = GenerateFilter(request);

            long?deletedRecordsCount = null;

            if (request.IncludeDeletedRecordsCount)
            {
                var deletedRecordsFilter = GenerateFilter(request, addDeletedRecordsFilter: false);
                deletedRecordsFilter &= Builders <CaseSubmission> .Filter.Eq(s => s.Deleted, true);

                deletedRecordsCount = _mongoGateway.GetRecordsCountByFilter(_collectionName, deletedRecordsFilter);
            }

            var pagination = new Pagination {
                Page = request.Page, Size = request.Size
            };

            var(foundSubmission, totalCount) = _mongoGateway.LoadRecordsByFilter(_collectionName, filter, pagination);

            return(new PaginatedExtended <CaseSubmissionResponse>
            {
                Count = totalCount,
                Items = foundSubmission?.Select(s => s.ToDomain(request.IncludeFormAnswers, request.IncludeEditHistory, request.PruneUnfinished, request.IncludeDeletedRecords).ToResponse()).ToList(),
                DeletedItemsCount = deletedRecordsCount
            });
        }
Example #2
0
        public void UpdateCaseSubmissionRequestValidation(QueryCaseSubmissionsRequest request, bool validRequest, string?errorMessage)
        {
            var validator          = new QueryCaseSubmissionsValidator();
            var validationResponse = validator.Validate(request);

            if (validRequest)
            {
                validationResponse.IsValid.Should().BeTrue();
            }
            else
            {
                validationResponse.IsValid.Should().BeFalse();
                validationResponse.ToString().Should().Be(errorMessage);
            }
        }
        public IActionResult GetSubmissionByQueryParameters([FromQuery] QueryCaseSubmissionsRequest request)
        {
            var validator         = new QueryCaseSubmissionsValidator();
            var validationResults = validator.Validate(request);

            if (!validationResults.IsValid)
            {
                return(BadRequest(validationResults.ToString()));
            }

            try
            {
                var forms = _formSubmissionsUseCase.ExecuteGetByQuery(request);

                return(Ok(forms));
            }
            catch (QueryCaseSubmissionsException e)
            {
                return(BadRequest(e.Message));
            }
        }
Example #4
0
 private static bool CheckIfInvalidRequest(QueryCaseSubmissionsRequest request)
 {
     return(request.FormId == null && request.SubmissionStates == null && request.CreatedAfter == null &&
            request.CreatedBefore == null && request.WorkerEmail == null && request.PersonID == null && request.AgeContext == null);
 }
Example #5
0
        public static FilterDefinition <CaseSubmission> GenerateFilter(QueryCaseSubmissionsRequest request, bool addDeletedRecordsFilter = true)
        {
            var builder = Builders <CaseSubmission> .Filter;
            var filter  = builder.Empty;

            if (request.FormId != null)
            {
                filter &= Builders <CaseSubmission> .Filter.Eq(s => s.FormId, request.FormId);
            }

            if (request.SubmissionStates != null)
            {
                var requestSubmissionStates = new List <SubmissionState>();

                foreach (var submissionState in request.SubmissionStates)
                {
                    if (_stringToSubmissionState.ContainsKey(submissionState.ToLower()))
                    {
                        var state = _stringToSubmissionState[submissionState.ToLower()];
                        requestSubmissionStates.Add(state);
                    }
                }

                filter &= Builders <CaseSubmission> .Filter.In(s => s.SubmissionState, requestSubmissionStates);
            }

            if (request.CreatedAfter != null)
            {
                filter &= Builders <CaseSubmission> .Filter.Gte(s => s.CreatedAt, request.CreatedAfter);
            }

            if (request.CreatedBefore != null)
            {
                filter &= Builders <CaseSubmission> .Filter.Lte(s => s.CreatedAt, request.CreatedBefore);
            }

            if (request.WorkerEmail != null)
            {
                var bsonQuery = "{'CreatedBy.Email':" + "\"" + request.WorkerEmail + "\"" + "}";

                filter &= MongoDB.Bson.Serialization.BsonSerializer.Deserialize <BsonDocument>(bsonQuery);
            }

            if (request.AgeContext != null)
            {
                var bsonQuery = "{'Residents.AgeContext':" + "\"" + request.AgeContext.ToUpper() + "\"" + "}";

                filter &= MongoDB.Bson.Serialization.BsonSerializer.Deserialize <BsonDocument>(bsonQuery);
            }

            if (request.PersonID != null)
            {
                var bsonQuery = "{'Residents._id':" + request.PersonID + "}";

                filter &= MongoDB.Bson.Serialization.BsonSerializer.Deserialize <BsonDocument>(bsonQuery);
            }

            if (addDeletedRecordsFilter)
            {
                if (!request.IncludeDeletedRecords)
                {
                    filter &= Builders <CaseSubmission> .Filter.Ne(s => s.Deleted, true);
                }
            }

            return(filter);
        }