コード例 #1
0
        public async Task <OperationResult <ProductItemResponse> > Post([FromBody] ProductItemRequest request)
        {
            var response = new OperationResult <ProductItemResponse>();

            try
            {
                var messages = ValidateRequest(request);
                messages.AddRange(ValidateDuplicate(request));
                if (messages.Count > 0)
                {
                    response.Messages = messages;
                    response.Success  = false;
                    return(response);
                }

                await UpdateShoppingCartId();

                var productItem = await GetProductItem(request);

                var result = await DbContext.ProductItems.AddAsync(productItem);

                await DbContext.SaveChangesAsync();

                response.Success = true;
                response.Content = new ProductItemResponse(result.Entity);
            }
            catch
            {
                response.Messages.Add("InternalError");
            }

            return(response);
        }
コード例 #2
0
ファイル: ProductService.cs プロジェクト: msmansoori/eShop
        public override Task <ProductResponse> GetProductById(ProductItemRequest request, ServerCallContext context)
        {
            var product = _kernel.GetEntity <eShop.ProductEntities.Entities.Product>(externalId: ParseUserID(id: request.Id));

            context.Status = new Status(StatusCode.OK, string.Empty);
            return(Task.FromResult(MapToResponse(product: product)));
        }
コード例 #3
0
        public async Task <OperationResult <ProductItemResponse> > Put(int id, [FromBody] ProductItemRequest request)
        {
            var response = new OperationResult <ProductItemResponse>();

            try
            {
                var messages = ValidateRequest(id);
                messages.AddRange(ValidateQuantity(request));
                if (messages.Count > 0)
                {
                    response.Messages = messages;
                    response.Success  = false;
                    return(response);
                }

                var dbComment = await UpdateProductItem(id, request);

                await DbContext.SaveChangesAsync();

                response.Success = true;
                response.Content = new ProductItemResponse(dbComment);
            }
            catch
            {
                response.Messages.Add("InternalError");
            }

            return(response);
        }
コード例 #4
0
        private async Task <ProductItem> UpdateProductItem(int id, ProductItemRequest request)
        {
            var dbProductItem = await DbContext.ProductItems.FirstOrDefaultAsync(s => s.Id.Equals(id));

            dbProductItem.Quantity = request.Quantity;

            return(dbProductItem);
        }
コード例 #5
0
        private List <string> ValidateQuantity(ProductItemRequest request)
        {
            var messages = new List <string>();

            if (request.Quantity < 1 || request.Quantity > 100)
            {
                messages.Add("Quantity: invalid (must be an integer between 1 and 100)");
            }

            return(messages);
        }
コード例 #6
0
        private async Task <ProductItem> GetProductItem(ProductItemRequest request)
        {
            var product = await DbContext.Products.FirstOrDefaultAsync(p => p.Id == request.ProductId);

            return(new ProductItem
            {
                Price = await GetTotalPriceForItem(product),
                Description = product.Description,
                ProductId = product.Id,
                ShoppingCartId = ShoppingCartId,
                Quantity = request.Quantity
            });
        }
コード例 #7
0
        private List <string> ValidateDuplicate(ProductItemRequest request)
        {
            var messages = new List <string>();

            var isDuplicate = DbContext.ProductItems.Any(
                p => p.ShoppingCartId == ShoppingCartId &&
                p.ProductId == request.ProductId);

            if (isDuplicate)
            {
                messages.Add("ProductId: invalid (product id already exists)");
            }

            return(messages);
        }
コード例 #8
0
        private List <string> ValidateRequest(ProductItemRequest request)
        {
            var messages = new List <string>();

            if (request.ProductId <= 0)
            {
                messages.Add("ProductId: invalid (must be an integer greater than or equals to 0)");
            }
            else if (!DbContext.Products.Any(p => p.Id == request.ProductId))
            {
                messages.Add("ProductId: product id does not exist");
            }

            messages.AddRange(ValidateQuantity(request));

            if (request.Quantity < 1 || request.Quantity > 100)
            {
                messages.Add("Quantity: invalid (must be an integer between 1 and 100)");
            }

            return(messages);
        }
コード例 #9
0
ファイル: ProductService.cs プロジェクト: msmansoori/eShop
 public override Task <ProductResponse> DeleteProduct(ProductItemRequest request, ServerCallContext context)
 {
     return(base.DeleteProduct(request, context));
 }
コード例 #10
0
        public override async Task <ProductItemResponse?> GetProductByDeclinationAndReference(ProductItemRequest request, ServerCallContext context)
        {
            if (string.IsNullOrWhiteSpace(request.Declination) || string.IsNullOrWhiteSpace(request.Reference))
            {
                context.Status = new Status(StatusCode.InvalidArgument, "Arguments are invalid, declination and Reference can't be null or empty");
                return(null);
            }

            try
            {
                Models.Product product = await iProductFetcher.GetProductByDeclinationAndReference(request.Declination, request.Reference);

                return(mapper.Map <ProductItemResponse>(product));
            }
            catch (ProductNotFoundException exception)
            {
                context.Status = new Status(StatusCode.NotFound, exception.Message);
                return(null);
            }
            catch (Exception exception)
            {
                context.Status = new Status(StatusCode.Internal, exception.Message);
                return(null);
            }
        }