private AgencySubjectQueryParameters GetParametersFromRequest() { var parameters = new AgencySubjectQueryParameters(); if (Guid.TryParse(Request.Query["subject"].FirstOrDefault(), out var subject)) { parameters.Subject = subject; } if (int.TryParse(Request.Query["take"].FirstOrDefault(), out var take)) { parameters.Take = take; } if (DateTimeOffset.TryParse(Request.Query["from"].FirstOrDefault(), out var from)) { parameters.From = from; } if (DateTimeOffset.TryParse(Request.Query["to"].FirstOrDefault(), out var to)) { parameters.To = to; } return(parameters); }
public async Task <IEnumerable <ISampleModel> > QueryAsync(SampleDataTypes type, AgencySubjectQueryParameters parameters) { var request = new AgencySubjectQueryTokenRequest(false, included: new[] { parameters.Subject }); var response = await this.agencyApiClient.CreateQueryAsync(request); var agencyQueryToken = response.Value; if (string.IsNullOrWhiteSpace(agencyQueryToken)) { throw new InvalidOperationException("Unable to complete health data query, unable to create query"); } var dataRequest = new HealthDataQueryRequest(parameters.From, parameters.To, this.sampleDataTypeMapper.GetHealthQueryTypesFor(type).ToArray()) { OrderDirection = HealthDataQueryRequest.OrderDirectionOptions.Descending, OrderProperty = HealthDataQueryRequest.OrderPropertyOptions.EndDate }; var healthDataQueryResponse = await this.healthDataClient.CreateQueryAsync(dataRequest, agencyQueryToken); if (healthDataQueryResponse.IsValid()) { var data = await this.healthDataClient .ExecuteQueryAsync(healthDataQueryResponse.QueryKey, parameters.Take, 0) .ConfigureAwait(false); var model = this.sampleMapper.Map(data, type); return(model); } throw new InvalidOperationException("Unable to complete health data query, no query key was returned"); }
public async Task <IActionResult> Index(string type, [FromQuery] AgencySubjectQueryParameters parameters) { return(await Index(new[] { type }, parameters)); }
public async Task <IActionResult> Index([FromQuery] IEnumerable <string> type, [FromQuery] AgencySubjectQueryParameters parameters) { var agencySubject = await this.agencySubjectQueryService.GetAgencySubjectAsync(parameters.Subject); if (!type.Any()) { type = this.sampleDataTypeMapper.GetAvailableSampleDataTypes(agencySubject.HealthDataScopes.Select(s => s.Name)).Select(s => s.Slug); } if (agencySubject == null) { return(RedirectToAction("Index", "AgencyUserList")); } var sampleTypes = type .Select(t => this.sampleDataTypeMapper.ConvertToSampleDataType(t)) .Where(t => t != null) .Select(t => t.Value); var model = new AgencyQueryViewModel(agencySubject) { Parameters = parameters, Types = sampleTypes }; return(this.View(model)); }
public async Task <IActionResult> Index([FromQuery] IEnumerable <SampleDataTypes> type, [FromQuery] AgencySubjectQueryParameters parameters) { var claimsResponse = await this.agencySubjectQueryService.GetAgencySubjectsAsync(); var subjectList = new List <AgencySubjectViewModel>(); foreach (var claimSet in claimsResponse) { var subject = new AgencySubjectViewModel { Name = claimSet.Name, GivenName = claimSet.GivenName, FamilyName = claimSet.FamilyName, Subject = claimSet.Subject, HealthDataScopes = claimSet.HealthDataScopes }; subjectList.Add(subject); } return(this.View(subjectList)); }
public async Task <IEnumerable <ISampleModel> > QueryAsync(SampleDataTypes type, AgencySubjectQueryParameters parameters) { var request = new AgencySubjectQueryTokenRequest(false, included: new[] { parameters.Subject }); var response = await this.agencyApiClient.CreateQueryAsync(request); var agencyQueryToken = response.Value; if (string.IsNullOrWhiteSpace(agencyQueryToken)) { throw new InvalidOperationException("Unable to complete health data query, agency-query-token is missing"); } var requestDateParams = new Dictionary <string, object> { { "RangeOfStartDate", new HealthSample.HealthSampleDateRange(parameters.From, parameters.To) }, }; var queryResult = await this.healthDataClient.ExecuteQueryAsync( agencyQueryToken, this.sampleDataTypeMapper.GetHealthQueryTypesFor(type).ToArray(), requestDateParams, HealthDataQueryRequest.OrderPropertyOptions.EndDate, HealthDataQueryRequest.OrderDirectionOptions.Descending, parameters.Take) .ConfigureAwait(false); var model = this.sampleMapper.Map(queryResult.Datas, type); return(model); }