public async Task <IActionResult> GetPatients([FromQuery] PatientParametersDto patientParametersDto, CancellationToken cancellationToken)
        {
            var patientQuery = new PatientListQuery(patientParametersDto);
            var patientsDto  = await _mediator.Send(patientQuery, cancellationToken);

            var paginationMetadata = new
            {
                totalCount        = patientsDto.TotalCount,
                pageSize          = patientsDto.PageSize,
                currentPageSize   = patientsDto.CurrentPageSize,
                currentStartIndex = patientsDto.CurrentStartIndex,
                currentEndIndex   = patientsDto.CurrentEndIndex,
                pageNumber        = patientsDto.PageNumber,
                totalPages        = patientsDto.TotalPages,
                hasPrevious       = patientsDto.HasPrevious,
                hasNext           = patientsDto.HasNext
            };

            Response.Headers.Add("X-Pagination",
                                 JsonSerializer.Serialize(paginationMetadata));

            var response = new Response <IEnumerable <PatientDto> >(patientsDto);

            return(Ok(response));
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> GetPatients([FromQuery] PatientParametersDto patientParametersDto)
        {
            var patientsFromRepo = await _patientRepository.GetPatientsAsync(patientParametersDto);

            var paginationMetadata = new
            {
                totalCount        = patientsFromRepo.TotalCount,
                pageSize          = patientsFromRepo.PageSize,
                currentPageSize   = patientsFromRepo.CurrentPageSize,
                currentStartIndex = patientsFromRepo.CurrentStartIndex,
                currentEndIndex   = patientsFromRepo.CurrentEndIndex,
                pageNumber        = patientsFromRepo.PageNumber,
                totalPages        = patientsFromRepo.TotalPages,
                hasPrevious       = patientsFromRepo.HasPrevious,
                hasNext           = patientsFromRepo.HasNext
            };

            Response.Headers.Add("X-Pagination",
                                 JsonSerializer.Serialize(paginationMetadata));

            var patientsDto = _mapper.Map <IEnumerable <PatientDto> >(patientsFromRepo);
            var response    = new Response <IEnumerable <PatientDto> >(patientsDto);

            return(Ok(response));
        }
        public async Task <IActionResult> GetPatients([FromQuery] PatientParametersDto patientParametersDto)
        {
            // add error handling
            var query         = new PatientListQuery(patientParametersDto);
            var queryResponse = await _mediator.Send(query);

            var paginationMetadata = new
            {
                totalCount        = queryResponse.TotalCount,
                pageSize          = queryResponse.PageSize,
                currentPageSize   = queryResponse.CurrentPageSize,
                currentStartIndex = queryResponse.CurrentStartIndex,
                currentEndIndex   = queryResponse.CurrentEndIndex,
                pageNumber        = queryResponse.PageNumber,
                totalPages        = queryResponse.TotalPages,
                hasPrevious       = queryResponse.HasPrevious,
                hasNext           = queryResponse.HasNext
            };

            Response.Headers.Add("X-Pagination",
                                 JsonSerializer.Serialize(paginationMetadata));

            var response = new Response <IEnumerable <PatientDto> >(queryResponse);

            return(Ok(response));
        }
        public async Task <PagedList <Patient> > GetPatientsAsync(PatientParametersDto patientParameters)
        {
            if (patientParameters == null)
            {
                throw new ArgumentNullException(nameof(patientParameters));
            }

            var collection = _context.Patients
                             as IQueryable <Patient>; // TODO: AsNoTracking() should increase performance, but will break the sort tests. need to investigate

            var sieveModel = new SieveModel
            {
                Sorts   = patientParameters.SortOrder ?? "PatientId",
                Filters = patientParameters.Filters
            };

            collection = _sieveProcessor.Apply(sieveModel, collection);

            return(await PagedList <Patient> .CreateAsync(collection,
                                                          patientParameters.PageNumber,
                                                          patientParameters.PageSize));
        }
Ejemplo n.º 5
0
 public PatientListQuery(PatientParametersDto queryParameters)
 {
     QueryParameters = queryParameters;
 }
 public PatientListQuery(PatientParametersDto patientParametersDto)
 {
     PatientParametersDto = patientParametersDto;
 }