Exemplo n.º 1
0
        public async Task <IActionResult> GetAllEmployeesAsync([FromQuery] RequestParameters request, [FromHeader(Name = "accept")] string mediaType)
        {
            if (string.IsNullOrWhiteSpace(request.OrderBy))
            {
                request.OrderBy = "Name";
            }

            if (!_typeHelperService.TypeHasProperties <EmployeeDtoForMultiple>(request.Fields))
            {
                return(BadRequest());
            }

            var pagedEmployeeList = await _employeeRepository.GetEmployeesAsync(
                request.OrderBy, request.SearchQuery, request.PageNumber,
                request.PageSize, _propertyMappingService.GetPropertyMapping <EmployeeDtoForMultiple, Employee>());

            var paginationMetaData = _controllerHelper.CreatePaginationMetadataObject(pagedEmployeeList, request, "GetEmployees");

            Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(paginationMetaData));

            var employees = Mapper.Map <IEnumerable <EmployeeDtoForMultiple> >(pagedEmployeeList);

            var shapedEmployees = employees.ShapeData(request.Fields);

            if (mediaType == "application/vnd.AO.json+hateoas")
            {
                var shapedAndLinkedEmployees = _controllerHelper.AddLinksToShapedObjects(shapedEmployees, "Employee", request.Fields);

                var linkedResourceCollection = _controllerHelper.AddLinksToCollection(shapedAndLinkedEmployees, request, pagedEmployeeList.HasNext, pagedEmployeeList.HasPrevious, "Employee");

                if (request.IncludeMetadata)
                {
                    ((IDictionary <string, object>)linkedResourceCollection).Add("metadata", paginationMetaData);
                    return(Ok(linkedResourceCollection));
                }

                return(Ok(linkedResourceCollection));
            }


            if (request.IncludeMetadata)
            {
                var entityWithMeaData = new ExpandoObject();
                ((IDictionary <string, object>)entityWithMeaData).Add("metadata", paginationMetaData);
                ((IDictionary <string, object>)entityWithMeaData).Add("records", shapedEmployees);
                return(Ok(entityWithMeaData));
            }

            return(Ok(shapedEmployees));
        }
Exemplo n.º 2
0
        public async Task <IActionResult> GetArtists([FromQuery] RequestParameters requestParameter)
        {
            if (string.IsNullOrWhiteSpace(requestParameter.OrderBy))
            {
                requestParameter.OrderBy = "StageName";
            }

            var artistPagedList = await GetPagedListOfArtists(requestParameter);

            var paginationMetaData = _controllerHelper.CreatePaginationMetadataObject(artistPagedList, requestParameter, "GetArtists");


            Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(paginationMetaData));

            var artists = Mapper.Map <IEnumerable <ArtistDto> >(artistPagedList);

            if (requestParameter.IncludeMetadata)
            {
                var artistsWithMetadata = new EntityWithPaginationMetadataDto <ArtistDto>(paginationMetaData, artists);
                return(Ok(artistsWithMetadata));
            }

            return(Ok(artists));
        }
Exemplo n.º 3
0
        public async Task <IActionResult> GetAllSchedulesAsync(
            [FromRoute, SwaggerParameter("Id of the employee to find schedules for", Required = true)] Guid employeeId,
            [FromQuery] RequestParameters request,
            [FromHeader(Name = "accept"), SwaggerParameter("Request Hateoas")] string mediaType)
        {
            if (string.IsNullOrWhiteSpace(request.OrderBy))
            {
                request.OrderBy = "WorkDate";
            }

            if (!_typeHelperService.TypeHasProperties <ScheduleDto>(request.Fields))
            {
                return(BadRequest());
            }

            if (!await _scheduleRepository.EntityExists <Employee>(e => e.Id == employeeId))
            {
                return(NotFound());
            }

            var pagedSchedules = await _scheduleRepository.GetSchedulesAsync(
                request.OrderBy, request.SearchQuery, request.PageNumber,
                request.PageSize, _propertyMappingService.GetPropertyMapping <ScheduleDto, Schedule>(),
                employeeId);

            var paginationMetadata = _controllerHelper.CreatePaginationMetadataObject(pagedSchedules, request, "GetSchedules");

            Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(paginationMetadata));

            var schedules = Mapper.Map <IEnumerable <ScheduleDto> >(pagedSchedules);


            if (mediaType == "application/vnd.AO.json+hateoas")
            {
                var shapedSchedules          = schedules.ShapeData(request.Fields);
                var shapedAndLinkedSchedules = _controllerHelper.AddLinksToShapedObjects(shapedSchedules, "Schedule", request.Fields);

                var linkedResourceCollection = _controllerHelper.AddLinksToCollection(shapedAndLinkedSchedules, request, pagedSchedules.HasNext, pagedSchedules.HasPrevious, "Schedule");

                if (request.IncludeMetadata)
                {
                    ((IDictionary <string, object>)linkedResourceCollection).Add("metadata", paginationMetadata);
                    return(Ok(linkedResourceCollection));
                }

                return(Ok(linkedResourceCollection));
            }


            if (request.IncludeMetadata)
            {
                var entityWithMeaData = new ExpandoObject();
                ((IDictionary <string, object>)entityWithMeaData).Add("metadata", paginationMetadata);

                if (!string.IsNullOrWhiteSpace(request.Fields))
                {
                    ((IDictionary <string, object>)entityWithMeaData).Add("records", schedules.ShapeData(request.Fields));
                }
                else
                {
                    ((IDictionary <string, object>)entityWithMeaData).Add("records", schedules);
                }

                return(Ok(entityWithMeaData));
            }

            if (!string.IsNullOrWhiteSpace(request.Fields))
            {
                return(Ok(schedules.ShapeData(request.Fields)));
            }

            return(Ok(schedules));
        }