Esempio n. 1
0
        public async Task <ActionResult <IEnumerable <ManagerDto> > > GetManagers([FromQuery] PaginationResourceParameters parameters)
        {
            var query = _dbContext.Managers
                        .AsNoTracking()
                        .Include(x => x.Substitute)
                        .Include(x => x.ApplicationUser)
                        .ThenInclude(x => x.UserPhoto);

            var entities = await query
                           .Skip(parameters.PageIndex *parameters.PageSize)
                           .Take(parameters.PageSize)
                           .ToListAsync();

            var dtos = _mapper.Map <IEnumerable <ManagerDto> >(entities);

            #region 分頁資訊

            var length = await query.CountAsync();

            var paginationMetadata = new
            {
                pageLength = length,               // 總資料數
                pageSize   = parameters.PageSize,  // 一頁的項目數
                pageIndex  = parameters.PageIndex, // 目前頁碼
            };
            Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetadata));

            #endregion

            return(Ok(dtos));
        }
Esempio n. 2
0
        public async Task <ActionResult <IEnumerable <CompanyDto> > > CompanyList([FromQuery] PaginationResourceParameters parameters)
        {
            var entities = await _dbContext.Companies
                           .AsNoTracking()
                           .Include(x => x.CompanyLogo)
                           .Include(x => x.IndustrialClassifications)
                           .OrderBy(x => x.RegistrationNumber)
                           .Skip(parameters.PageIndex * parameters.PageSize)
                           .Take(parameters.PageSize)
                           .ToListAsync();

            var dtos = _mapper.Map <IEnumerable <CompanyDto> >(entities);

            #region 分頁資訊

            var length = await _dbContext.Companies.CountAsync();

            var paginationMetadata = new
            {
                pageLength = length,               // 總資料數
                pageSize   = parameters.PageSize,  // 一頁的項目數
                pageIndex  = parameters.PageIndex, // 目前頁碼
            };
            Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetadata));

            #endregion

            return(Ok(dtos));
        }
Esempio n. 3
0
 private string GenerateTouristRouteResourceUrl(TouristRouteResourceParameters touristRouteResourceParameters,
                                                PaginationResourceParameters paginationResourceParameters, ResourceUrlType resourceUrlType)
 {
     return(resourceUrlType switch
     {
         ResourceUrlType.PreviousPage => _urlHelper.Link("GetTouristRoutes", new
         {
             orderBy = touristRouteResourceParameters.OrderBy,
             keyword = touristRouteResourceParameters.Keyword,
             rating = touristRouteResourceParameters.Rating,
             fields = touristRouteResourceParameters.Fields,
             pageNumber = paginationResourceParameters.PageNumber - 1,
             pageSize = paginationResourceParameters.PageSize
         }),
         ResourceUrlType.NextPage => _urlHelper.Link("GetTouristRoutes", new
         {
             orderBy = touristRouteResourceParameters.OrderBy,
             keyword = touristRouteResourceParameters.Keyword,
             rating = touristRouteResourceParameters.Rating,
             fields = touristRouteResourceParameters.Fields,
             pageNumber = paginationResourceParameters.PageNumber + 1,
             pageSize = paginationResourceParameters.PageSize
         }),
         _ => _urlHelper.Link("GetTouristRoutes", new
         {
             orderBy = touristRouteResourceParameters.OrderBy,
             keyword = touristRouteResourceParameters.Keyword,
             rating = touristRouteResourceParameters.Rating,
             fields = touristRouteResourceParameters.Fields,
             pageNumber = paginationResourceParameters.PageNumber,
             pageSize = paginationResourceParameters.PageSize
         })
     });
Esempio n. 4
0
        public async Task <ActionResult <IEnumerable <FileDto> > > GetResumes([FromQuery] PaginationResourceParameters parameters, [FromQuery] bool archive)
        {
            var userId = User.Claims
                         .Single(p => p.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier").Value;
            var entities = await _dbContext.FileResumes
                           .AsNoTracking()
                           .Where(x => x.ApplicationUserId == userId)
                           .Where(x => x.IsArchive == archive)
                           .Skip(parameters.PageIndex * parameters.PageSize)
                           .Take(parameters.PageSize)
                           .ToListAsync();

            var dtos = _mapper.Map <IEnumerable <FileDto> >(entities);

            #region 分頁資訊

            var length = await _dbContext.FileResumes
                         .Where(x => x.IsArchive == archive)
                         .CountAsync();

            var paginationMetadata = new
            {
                pageLength = length,               // 總資料數
                pageSize   = parameters.PageSize,  // 一頁的項目數
                pageIndex  = parameters.PageIndex, // 目前頁碼
            };
            Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetadata));

            #endregion

            return(Ok(dtos));
        }
        private IEnumerable <LinkDto> CreateLinksForTouristRouteList(
            TouristRouteResourceParameters touristRouteResourceParameters,
            PaginationResourceParameters paginationResourceParameters)
        {
            var links = new List <LinkDto>();

            links.Add(
                new LinkDto(
                    GenerateTouristRouteResourceUrl(
                        touristRouteResourceParameters,
                        paginationResourceParameters,
                        ResourceUriType.CurrentPage),
                    "self",
                    "GET"
                    )
                );

            links.Add(new LinkDto(

                          Url.Link("CreateTouristRoute", null),
                          "create_tourist_route",
                          "POST"
                          ));


            return(links);
        }
