use of com.kloia.sample.dto.event.StockReservedEvent in project eventapis by kloiasoft.
the class ReserveStockEventHandler method execute.
@Override
@KafkaListener(topics = "ReserveStockEvent", containerFactory = "eventsKafkaListenerContainerFactory")
public EventKey execute(ReserveStockEvent dto) throws Exception {
Stock stock = stockQuery.queryEntity(dto.getStockId());
if (stock.getRemainingStock() >= dto.getNumberOfItemsSold()) {
StockReservedEvent stockReservedEvent = new StockReservedEvent();
BeanUtils.copyProperties(dto, stockReservedEvent);
stockReservedEvent.setOrderId(dto.getSender().getEntityId());
try {
return eventRepository.recordAndPublish(stock, stockReservedEvent, entityEvent -> new StockConcurrencyResolver(stockQuery, dto));
} catch (StockNotEnoughException e) {
return recordStockNotEnough(dto, stock);
} catch (Exception e) {
log.error(e.getMessage(), e);
return stock.getEventKey();
}
} else
return recordStockNotEnough(dto, stock);
}
use of com.kloia.sample.dto.event.StockReservedEvent in project eventapis by kloiasoft.
the class WaitingStockReleaseEventHandler method execute.
@Override
@KafkaListener(topics = "WaitingStockReleaseEvent", containerFactory = "eventsKafkaListenerContainerFactory")
public EventKey execute(WaitingStockReleaseEvent dto) throws Exception {
Stock stock = stockQuery.queryEntity(dto.getStockId());
StockReservedEvent stockReservedEvent = stockQuery.queryEventData(dto.getStockId(), dto.getReservedStockVersion());
return eventRepository.recordAndPublish(stock, new StockReleasedEvent(dto.getSender().getEntityId(), stockReservedEvent.getNumberOfItemsSold()), entityEvent -> new StockConcurrencyResolver());
}
Aggregations