public async Task <IActionResult> GetAccessories([FromQuery] AccessoryParameters accessoryParameters)
        {
            var(accessories, metadata) = await _accessoryService.GetManyAsync(accessoryParameters);

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

            return(Ok(accessories));
        }
        public async Task <(IEnumerable <AccessoryDto>, Metadata)> GetManyAsync(AccessoryParameters accessoryParameters)
        {
            var accessories = await _repositoryManager.Accessory.GetAllAccessoriesAsync(CurrentUserId, accessoryParameters);

            if (accessories == null)
            {
                _logger.LogWarning("There are no accessories in db!");
            }

            return(_mapper.Map <IEnumerable <AccessoryDto> >(accessories), accessories?.Metadata);
        }
        public async Task <PagedList <Accessory> > GetAllAccessoriesAsync(Guid userId,
                                                                          AccessoryParameters accessoryParameters)
        {
            var result = await FindByCondition(x => x.User.Id.Equals(userId))
                         .FilterBy(accessoryParameters)
                         .Search(accessoryParameters.SearchTerm)
                         .Sort(accessoryParameters.OrderBy)
                         .Include(x => x.Device)
                         .ToListAsync();

            return(PagedList <Accessory> .ToPagedList(result, accessoryParameters.PageNumber, accessoryParameters.PageSize));
        }
        public static IQueryable <Accessory> FilterBy(this IQueryable <Accessory> queryable,
                                                      AccessoryParameters accessoryParameters)
        {
            var filters = accessoryParameters.GetFilters();

            foreach (var filter in filters)
            {
                queryable = filter switch
                {
                    "Name" => queryable.Where(x => x.Name.Equals(accessoryParameters.Name)),
                    "Category" => queryable.Where(x => x.Category.Equals(accessoryParameters.Category)),
                    "Status" => queryable.Where(x => x.Status.Equals(accessoryParameters.Status)),
                    "ModelNumber" => queryable.Where(x => x.ModelNumber.Equals(accessoryParameters.ModelNumber)),
                    "Manufacturer" => queryable.Where(x => x.Manufacturer.Equals(accessoryParameters.Manufacturer)),
                    "OfficeAddress" => queryable.Where(x => x.OfficeAddress.Equals(accessoryParameters.OfficeAddress)),
                    _ => queryable
                };
            }

            return(queryable);
        }