#pragma once #include "domain/entities/Item.h" #include "domain/polices/ItemExpirationPolicy.h" #include #include #include #include #include namespace nxl::autostore::application { class IItemRepository { public: virtual ~IItemRepository() = default; virtual domain::Item::Id_t save(const domain::Item& item) = 0; virtual std::optional findById(domain::Item::Id_t id) = 0; virtual std::vector findByOwner(domain::User::Id_t ownerId) = 0; virtual std::vector findWhere(std::function predicate) = 0; virtual std::vector findWhere(const domain::ItemExpirationSpec& spec) = 0; virtual void remove(domain::Item::Id_t id) = 0; }; } // namespace nxl::autostore::application