Esempio n. 6
0
        public async Task <IActionResult> GetOrders(
            [FromQuery] PaginationResourceParameters paginationResourceParameters
            )
        {
            var currentUserId = _httpContextAccessor
                                .HttpContext
                                .User
                                .FindFirst(ClaimTypes.NameIdentifier)
                                .Value;

            if (string.IsNullOrWhiteSpace(currentUserId))
            {
                return(NotFound($"User {currentUserId} 不存在"));
            }
            var ordersFromRepo = await _touristRouteRepository.GetOrdersByUserIdAsync(
                currentUserId,
                paginationResourceParameters.PageSize,
                paginationResourceParameters.PageNumber);

            if (ordersFromRepo == null || ordersFromRepo.Count() <= 0)
            {
                return(NotFound($"订单不存在"));
            }
            return(Ok(_mapper.Map <IEnumerable <OrderDto> >(ordersFromRepo)));
        }
Esempio n. 7
0
        public async Task <ActionResult <IEnumerable <MyEventDto> > > MyEvents([FromQuery] PaginationResourceParameters parameters)
        {
            var userId = User.Claims
                         .Single(p => p.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier").Value;
            var query = _dbContext.Events
                        .AsNoTracking()
                        .Include(x => x.EventAttendees.Where(attendee => attendee.ApplicationUserId == userId))
                        .Where(x => x.EventAttendees.Any(attendee => attendee.ApplicationUserId == userId));
            var entities = await query
                           .OrderBy(x => x.StartTime)
                           .Skip(parameters.PageIndex * parameters.PageSize)
                           .Take(parameters.PageSize)
                           .ToListAsync();

            var dtos = _mapper.Map <IEnumerable <MyEventDto> >(entities);

            #region 分頁資訊

            var length = await query.CountAsync();

            var paginationMetadata = new
            {
                pageLength = length,               // 總資料數
                pageSize   = parameters.PageSize,  // 一頁的項目數
                pageIndex  = parameters.PageIndex, // 目前頁碼
            };
            Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetadata));

            #endregion

            return(Ok(dtos));
        }
        private string CreateResourceUri(PaginationResourceParameters paginationResourceParameters, ResourceUriType type)
        {
            switch (type)
            {
            case ResourceUriType.Previous:
                var x = _urlHelper.Link("GetAllEmployee", new
                {
                    pageNumber = paginationResourceParameters.PageNumber - 1,
                    pageSize   = paginationResourceParameters.PageSize
                });
                return(x);

            case ResourceUriType.Next:
                return(_urlHelper.Link("GetAllEmployee", new
                {
                    pageNumber = paginationResourceParameters.PageNumber + 1,
                    pageSize = paginationResourceParameters.PageSize
                }));

            default:
                return(_urlHelper.Link("GetAllEmployee", new
                {
                    pageNumber = paginationResourceParameters.PageNumber,
                    pageSize = paginationResourceParameters.PageSize
                }));
            }
        }
Esempio n. 9
0
        public async Task <IActionResult> GetOrders([FromQuery] PaginationResourceParameters parameters)
        {
            // 1. get current user
            var userId = _httpContext.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value;
            // 2. get orders by user id
            var orders = await _touristRouteRepository.GetOrdersByUserId(userId, parameters.PageNumber, parameters.PageSize);

            return(Ok(_mapper.Map <IEnumerable <OrderDto> >(orders)));
        }
Esempio n. 10
0
        public async Task <IActionResult> GetOrders(
            [FromQuery] PaginationResourceParameters paginationResourceParameters)
        {
            var userId = _httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value;
            var orders = await _touristRouteRepository.GetOrdersByUserIdAsync(userId,
                                                                              paginationResourceParameters.PageSize, paginationResourceParameters.PageNumber);

            var ordersDto = _mapper.Map <IEnumerable <OrderDto> >(orders);

            return(Ok(ordersDto));
        }
