/// <summary> /// Builds the property expression. /// </summary> /// <param name="request">The property request.</param> /// <returns>System.Linq.Expressions.Expression<System.Func<RealState.Domain.Entities.Property, System.Boolean>>.</returns> public Expression <Func <Property, bool> > BuildPropertyExpression(PropertyRequestDto request) { if (string.IsNullOrEmpty(request.Name) && string.IsNullOrEmpty(request.CodeInternal) && request.Year == decimal.Zero) { return(PredicateBuilderExtension.True <Property>()); } var predicate = PredicateBuilderExtension.False <Property>(); if (!string.IsNullOrEmpty(request.Name)) { predicate = predicate.Or(p => p.Name.Contains(request.Name)); } if (!string.IsNullOrEmpty(request.CodeInternal)) { predicate = predicate.Or(p => p.CodeInternal.Equals(request.CodeInternal)); } if (request.Year > decimal.Zero) { predicate = predicate.Or(p => p.Year == request.Year); } return(predicate); }
public async Task GetPagedProperties_StateUnderTest_ExpectedBehavior() { var propertyController = CreatePropertyController(); var paginate = new QueryParamDto { PageSize = 1, PageNumber = 3 }; var request = new PropertyRequestDto { Year = 2021 }; var propertyList = new List <PropertyListDto> { new() { Name = "Propertie 1", Year = 2021, CodeInternal = "10212" } }; var pagedList = PagedList <PropertyListDto> .Create(propertyList, propertyList.Count, paginate.PageNumber, paginate.PageNumber); _mockPropertyService.Setup(s => s.GetPagedProperties(paginate, request)).ReturnsAsync(pagedList); var result = await propertyController.GetPagedProperties(paginate, request); var responseOkResult = result as OkObjectResult; Assert.AreEqual(200, responseOkResult?.StatusCode); _mockRepository.VerifyAll(); } }
public async Task <IActionResult> GetPagedProperties([FromQuery] QueryParamDto paginate, [FromQuery] PropertyRequestDto request) { var result = await _propertyService.GetPagedProperties(paginate, request); var response = new ApiResponse <List <PropertyListDto> >(result) { Meta = new Metadata { PageSize = result.PageSize, CurrentPage = result.CurrentPage, HasNextPage = result.HasNextPage, HasPreviousPage = result.HasPreviousPage, TotalCount = result.TotalCount, TotalPages = result.TotalPages } }; return(Ok(response)); }
/// <summary> /// Gets the paged properties. /// </summary> /// <param name="paginate">The paginate.</param> /// <param name="propertyRequest">The property request.</param> /// <returns>Task<PagedList<PropertyListDto>>.</returns> public async Task <PagedList <PropertyListDto> > GetPagedProperties(QueryParamDto paginate, PropertyRequestDto propertyRequest) { paginate.PageNumber = paginate.PageNumber == decimal.Zero ? _paginationOption.DefaultPageNumber : paginate.PageNumber; paginate.PageSize = paginate.PageSize == decimal.Zero ? _paginationOption.DefaultPageSize : paginate.PageSize; var propertyExpression = BuildPropertyExpression(propertyRequest); var propertyList = await _repository.GetAllAsync(propertyExpression, o => o.OrderBy(s => s.Name), include : BuildPropertyIncludes); return(PagedList <PropertyListDto> .Create(propertyList.Select <Property, PropertyListDto>(p => p).ToList(), propertyList.Count(), paginate.PageNumber, paginate.PageSize)); }