#include "AddItem.h" #include namespace nxl::autostore::application { AddItem::AddItem(IItemRepository& itemRepository, IClock& clock, IOrderService& orderService) : itemRepository(itemRepository), clock(clock), orderService(orderService) {} void AddItem::execute(domain::Item&& item, const ItemPresenter& presenter) { try { const auto currentTime = clock.getCurrentTime(); if (expirationPolicy.isExpired(item, currentTime)) { orderService.orderItem(item); } item.id = itemRepository.save(item); presenter(item); // Success } catch (const std::exception& e) { presenter(item); // Failure } } } // namespace nxl::autostore::application