InventoryPort.java
package com.ecommerce.trade.application.port;
import java.time.Instant;
import java.util.List;
public interface InventoryPort {
WarehouseSnapshot getWarehouse(String code);
ReservationSnapshot reserve(ReservationCommand command);
ReservationSnapshot getReservation(String reservationNo);
ReservationSnapshot confirm(String reservationNo);
ReservationSnapshot release(String reservationNo);
record WarehouseSnapshot(Long id, String code, String status) {
}
record ReservationLine(Long skuId, long quantity) {
}
record ReservationCommand(
String reservationNo,
String orderNo,
Long warehouseId,
Instant expiresAt,
List<ReservationLine> items
) {
public ReservationCommand {
items = List.copyOf(items);
}
}
record ReservationSnapshot(
String reservationNo,
String orderNo,
String status,
Long warehouseId,
Instant expiresAt,
List<ReservationLine> items
) {
public ReservationSnapshot {
items = List.copyOf(items);
}
}
}