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); }
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))); }
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); }
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); }
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); }
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 }); }
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); }
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); }
public override Task <ProductResponse> DeleteProduct(ProductItemRequest request, ServerCallContext context) { return(base.DeleteProduct(request, context)); }
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); } }