Beispiel #1
0
 private static void AddFilterParameters(GetAllAnnouncesFilter announcesFilter, ref string modifiedUri)
 {
     PropertyInfo[] properties = typeof(GetAllAnnouncesFilter).GetProperties();
     foreach (PropertyInfo property in properties)
     {
         var propValue = property.GetValue(announcesFilter);
         if (propValue != null)
         {
             modifiedUri = QueryHelpers.AddQueryString(modifiedUri, property.Name, propValue.ToString());
         }
     }
 }
Beispiel #2
0
        public List <Announce> Get(GetAllAnnouncesFilter filter, PaginationFilter paginationFilter)
        {
            if (paginationFilter is null)
            {
                return(_cleanedAnnounces
                       .AddFiltersOnQuery(filter)
                       .ToList());
            }

            var skip = (paginationFilter.PageNumber - 1) * paginationFilter.PageSize;

            return(_cleanedAnnounces
                   .AddFiltersOnQuery(filter)
                   .Skip(skip)
                   .Limit(paginationFilter.PageSize)
                   .ToList());
        }
Beispiel #3
0
        public Uri GetAllAnnouncesUri(string path = "", PaginationQuery pagination = null, GetAllAnnouncesFilter announcesFilter = null)
        {
            var uriWithPath = $"{_baseUri}{path}/";

            var uri = new Uri(uriWithPath);

            if (pagination == null)
            {
                return(uri);
            }


            var modifiedUri = QueryHelpers.AddQueryString(uriWithPath, "pageNumber", pagination.PageNumber.ToString());

            modifiedUri = QueryHelpers.AddQueryString(modifiedUri, "pageSize", pagination.PageSize.ToString());
            AddFilterParameters(announcesFilter, ref modifiedUri);
            return(new Uri(modifiedUri));
        }
Beispiel #4
0
        public static IFindFluent <Announce, Announce> AddFiltersOnQuery(this IMongoCollection <Announce> queryable, GetAllAnnouncesFilter announceFilter)
        {
            var filterBuilder = Builders <Announce> .Filter;
            var filter        = filterBuilder.Empty;

            if (!string.IsNullOrEmpty(announceFilter?.City))
            {
                filter &= filterBuilder.Eq(x => x.City, announceFilter.City);
            }

            if (!string.IsNullOrEmpty(announceFilter?.District))
            {
                filter &= filterBuilder.Eq(x => x.District, announceFilter.District);
            }

            if (!string.IsNullOrEmpty(announceFilter?.Floor))
            {
                filter &= filterBuilder.Eq(x => x.Floor, announceFilter.Floor);
            }

            if (announceFilter?.BuildingType != null)
            {
                filter &= filterBuilder.Eq(x => x.BuildingType, announceFilter.BuildingType);
            }

            if (announceFilter?.IncludesFurniture != null)
            {
                filter &= filterBuilder.Eq(x => x.IncludesFurniture, (bool)announceFilter.IncludesFurniture);
            }

            if (announceFilter?.OfferedBy != null)
            {
                filter &= filterBuilder.Eq(x => x.OfferedBy, announceFilter.OfferedBy);
            }

            if (!string.IsNullOrEmpty(announceFilter?.Rooms))
            {
                filter &= filterBuilder.Eq(x => x.Rooms, announceFilter.Rooms);
            }
            if (announceFilter?.PriceMax != null)
            {
                filter &= filterBuilder.Lte(x => x.Price, announceFilter.PriceMax);
            }

            if (announceFilter?.PriceMin != null)
            {
                filter &= filterBuilder.Gte(x => x.Price, announceFilter.PriceMin);
            }

            if (announceFilter?.PricePerSquareMeterMax != null)
            {
                filter &= filterBuilder.Lte(x => x.PricePerSquareMeter, announceFilter.PricePerSquareMeterMax);
            }

            if (announceFilter?.PricePerSquareMeterMin != null)
            {
                filter &= filterBuilder.Gte(x => x.PricePerSquareMeter, announceFilter.PricePerSquareMeterMin);
            }

            if (announceFilter?.LivingSpaceMax != null)
            {
                filter &= filterBuilder.Lte(x => x.LivingSpace, announceFilter.LivingSpaceMax);
            }

            if (announceFilter?.LivingSpaceMin != null)
            {
                filter &= filterBuilder.Gte(x => x.LivingSpace, announceFilter.LivingSpaceMin);
            }

            if (announceFilter?.CreatedAtMax != null)
            {
                filter &= filterBuilder.Lte(x => x.CreatedAt, announceFilter.CreatedAtMax);
            }

            if (announceFilter?.CreatedAtMin != null)
            {
                filter &= filterBuilder.Gte(x => x.CreatedAt, announceFilter.CreatedAtMin);
            }

            if (announceFilter?.WithImages != null)
            {
                if ((bool)announceFilter.WithImages)
                {
                    filter &= filterBuilder.Exists(x => x.Images);
                }
                else
                {
                    filter &= filterBuilder.Eq(x => x.Images, null);
                }
            }

            if (announceFilter?.HasCoordinates != null)
            {
                if ((bool)announceFilter?.HasCoordinates)
                {
                    filter &= filterBuilder.Exists(x => x.Latitude);
                    filter &= filterBuilder.Exists(x => x.Longitude);
                }
                else
                {
                    filter &= filterBuilder.Eq(x => x.Latitude, null);
                    filter &= filterBuilder.Eq(x => x.Longitude, null);
                }
            }

            return(queryable.Find(filter));
        }
Beispiel #5
0
        public static PagedResponse <T> CreatePaginatedResponse <T>(IUriService uriService, PaginationFilter pagination, List <T> response, string path, GetAllAnnouncesFilter filter)
        {
            var nextPage = pagination.PageNumber >= 1
                ? uriService.GetAllAnnouncesUri(path, new PaginationQuery(pagination.PageNumber + 1, pagination.PageSize), filter).ToString()
                : null;

            var previousPage = pagination.PageNumber - 1 >= 1
                ? uriService.GetAllAnnouncesUri(path, new PaginationQuery(pagination.PageNumber - 1, pagination.PageSize), filter).ToString()
                : null;

            return(new PagedResponse <T>
            {
                Data = response,
                PageNumber = pagination.PageNumber >= 1 ? pagination.PageNumber : (int?)null,
                PageSize = pagination.PageSize >= 1 ? pagination.PageSize : (int?)null,
                NextPage = response.Any() ? nextPage : null,
                PreviousPage = previousPage
            });
        }