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));
        }
Пример #6
0
        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);
        }