Decentralised Art Server
High-performance C++ backend that exposes HTML interface and a secure REST API for managing Performative Transactions entities
 
Loading...
Searching...
No Matches
registry.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <optional>
4#include <string>
5#include <filesystem>
6
7#include "native.h"
8#include <asio.hpp>
9#include <absl/container/flat_hash_map.h>
10#include <spdlog/spdlog.h>
11
12#include "utils.hpp"
13#include "file.hpp"
14#include "pt.hpp"
15#include "evm.hpp"
16
18{
28 {
29 public:
30 Registry() = delete;
31 Registry(asio::io_context & io_context);
32
33 Registry(const Registry&) = delete;
34 Registry& operator=(const Registry&) = delete;
35
36 ~Registry() = default;
37
48 asio::awaitable<bool> addFeature(evm::Address address, FeatureRecord feature);
49
61 asio::awaitable<std::optional<Feature>> getNewestFeature(const std::string& name) const;
62
76 asio::awaitable<std::optional<Feature>> getFeature(const std::string& name, const evm::Address & address) const;
77
90 asio::awaitable<bool> addTransformation(evm::Address address, TransformationRecord transformation);
91
103 asio::awaitable<std::optional<Transformation>> getNewestTransformation(const std::string& name) const;
104
119 asio::awaitable<std::optional<Transformation>> getTransformation(const std::string& name, const evm::Address & address) const;
120
131 asio::awaitable<bool> addCondition(evm::Address address, ConditionRecord condition);
132
144 asio::awaitable<std::optional<Condition>> getNewestCondition(const std::string& name) const;
145
159 asio::awaitable<std::optional<Condition>> getCondition(const std::string& name, const evm::Address & address) const;
160
172 asio::awaitable<bool> checkIfSubFeaturesExist(const Feature & feature) const;
173
174 asio::awaitable<absl::flat_hash_set<std::string>> getOwnedFeatures(const evm::Address & address) const;
175 asio::awaitable<absl::flat_hash_set<std::string>> getOwnedTransformations(const evm::Address & address) const;
176 asio::awaitable<absl::flat_hash_set<std::string>> getOwnedConditions(const evm::Address & address) const;
177
178 protected:
179
188 asio::awaitable<bool> containsFeatureBucket(const std::string& name) const;
189
198 asio::awaitable<bool> containsTransformationBucket(const std::string& name) const;
199
208 asio::awaitable<bool> containsConditionBucket(const std::string& name) const;
209
222 asio::awaitable<bool> isFeatureBucketEmpty(const std::string& name) const;
223
236 asio::awaitable<bool> isTransformationBucketEmpty(const std::string& name) const;
237
250 asio::awaitable<bool> isConditionBucketEmpty(const std::string& name) const;
251
252 private:
253 asio::strand<asio::io_context::executor_type> _strand;
254
255 absl::flat_hash_map<std::string, evm::Address> _newest_feature;
256 absl::flat_hash_map<std::string, evm::Address> _newest_transformation;
257 absl::flat_hash_map<std::string, evm::Address> _newest_condition;
258
259 absl::flat_hash_map<std::string, absl::flat_hash_map<evm::Address, FeatureRecord>> _features;
260 absl::flat_hash_map<std::string, absl::flat_hash_map<evm::Address, TransformationRecord>> _transformations;
261 absl::flat_hash_map<std::string, absl::flat_hash_map<evm::Address, ConditionRecord>> _conditions;
262
263
264 absl::flat_hash_map<evm::Address, absl::flat_hash_set<std::string>> _owned_features;
265 absl::flat_hash_map<evm::Address, absl::flat_hash_set<std::string>> _owned_transformations;
266 absl::flat_hash_map<evm::Address, absl::flat_hash_set<std::string>> _owned_conditions;
267 };
268}
A class that represents a registry of features, transformations, and conditions.
Definition registry.hpp:28
asio::awaitable< absl::flat_hash_set< std::string > > getOwnedTransformations(const evm::Address &address) const
Definition registry.cpp:350
asio::awaitable< bool > checkIfSubFeaturesExist(const Feature &feature) const
Recursively checks if all subfeatures exist in the registry.
Definition registry.cpp:11
asio::awaitable< bool > isFeatureBucketEmpty(const std::string &name) const
Checks if a feature bucket is empty.
Definition registry.cpp:34
asio::awaitable< bool > containsTransformationBucket(const std::string &name) const
Checks if a transformation bucket exists in the registry.
Definition registry.cpp:42
asio::awaitable< std::optional< Condition > > getNewestCondition(const std::string &name) const
Retrieves the newest condition by name.
Definition registry.cpp:317
asio::awaitable< std::optional< Transformation > > getNewestTransformation(const std::string &name) const
Retrieves the newest transformation by name.
Definition registry.cpp:235
asio::awaitable< std::optional< Transformation > > getTransformation(const std::string &name, const evm::Address &address) const
Retrieves a specific transformation by name and address.
Definition registry.cpp:243
asio::awaitable< absl::flat_hash_set< std::string > > getOwnedConditions(const evm::Address &address) const
Definition registry.cpp:358
asio::awaitable< bool > containsFeatureBucket(const std::string &name) const
Checks if a feature bucket exists in the registry.
Definition registry.cpp:27
asio::awaitable< absl::flat_hash_set< std::string > > getOwnedFeatures(const evm::Address &address) const
Definition registry.cpp:342
asio::awaitable< std::optional< Feature > > getFeature(const std::string &name, const evm::Address &address) const
Retrieves a specific feature by name and address.
Definition registry.cpp:161
asio::awaitable< std::optional< Condition > > getCondition(const std::string &name, const evm::Address &address) const
Retrieves a specific condition by name and address.
Definition registry.cpp:325
asio::awaitable< bool > isTransformationBucketEmpty(const std::string &name) const
Checks if a transformation bucket is empty.
Definition registry.cpp:49
Registry(const Registry &)=delete
asio::awaitable< bool > addTransformation(evm::Address address, TransformationRecord transformation)
Adds a transformation to the registry.
Definition registry.cpp:179
asio::awaitable< bool > addCondition(evm::Address address, ConditionRecord condition)
Adds a condition to the registry.
Definition registry.cpp:261
asio::awaitable< std::optional< Feature > > getNewestFeature(const std::string &name) const
Retrieves the newest feature by name.
Definition registry.cpp:153
asio::awaitable< bool > addFeature(evm::Address address, FeatureRecord feature)
Adds a feature to the registry.
Definition registry.cpp:73
asio::awaitable< bool > containsConditionBucket(const std::string &name) const
Checks if a condition bucket exists in the registry.
Definition registry.cpp:57
asio::awaitable< bool > isConditionBucketEmpty(const std::string &name) const
Checks if a condition bucket is empty.
Definition registry.cpp:64
Registry & operator=(const Registry &)=delete
evmc::address Address
Definition evm.hpp:44
Definition registry.hpp:18