cancelOrder method

void cancelOrder(
  1. String orderId
)

Implementation

void cancelOrder(String orderId) {
  final order = orderRepository.findById(orderId);

  // 1️⃣ Validate
  order.canBeCancelled();

  // 2️⃣ Side-effects
  for (final item in order.items) {
    inventoryPort.release(
      productId: item.productId,
      quantity: item.quantity,
      orderId: orderId,
    );
  }

  if (order.loyaltyApplied) {
    loyaltyPort.revertPoints(customerId: order.customerId, orderId: orderId);
  }

  // 3️⃣ Mutate
  order.cancel();

  // 4️⃣ Persist
  orderRepository.update(order);
}