InventoryModels.java
package com.ecommerce.inventory.application.model;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import java.time.Instant;
import java.util.List;
public final class InventoryModels {
private InventoryModels() {
}
public record WarehouseView(
@JsonSerialize(using = ToStringSerializer.class)
Long id,
String code,
String name,
String status,
int version
) {
}
public record StockPosition(
@JsonSerialize(using = ToStringSerializer.class)
Long warehouseId,
@JsonSerialize(using = ToStringSerializer.class)
Long skuId,
long onHand,
long reserved,
long available,
int version
) {
}
public record StockSummary(
@JsonSerialize(using = ToStringSerializer.class)
Long skuId,
long onHand,
long reserved,
long available
) {
}
public record ReservationLineCommand(Long skuId, long quantity) {
}
public record ReserveInventoryCommand(
String reservationNo,
String orderNo,
Long warehouseId,
Instant expiresAt,
List<ReservationLineCommand> items
) {
public ReserveInventoryCommand {
items = List.copyOf(items);
}
}
public record ReservationItemView(
@JsonSerialize(using = ToStringSerializer.class)
Long skuId,
long quantity
) {
}
public record ReservationView(
String reservationNo,
String orderNo,
@JsonSerialize(using = ToStringSerializer.class)
Long warehouseId,
String status,
Instant expiresAt,
int version,
List<ReservationItemView> items
) {
public ReservationView {
items = List.copyOf(items);
}
}
public record ReturnInspectedItem(
int lineNo,
Long skuId,
long quantity
) {
}
public record ReturnInspectedCommand(
String eventId,
String returnReceiptNo,
String afterSaleNo,
String orderNo,
Long userId,
Long warehouseId,
String reservationNo,
List<ReturnInspectedItem> items
) {
public ReturnInspectedCommand {
items = List.copyOf(items);
}
}
public record ReturnStockView(
String afterSaleNo,
String returnReceiptNo,
String orderNo,
@JsonSerialize(using = ToStringSerializer.class)
Long userId,
@JsonSerialize(using = ToStringSerializer.class)
Long warehouseId,
String reservationNo,
String status,
Instant createdAt,
Instant stockedAt
) {
}
public record ReconciliationIssueView(
String domain,
String referenceNo,
String issueType,
String status,
int occurrences,
Instant firstDetectedAt,
Instant lastDetectedAt,
Instant resolvedAt
) {
}
}