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()); } } }
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()); }
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)); }
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)); }
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 }); }