use of com.kloia.sample.model.Stock in project eventapis by kloiasoft.
the class AddStockCommandHandler method execute.
@RequestMapping(value = "/stock/{stockId}/add", method = RequestMethod.POST)
@Command()
public EventKey execute(String stockId, @RequestBody AddStockCommandDto dto) throws Exception {
dto.setStockId(stockId);
Stock stock = stockQuery.queryEntity(dto.getStockId());
if (dto.getStockToAdd() > 1000000)
throw new IllegalArgumentException("Invalid Stock to Add");
EventKey eventKey = eventRepository.recordAndPublish(stock.getEventKey(), new StockAddedEvent(dto.getStockToAdd()));
return eventKey;
}
use of com.kloia.sample.model.Stock 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.model.Stock in project eventapis by kloiasoft.
the class StockRestController method getStock.
@RequestMapping(value = "/{stockId}", method = RequestMethod.GET)
public ResponseEntity<?> getStock(@PathVariable("stockId") String stockId) throws IOException, EventStoreException {
Stock one = stockRepository.findOne(stockId);
Stock responseDto = new Stock();
BeanUtils.copyProperties(one, responseDto);
return new ResponseEntity<Object>(responseDto, HttpStatus.CREATED);
}
use of com.kloia.sample.model.Stock 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