Esempio n. 11
0
        public async Task <IActionResult> GetOrdersAsync(
            [FromQuery] PaginationResourceParameters parameters
            )
        {
            // 1 获得当前用户
            var userId = httpContextAccessor
                         .HttpContext.User.FindFirst(ClaimTypes.Name).Value;

            // 2 使用用户id来获取订单历史记录
            var orders = await touristRouteRepository.GetOrdersByUserIdAsync(userId, parameters.PageSize, parameters.PageNumber);

            return(Ok(mapper.Map <IEnumerable <OrderDto> >(orders)));
        }
Esempio n. 12
0
        public async Task <ActionResult <IEnumerable <EventDto> > > GetEvents([FromQuery] PaginationResourceParameters parameters, [FromQuery] ActivityStatus status)
        {
            var query = _dbContext.Events.AsNoTracking();

            switch (status)
            {
            case ActivityStatus.Coming:
                query = query.Where(x => x.RegistrationStartTime != null && x.RegistrationStartTime > DateTime.Now);
                break;

            case ActivityStatus.Ing:
                query = query
                        .Where(x =>
                               (x.RegistrationStartTime != null && x.RegistrationStartTime <= DateTime.Now && x.EndTime > DateTime.Now) ||
                               (x.RegistrationStartTime == null && x.EndTime > DateTime.Now));
                break;

            case ActivityStatus.End:
                query = query.Where(x => x.EndTime <= DateTime.Now);
                break;
            }

            var entities = await query
                           .OrderBy(x => x.StartTime)
                           .Include(x => x.EventFiles)
                           .Skip(parameters.PageIndex * parameters.PageSize)
                           .Take(parameters.PageSize)
                           .ToListAsync();

            var dtos = _mapper.Map <IEnumerable <EventDto> >(entities);

            #region 分頁資訊

            var length = await query.CountAsync();

            var paginationMetadata = new
            {
                pageLength = length,               // 總資料數
                pageSize   = parameters.PageSize,  // 一頁的項目數
                pageIndex  = parameters.PageIndex, // 目前頁碼
            };
            Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetadata));

            #endregion

            return(Ok(dtos));
        }
