Exemplo n.º 1
0
        public async Task <ActionResult <Pagination <ItemToReturnDto> > > GetItems(
            [FromQuery] ItemSpecParams itemParams)
        {
            //Get the category choose
            if (itemParams.CategoryId == null)
            {
                itemParams.CategoryId = 0 /*Root*/;
            }
            if (itemParams.BrandId == null)
            {
                //Initialize the BrandId List
                itemParams.BrandId = new List <int?>();
            }
            itemParams.SubCategory = new List <int?>();
            itemParams.SubCategory.Add(itemParams.CategoryId);
            var cat = await _context.Categorys.Where(x => x.Id == itemParams.CategoryId).FirstOrDefaultAsync();

            SqlHierarchyId catNode = HierarchyExtensions.ToSqlHierarchyId(cat.Node);

            //Get all subCategories
            var allCategories = await _context.Categorys.ToListAsync();

            var subCategorys = new List <Category>();

            // Select all subcategories
            foreach (var cats in allCategories)
            {
                SqlHierarchyId node = HierarchyExtensions.ToSqlHierarchyId(cats.Node);
                if (node.IsDescendantOf(catNode) && node != catNode)
                {
                    subCategorys.Add(cats);
                    itemParams.SubCategory.Add(cats.Id);
                }
            }

            var spec = new ItemsWithTypesAndBrandsSpecification(itemParams);

            var countSpec = new ItemWithFiltersForCountSpecificication(itemParams);

            var totalItems = await _itemsRepo.CountAsync(countSpec);

            var items = await _itemsRepo.ListAsync(spec);

            IList <ItemToReturnDto> itemsToReturns = new List <ItemToReturnDto>();

            foreach (var elts in items)
            {
                int id = elts.Id;

                List <string>           colorName = new List <string>();
                List <string>           sizeName = new List <string>();
                List <ReviewDto>        reviewList = new List <ReviewDto>();
                List <ImageToReturnDto> imageList = new List <ImageToReturnDto>();
                int ratingsCount = 0; int ratingsValue = 0;

                var colors = await _context.Colors.Where(x => x.ItemId == id).ToListAsync();

                if (colors.Count > 0)
                {
                    elts.Color = colors;
                    foreach (var elt in elts.Color)
                    {
                        colorName.Add(elt.Name);
                    }
                }
                var sizes = await _context.Sizes.Where(x => x.ItemId == id).ToListAsync();

                if (sizes.Count > 0)
                {
                    elts.Size = sizes;
                    foreach (var elt in elts.Size)
                    {
                        sizeName.Add(elt.Name);
                    }
                }
                var images = await _context.Images.Where(x => x.ItemId == id).ToListAsync();

                if (images.Count > 0)
                {
                    elts.Images = images;
                    foreach (var elt in elts.Images)
                    {
                        ImageToReturnDto img = new ImageToReturnDto();
                        img.small  = (ApiUrl + elt.UrlSmall);
                        img.medium = (ApiUrl + elt.UrlMedium);
                        img.big    = (ApiUrl + elt.UrlBig);
                        imageList.Add(img);
                    }
                }
                var reviews = await _context.Reviews.Where(x => x.ItemId == id).ToListAsync();

                if (reviews.Count > 0)
                {
                    elts.Review = reviews;
                    foreach (var elt in elts.Review)
                    {
                        ReviewDto rev = new ReviewDto();
                        rev.ReviewerName  = elt.ReviewerName;
                        rev.ReviewerPhoto = (ApiUrl + elt.ReviewerPhoto);
                        rev.ReviewMessage = elt.ReviewMessage;
                        rev.rate          = elt.rate;
                        if (elt.rate == 1)
                        {
                            rev.sentiment = "sentiment_very_dissatisfied";
                        }
                        else if (elt.rate == 2)
                        {
                            rev.sentiment = "sentiment_dissatisfied";
                        }
                        else if (elt.rate == 3 || elt.rate == 4)
                        {
                            rev.sentiment = "sentiment_satisfied";
                        }
                        else if (elt.rate == 5)
                        {
                            rev.sentiment = "sentiment_very_satisfied";
                        }
                        rev.ReviewDate = elt.ReviewDate;
                        reviewList.Add(rev);
                        ratingsCount++;
                        ratingsValue += elt.rate;
                    }
                }

                var itemsToReturn = new ItemToReturnDto
                {
                    Id                    = id,
                    Name                  = elts.Name,
                    Description           = elts.Description,
                    OldPrice              = elts.OldPrice,
                    NewPrice              = elts.NewPrice,
                    Discount              = elts.Discount,
                    RatingsCount          = ratingsCount,
                    RatingsValue          = ratingsValue,
                    availibilityCount     = elts.availibilityCount,
                    cartCount             = elts.cartCount,
                    TechnicalDescription  = elts.TechnicalDescription,
                    AdditionalInformation = elts.AdditionalInformation,
                    Weight                = elts.Weight,
                    Color                 = colorName,
                    Size                  = sizeName,
                    Images                = imageList,
                    Reviews               = reviewList,
                    CategoryId            = elts.Category.Id,
                    BrandName             = elts.ProductBrand.Name,
                    CategoryName          = elts.Category.Name,
                    PictureUrl            = ApiUrl + elts.PictureUrl
                };
                itemsToReturns.Add(itemsToReturn);
            }


            //var data = _mapper
            //    .Map<IReadOnlyList<Item>, IReadOnlyList<ItemToReturnDto>>(items);

            return(Ok(new Pagination1 <ItemToReturnDto>(itemParams.PageIndex, itemParams.PageSize, totalItems, itemsToReturns)));;
        }
