Я новичок в Axon, и, возможно, я что-то пропустил, но мне нужна помощь, чтобы понять.
У меня есть простой агрегат тележки с едой.
Вот пример:
@Aggregate
class FoodCard {
@AggregateIdentifier
private lateinit var foodCardId: UUID
private lateinit var selectedProduct: MutableMap<UUID, Int>
constructor()
@CommandHandler
constructor(command: CreateFoodCartCommand) {
AggregateLifecycle.apply(FoodCartCreateEvent(
UUID.randomUUID()
))
}
@CommandHandler
fun handle(command: SelectProductCommand) {
AggregateLifecycle
.apply(ProductSelectedEvent(foodCardId, command.productId, command.quantity))
}
@CommandHandler
fun handle(command: DeleteFoodCartCommand) {
AggregateLifecycle
.apply(FoodCartDeleteEvent(foodCardId))
}
@CommandHandler
fun handle(command: DeselectProductCommand) {
val productId = command.productId
if (!selectedProduct.containsKey(productId)) {
throw ProductDeselectionException("ProductDeselectionException")
}
AggregateLifecycle
.apply(ProductDeselectEvent(foodCardId, productId, command.quantity))
}
@EventSourcingHandler
fun on(event: FoodCartCreateEvent) {
foodCardId = event.foodCardId
selectedProduct = mutableMapOf()
}
@EventSourcingHandler
fun on(event: ProductSelectedEvent) {
selectedProduct.merge(
event.productId,
event.quantity
) {a, b -> a + b}
}
}
В качестве ES я использую Axon Server. Для проектора FoodCard я использую репозиторий JPA, который подключается к DB.
Я хочу получить все карты foodcards, которые содержат специальный продукт (конкретный UUID), и изменить количество на -1 для всех из них.
Я так понял есть два типа действий -> чтение и запись
Так вот вопрос, как правильно реализовать этот поток с Axon?
Спасибо