Multiple implementations of the same back-end application. The aim is to provide quick, side-by-side comparisons of different technologies (languages, frameworks, libraries) while preserving consistent business logic across all implementations.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

27 lines
827 B

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