// [ProducesResponseType(StatusCodes.Status200OK)] // [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status404NotFound)] public async Task <ActionResult <ProductDto> > GetProductByIdWithSpec(int productId) { var spec = new ProductsWithDeptCatProdTypeSpec(productId); var product = await _productService.GetProductByIdWithSpec(spec); if (product == null) { return(NotFound(new ApiResponse(AppConstants.NotFound404))); } _logger.LogInformation("Retrieved { Product } successfully", product.Name); return(_mapper.Map <Product, ProductDto>(product)); }
public async Task <PagedList <ProductDto> > GetProductsWithSpec( [FromQuery] ProductSpecParams productSpecParams) { //specifation for product(s) with department, category, and product type var spec = new ProductsWithDeptCatProdTypeSpec(productSpecParams); //specification for total count of filtered products var countSpec = new ProductWithFiltersCountSpec(productSpecParams); var totalItems = await _productService.Count(countSpec); var products = await _productService.GetProductsWithSpec(spec); var data = _mapper.Map <IReadOnlyList <Product>, IReadOnlyList <ProductDto> >(products); _logger.LogInformation("Products retreived: {{{ string.Join(", ", data.Name)}}}"); return(new PagedList <ProductDto>(productSpecParams.PageIndex, productSpecParams.PageSize, totalItems, data)); }