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 }); }
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)); } }
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); }
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); }