public async Task <OfferConfirmed> Handle(ConfirmOfferCommand command) { var(orderId, offer) = CreateDomainModelFrom(command); var order = await _orders.GetBy(orderId); var orderHeader = await _orderHeaders.GetBy(orderId); var currentOffer = await _calculatePrices.For(orderHeader.ClientId, SalesChannel.Wholesales, offer.ProductAmounts, offer.Currency); if (!offer.Equals(currentOffer)) { throw new DomainException(); } var priceChangesPolicy = await _priceChangesPolicies.ChooseFor(orderHeader.ClientId); var now = _clock.Now; order.ConfirmPrices(offer, now + _offerExpirationTime, now, priceChangesPolicy); await _orders.Save(order); return(CreateEventFrom(orderId, offer)); }
private static (OrderId, Offer) CreateDomainModelFrom(ConfirmOfferCommand command) => (