Esempio n. 13
0
 private string GenerateTouristRouteResourceURL(
     TouristRouteResourceParameters parameters,
     PaginationResourceParameters parameters2,
     ResourceUriType type
     )
 {
     return(type switch
     {
         ResourceUriType.PreviousPage => urlHelper.Link("GetTouristRoutesAsync",
                                                        new
         {
             fields = parameters.Fields,
             orderBy = parameters.OrderBy,
             keyword = parameters.Key,
             rating = parameters.Rating,
             pageNumber = parameters2.PageNumber - 1,
             pageSize = parameters2.PageSize
         }),
         ResourceUriType.NextPage => urlHelper.Link("GetTouristRoutesAsync",
                                                    new
         {
             fields = parameters.Fields,
             orderBy = parameters.OrderBy,
             keyword = parameters.Key,
             rating = parameters.Rating,
             pageNumber = parameters2.PageNumber + 1,
             pageSize = parameters2.PageSize
         }),
         _ => urlHelper.Link("GetTouristRoutesAsync",
                             new
         {
             fields = parameters.Fields,
             orderBy = parameters.OrderBy,
             keyword = parameters.Key,
             rating = parameters.Rating,
             pageNumber = parameters2.PageNumber,
             pageSize = parameters2.PageSize
         })
     });
        public IActionResult GetAllEmployee([FromQuery] PaginationResourceParameters paginationResourceParameters)
        {
            var employees = _repositoryWrapper.Employee.GetEmployees(paginationResourceParameters);

            var previousPageLink = employees.HasPrevious ?
                                   CreateResourceUri(paginationResourceParameters, ResourceUriType.Previous) : null;

            var nextPageLink = employees.HasNext ?
                               CreateResourceUri(paginationResourceParameters, ResourceUriType.Next) : null;

            var paginationMetaData = new
            {
                totalCount       = employees.TotalCount,
                pageSize         = employees.PageSize,
                currentPage      = employees.CurrentPage,
                totalPage        = employees.TotalPages,
                previousPageLink = previousPageLink,
                nextPageLink     = nextPageLink
            };

            ResponseModel <Employee> responseModel = new ResponseModel <Employee>()
            {
                Items            = employees.ToList(),
                HasPreviousPage  = employees.HasPrevious,
                PreviousPageLink = previousPageLink,
                HasNextPage      = employees.HasNext,
                NextPageLink     = nextPageLink,
                TotalCount       = employees.TotalCount,
                PageSize         = employees.PageSize,
                CurrentPage      = employees.CurrentPage,
                TotalPage        = employees.TotalPages
            };

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

            return(Ok(responseModel));
        }
        public PagedList <Employee> GetEmployees(PaginationResourceParameters paginationResourceParameters)
        {
            IQueryable <Employee> query = _dbSet;

            return(PagedList <Employee> .Create(query, paginationResourceParameters.PageNumber, paginationResourceParameters.PageSize));
        }
        [HttpHead]// only return header info not the body
        public async Task <IActionResult> GetRouristRoutes(
            [FromQuery] TouristRouteResourceParameters parameters,
            [FromQuery] PaginationResourceParameters paginationResourceParameters,
            [FromHeader(Name = "Accept")] string mediaType
            //[FromQuery] string keyword,
            //string rating
            )
        {
            if (!MediaTypeHeaderValue.TryParse(mediaType, out MediaTypeHeaderValue parsedMediaType))
            {
                return(BadRequest($"http header: accept 不正确"));
            }

            if (!_propertyMappingService
                .IsMappingExists <TouristRouteDto, TouristRoute>
                    (parameters.OrderBy))
            {
                return(BadRequest($"请输入正确的排序参数"));
            }

            if (!_propertyMappingService.IsPropertyExists <TouristRouteDto>(parameters.Fields))
            {
                return(BadRequest($"请输入正确的塑形参数"));
            }

            var touristRoutesFromRepo = await _touristRouteRepository
                                        .GetTouristRoutesAsync(
                parameters.Keyword,
                parameters.RatingOperator,
                parameters.RatingValue,
                paginationResourceParameters.PageSize,
                paginationResourceParameters.PageNumber,
                parameters.OrderBy);

            if (touristRoutesFromRepo == null ||
                touristRoutesFromRepo.Count() <= 0)
            {
                return(NotFound("没有旅游路线"));
            }

            var previousPageLink = touristRoutesFromRepo.HasPrevious ?
                                   GenerateTouristRouteResourceUrl(
                parameters,
                paginationResourceParameters,
                ResourceUriType.PreviousPage
                ) : null;

            var nextPageLink = touristRoutesFromRepo.HasNext ?
                               GenerateTouristRouteResourceUrl(
                parameters,
                paginationResourceParameters,
                ResourceUriType.NextPage
                ) : null;


            var paginationMetadata = new
            {
                previousPageLink,
                nextPageLink,
                totalCount  = touristRoutesFromRepo.TotalCount,
                pageSize    = touristRoutesFromRepo.PageSize,
                currentPage = touristRoutesFromRepo.CurrentPage,
                totalPages  = touristRoutesFromRepo.TotalPages
            };

            Response.Headers.Add("x-pagination", JsonConvert.SerializeObject(paginationMetadata));

            bool isHateoas = parsedMediaType.SubTypeWithoutSuffix.EndsWith("hateoas", StringComparison.InvariantCultureIgnoreCase);

            var primaryMediaType = isHateoas
                ? parsedMediaType.SubTypeWithoutSuffix.Substring(0, parsedMediaType.SubTypeWithoutSuffix.Length - 8)
                : parsedMediaType.SubTypeWithoutSuffix;
            //var touristRoutesDto = _mapper.Map<IEnumerable<TouristRouteDto>>(touristRoutesFromRepo);
            //var shapedDtoList = touristRoutesDto.ShapeData(parameters.Fields);

            IEnumerable <object>        touristRoutesDto;
            IEnumerable <ExpandoObject> shapedDtoList;

            if (primaryMediaType == "vnd.ivan.touristRoute.simplify")
            {
                touristRoutesDto = _mapper.Map <IEnumerable <TouristRouteSimplifyDto> >(touristRoutesFromRepo);

                shapedDtoList = ((IEnumerable <TouristRouteSimplifyDto>)touristRoutesDto).ShapeData(parameters.Fields);
            }
            else
            {
                touristRoutesDto = _mapper.Map <IEnumerable <TouristRouteDto> >(touristRoutesFromRepo);
                shapedDtoList    = ((IEnumerable <TouristRouteDto>)touristRoutesDto).ShapeData(parameters.Fields);
            }

            if (isHateoas)
            {
                var linkDto = CreateLinksForTouristRouteList(parameters, paginationResourceParameters);

                var shapedDtoWithLinkedList = shapedDtoList.Select(t =>
                {
                    var touristDictionary = t as IDictionary <string, object>;

                    var links = CreateLinkForTouristRoute(
                        (Guid)touristDictionary["Id"],
                        null);
                    touristDictionary.Add("links", links);
                    return(touristDictionary);
                });

                var result = new
                {
                    value = shapedDtoWithLinkedList,
                    links = linkDto
                };
                return(Ok(result));
            }

            return(Ok(shapedDtoList));
        }