Search in sources :

Example 1 with StockReservedEvent

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);
}
Also used : StockNotEnoughException(com.kloia.sample.dto.StockNotEnoughException) StockReservedEvent(com.kloia.sample.dto.event.StockReservedEvent) Stock(com.kloia.sample.model.Stock) StockNotEnoughException(com.kloia.sample.dto.StockNotEnoughException) EventStoreException(com.kloia.eventapis.exception.EventStoreException) KafkaListener(org.springframework.kafka.annotation.KafkaListener)

Example 2 with StockReservedEvent

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());
}
Also used : StockReleasedEvent(com.kloia.sample.dto.event.StockReleasedEvent) StockReservedEvent(com.kloia.sample.dto.event.StockReservedEvent) Stock(com.kloia.sample.model.Stock) KafkaListener(org.springframework.kafka.annotation.KafkaListener)

Aggregations

StockReservedEvent (com.kloia.sample.dto.event.StockReservedEvent)2 Stock (com.kloia.sample.model.Stock)2 KafkaListener (org.springframework.kafka.annotation.KafkaListener)2 EventStoreException (com.kloia.eventapis.exception.EventStoreException)1 StockNotEnoughException (com.kloia.sample.dto.StockNotEnoughException)1 StockReleasedEvent (com.kloia.sample.dto.event.StockReleasedEvent)1