предположим, у нас есть запас.этот запас должен сохранять идентификатор продукта и доступное количество.пользователь этого запаса может часто обновлять (InitAvailableQuantityCommand) доступное количество.если какой-либо продукт был продан, наша система получит soldEvent (DecreaseAvailableQuantityCommand), и доступное количество для проданного продукта должно быть уменьшено.
это работает хорошо с совокупным показателем ниже, до одной вещи, если я попытаюсь снова повторитьинициализировать запас с помощью InitAvailableQuantityCommand, событие будет проигнорировано, и будет выдано сообщение об ошибке
Событие для агрегата [3333] в последовательности [0] уже вставлено "
Чтоя пытаюсь добиться следующего:
- InitAvailableQuantityCommand (productId = 1, количество = 10)
- DecreaseAvailableQuantityCommand (productId = 1, количество = 1)
- DecreaseAvailableQuantComantproductId = 1, количество = 1)
- теперь у нас есть еще 8 доступных продуктов.
- , и в этот момент пользователь повторно инициализирует запас с 20 доступными продуктами для productId 1. пользователь будетотправьте новый InitAvailableQuantityCommand (productId = 1, количество = 20), и в этот момент он не работает и не работает.
Что я не так делаю?
thx.
@NoArgsConstructor
@Aggregate
@Data
public class AvailableQuantityAggregate {
private String partnerId;
private String productId;
@AggregateIdentifier
private String productVariationId;
private int quantity;
@CommandHandler
public AvailableQuantityAggregate(InitAvailableQuantityCommand cmd) {
final ApplyMore apply = AggregateLifecycle.apply(AvailableQuantityInitializedEvent.builder()
.partnerId(cmd.getPartnerId())
.productId(cmd.getProductId())
.productVariationId(cmd.getProductVariationId())
.quantity(cmd.getQuantity())
.build());
}
@CommandHandler
public void handle(DecreaseAvailableQuantityCommand cmd) {
AggregateLifecycle.apply(AvailableQuantityDecreasedEvent.builder()
.productVariationId(cmd.getProductVariationId())
.quantity(cmd.getQuantity())
.build());
}
@EventSourcingHandler
protected void on(AvailableQuantityInitializedEvent event) {
this.productVariationId = event.getProductVariationId();
this.partnerId = event.getPartnerId();
this.productId = event.getProductId();
this.quantity = event.getQuantity();
}
@EventSourcingHandler
protected void on(AvailableQuantityDecreasedEvent event) {
this.quantity = this.quantity-event.getQuantity();
}
}