public void WhenSupplierRequestsDifferentQuantity_ShouldCreateBookOrderLineConflict() { var sut = CreateSut(); BookOrder bookOrder = BookOrder.CreateNew( "SupplierBar", Guid.NewGuid()); bookOrder.AddBookRequest( a.BookTitleOrder .ForSupplier("SupplierBar") .ForTitle("The Hobbit") .WithPrice(20) .WithQuantity(10) ); _bookOrderRepository.Store(bookOrder); var supplierBookOrderUpdateRequest = new SupplierBookOrderUpdateRequest( bookOrder.Id, new List <SupplierBookOrderLineUpdateRequest>() { new SupplierBookOrderLineUpdateRequest( bookOrder.OrderLines[0].Id, price: 20, quantity: 9) }); sut.Execute(supplierBookOrderUpdateRequest); List <BookOrderLineConflict> conflicts = _bookOrderLineConflictRepository.GetForBookOrder(bookOrder.Id).ToList(); conflicts.Count().Should().Be(1); conflicts[0].ConflictType.Should().Be(ConflictType.Quantity); }
public void Execute(SupplierBookOrderUpdateRequest supplierBookOrderUpdateRequest) { Logger.Information($"Execute {nameof(GetType)} for Id: {{BookOrderId}}", supplierBookOrderUpdateRequest.BookOrderId); var bookOrder = _bookOrderRepository.Get(supplierBookOrderUpdateRequest.BookOrderId); List <BookOrderLineConflict> conflicts = CalculateOrderLineConflicts(bookOrder, supplierBookOrderUpdateRequest); if (conflicts.Any()) { _bookOrderLineConflictRepository.Store(conflicts); } }
public IHttpActionResult ReceiveSupplierUpdate([FromUri] Guid bookOrderId, [FromBody] SupplierBookOrderUpdateDto dto) { List <SupplierBookOrderLineUpdateRequest> orderlineUpdates = new List <SupplierBookOrderLineUpdateRequest>(); foreach (var supplierBookOrderLineUpdateDto in dto.OrderLineUpdates) { orderlineUpdates.Add(new SupplierBookOrderLineUpdateRequest( supplierBookOrderLineUpdateDto.BookOrderLineId, supplierBookOrderLineUpdateDto.Price, supplierBookOrderLineUpdateDto.Quantity)); } SupplierBookOrderUpdateRequest supplierBookOrderUpdateRequest = new SupplierBookOrderUpdateRequest(bookOrderId, orderlineUpdates); _supplierBookOrderUpdateUseCase.Execute(supplierBookOrderUpdateRequest); return(Ok()); }
private List <BookOrderLineConflict> CalculateOrderLineConflicts(BookOrder bookOrder, SupplierBookOrderUpdateRequest supplierBookOrderUpdateRequest) { List <BookOrderLineConflict> conflicts = new List <BookOrderLineConflict>(); var lineUpdates = supplierBookOrderUpdateRequest.OrderLineUpdates; foreach (var lineUpdate in lineUpdates) { var bookOrderLine = bookOrder.OrderLines.First(x => x.Id == lineUpdate.BookOrderLineId); if (bookOrderLine.Price != lineUpdate.Price) { conflicts.Add(BookOrderLinePriceConflict.CreateNew(bookOrder.Id, bookOrderLine.Id, lineUpdate.Price)); } if (bookOrderLine.Quantity != lineUpdate.Quantity) { conflicts.Add(BookOrderLineQuantityConflict.CreateNew(bookOrder.Id, bookOrderLine.Id, lineUpdate.Quantity)); } } return(conflicts); }