コード例 #1
0
        public IPurchaseProductResponse PurchaseProduct(IPurchaseProductRequest productPurchaseRequest)
        {
            PurchaseProductResponse purchaseProductResponse = new PurchaseProductResponse();

            try
            {
                if (_messageRepository.IsUniqueRequest(productPurchaseRequest.CorrelationId))
                {
                    Product product = (Product)_productRepository.FindBy(productPurchaseRequest.ProductId);
                    if (product != null)
                    {
                        IProductPurchase productPurchase = null;
                        if (product.ReservationIsValid(productPurchaseRequest.ReservationId))
                        {
                            productPurchase = product.ConfirmPurchaseWith(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($"invalid or expired reservation id: {productPurchaseRequest.ReservationId}");
                        }

                        _messageRepository.SaveResponse(productPurchaseRequest.CorrelationId, purchaseProductResponse);
                    }
                    else
                    {
                        throw new ResourceNotFoundException($"no product with id {productPurchaseRequest.ProductId} was found");
                    }
                }
                else
                {
                    purchaseProductResponse = _messageRepository.RetrieveResponseFor <PurchaseProductResponse>(productPurchaseRequest.CorrelationId);
                }
            }
            catch (Exception ex)
            {
                purchaseProductResponse.Exception = ex;
            }
            return(purchaseProductResponse);
        }
コード例 #2
0
 /// <summary>
 /// コンストラクタ
 /// </summary>
 /// <param name="ProductPurchase">商品購入インタフェース</param>
 public StoreListener(IProductPurchase ProductPurchase)
 {
     this.ProductPurchase = ProductPurchase;
 }