Exemplo n.º 2
0
        public async Task <ActionResult <ItemToReturnDto> > GetItem(int id)
        {
            var spec = new ItemsWithTypesAndBrandsSpecification(id);

            // return await _productsRepo.GetByIdAsync(id);

            var item = await _itemsRepo.GetEntityWithSpec(spec);

            if (item == null)
            {
                return(NotFound(new ApiResponse(404)));
            }

            // return _mapper.Map<Item, ItemToReturnDto>(item);

            List <string>           colorName = new List <string>();
            List <string>           sizeName = new List <string>();
            List <ReviewDto>        reviewList = new List <ReviewDto>();
            List <ImageToReturnDto> imageList = new List <ImageToReturnDto>();
            int ratingsCount = 0; int ratingsValue = 0;

            var colors = await _context.Colors.Where(x => x.ItemId == id).ToListAsync();

            if (colors.Count > 0)
            {
                item.Color = colors;
                foreach (var elt in item.Color)
                {
                    colorName.Add(elt.Name);
                }
            }
            var sizes = await _context.Sizes.Where(x => x.ItemId == id).ToListAsync();

            if (sizes.Count > 0)
            {
                item.Size = sizes;
                foreach (var elt in item.Size)
                {
                    sizeName.Add(elt.Name);
                }
            }
            var images = await _context.Images.Where(x => x.ItemId == id).ToListAsync();

            if (images.Count > 0)
            {
                item.Images = images;
                foreach (var elt in item.Images)
                {
                    ImageToReturnDto img = new ImageToReturnDto();
                    img.small  = (ApiUrl + elt.UrlSmall);
                    img.medium = (ApiUrl + elt.UrlMedium);
                    img.big    = (ApiUrl + elt.UrlBig);
                    imageList.Add(img);
                }
            }
            var reviews = await _context.Reviews.Where(x => x.ItemId == id).ToListAsync();

            if (reviews.Count > 0)
            {
                item.Review = reviews;
                foreach (var elt in item.Review)
                {
                    ReviewDto rev = new ReviewDto();
                    rev.ReviewerName  = elt.ReviewerName;
                    rev.ReviewerPhoto = (ApiUrl + elt.ReviewerPhoto);
                    rev.ReviewMessage = elt.ReviewMessage;
                    rev.rate          = elt.rate;
                    if (elt.rate == 1)
                    {
                        rev.sentiment = "sentiment_very_dissatisfied";
                    }
                    else if (elt.rate == 2)
                    {
                        rev.sentiment = "sentiment_dissatisfied";
                    }
                    else if (elt.rate == 3 || elt.rate == 4)
                    {
                        rev.sentiment = "sentiment_satisfied";
                    }
                    else if (elt.rate == 5)
                    {
                        rev.sentiment = "sentiment_very_satisfied";
                    }
                    rev.ReviewDate = elt.ReviewDate;
                    reviewList.Add(rev);
                    ratingsCount++;
                    ratingsValue += elt.rate;
                }
            }

            return(new ItemToReturnDto
            {
                Id = item.Id,
                Name = item.Name,
                Description = item.Description,
                OldPrice = item.OldPrice,
                NewPrice = item.NewPrice,
                Discount = item.Discount,
                RatingsCount = ratingsCount,
                RatingsValue = ratingsValue,
                availibilityCount = item.availibilityCount,
                cartCount = item.cartCount,
                TechnicalDescription = item.TechnicalDescription,
                AdditionalInformation = item.AdditionalInformation,
                Color = colorName,
                Size = sizeName,
                Images = imageList,
                Reviews = reviewList,
                CategoryId = item.Category.Id,
                BrandName = item.ProductBrand.Name,
                CategoryName = item.Category.Name,
                PictureUrl = ApiUrl + item.PictureUrl
            });
        }