public PurchaseProductResponse PurchaseProduct(PurchaseProductRequest productPurchaseRequest) { PurchaseProductResponse purchaseProductResponse = new PurchaseProductResponse(); try { if (_messageRepository.IsUniqueRequest(productPurchaseRequest.CorrelationId)) { Product product = _productRepository.FindBy(Guid.Parse(productPurchaseRequest.ProductId)); if (product != null) { ProductPurchase productPurchase = null; if (product.ReservationIdValid(Guid.Parse(productPurchaseRequest.ReservationId))) { productPurchase = product.ConfirmPurchaseWith(Guid.Parse(productPurchaseRequest.ReservationId)); _productRepository.Save(product); purchaseProductResponse.ProductId = productPurchase.Product.ID.ToString(); purchaseProductResponse.PurchaseId = productPurchase.Id.ToString(); purchaseProductResponse.ProductQuantity = productPurchase.ProductQuantity; purchaseProductResponse.ProductName = productPurchase.Product.Name; } else { throw new ResourceNotFoundException(string.Concat("Invalid or expired reservation id: ", productPurchaseRequest.ReservationId)); } _messageRepository.SaveResponse<PurchaseProductResponse>(productPurchaseRequest.CorrelationId, purchaseProductResponse); } else { throw new ResourceNotFoundException(string.Concat("No product with id ", productPurchaseRequest.ProductId, ", was found.")); } } else { purchaseProductResponse = _messageRepository.RetrieveResponseFor<PurchaseProductResponse>(productPurchaseRequest.CorrelationId); } } catch (Exception ex) { purchaseProductResponse.Exception = ex; } return purchaseProductResponse; }
public HttpResponseMessage Post(PurchaseProductRequest purchaseProductRequest) { purchaseProductRequest.CorrelationId = purchaseProductRequest.ReservationId; ServiceResponseBase response = _productService.PurchaseProduct(purchaseProductRequest); return Request.BuildResponse(response); }