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); }
public Task EditProduct(Guid productId, ProductEditCommand productEditCommand, CancellationToken cancellationToken) { if (productId != productEditCommand.Id) { throw new Exception(); } return(mediator.Send(productEditCommand, cancellationToken)); }
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()); }
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); }
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); }