コード例 #1
0
        public async Task <Unit> Handle(ProductEditCommand request, CancellationToken cancellationToken)
        {
            var product = await _repository.GetProductByIdAsync(request.Id);

            if (product == null)
            {
                throw new NotFoundDomainException(string.Format(ErrorMessagesResource.NotFoundError, DisplayNamesResource.Product));
            }

            if (product.Name.Value != request.Name)
            {
                product.UpdateName(request.Name);
            }

            if (product.Price.Amount != request.Price)
            {
                product.UpdatePrice(Money.FromDecimal(request.Price, request.CurrencyCode, _currencyLookup));
            }

            if (product.Code.Value != request.Code)
            {
                if (await _repository.CheckProductExistByCodeAsync(request.Code))
                {
                    throw new DuplicateDomainException(string.Format(ErrorMessagesResource.DuplicateError, DisplayNamesResource.ProductCode));
                }

                product.UpdateCode(request.Code);
            }

            _repository.EditProduct(product);

            return(Unit.Value);
        }
コード例 #2
0
 public Task EditProduct(Guid productId, ProductEditCommand productEditCommand, CancellationToken cancellationToken)
 {
     if (productId != productEditCommand.Id)
     {
         throw new Exception();
     }
     return(mediator.Send(productEditCommand, cancellationToken));
 }
コード例 #3
0
        public async Task <IActionResult> Put(Guid id, ProductEditCommand command)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            command.Id = id;
            await _mediator.Send(command);

            await _unitOfWork.CommitAsync();

            return(Ok());
        }
コード例 #4
0
        public async Task Update_Product_Returns_Ok()
        {
            // Arrange
            var product = InitialProductList.Products.First();
            var command = new ProductEditCommand
            {
                Code         = product.Code.Value,
                Name         = "Some Product",
                Price        = 9.99m,
                CurrencyCode = CurrencyCode.Euro
            };
            var content = new StringContent(JsonSerializer.Serialize(command), Encoding.UTF8, "application/json");

            // Act
            var response = await _client.PutAsync($"{ApiUrl}/{product.Id}", content);

            // Assert
            Assert.Equal(HttpStatusCode.OK, response.StatusCode);
        }
コード例 #5
0
        public async Task Update_Product_With_Duplicate_Code_Returns_Error()
        {
            // Arrange
            var command = new ProductEditCommand
            {
                Code         = InitialProductList.Products.ElementAt(1).Code.Value,
                Name         = "Some Product",
                Price        = 9.99m,
                CurrencyCode = CurrencyCode.Euro
            };
            var content = new StringContent(JsonSerializer.Serialize(command), Encoding.UTF8, "application/json");

            // Act
            var response = await _client.PutAsync($"{ApiUrl}/{InitialProductList.Products.First().Id}", content);

            var body = await response.Content.ReadAsStringAsync();

            // Assert
            Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
        }