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#ifdef interface
13 #undef interface
14#endif
15#include <evmc/evmc.hpp>
16#ifndef interface
17 #define interface __STRUCT__
18#endif
19
20#include "utils.hpp"
21#include "feature.hpp"
22#include "transformation.hpp"
23#include "condition.hpp"
24#include "file.hpp"
25
26namespace dcn
27{
37 {
38 public:
39 Registry() = delete;
40 Registry(asio::io_context & io_context);
41
42 Registry(const Registry&) = delete;
43 Registry& operator=(const Registry&) = delete;
44
45 ~Registry() = default;
46
57 asio::awaitable<bool> addFeature(evmc::address address, Feature feature, evmc::address owner, std::filesystem::path source);
58
70 asio::awaitable<std::optional<Feature>> getNewestFeature(const std::string& name) const;
71
85 asio::awaitable<std::optional<Feature>> getFeature(const std::string& name, const evmc::address & address) const;
86
99 asio::awaitable<bool> addTransformation(evmc::address address, Transformation transformation, evmc::address owner, std::filesystem::path source);
100
112 asio::awaitable<std::optional<Transformation>> getNewestTransformation(const std::string& name) const;
113
128 asio::awaitable<std::optional<Transformation>> getTransformation(const std::string& name, const evmc::address & address) const;
129
140 asio::awaitable<bool> addCondition(evmc::address address, Condition condition, std::filesystem::path source);
141
153 asio::awaitable<std::optional<Condition>> getNewestCondition(const std::string& name) const;
154
168 asio::awaitable<std::optional<Condition>> getCondition(const std::string& name, const evmc::address & address) const;
169
181 asio::awaitable<bool> checkIfSubFeaturesExist(const Feature & feature) const;
182
183 asio::awaitable<absl::flat_hash_set<std::string>> getOwnedFeatures(const evmc::address & address) const;
184 asio::awaitable<absl::flat_hash_set<std::string>> getOwnedTransformations(const evmc::address & address) const;
185
186 protected:
187
196 asio::awaitable<bool> containsFeatureBucket(const std::string& name) const;
197
206 asio::awaitable<bool> containsTransformationBucket(const std::string& name) const;
207
216 asio::awaitable<bool> containsConditionBucket(const std::string& name) const;
217
230 asio::awaitable<bool> isFeatureBucketEmpty(const std::string& name) const;
231
244 asio::awaitable<bool> isTransformationBucketEmpty(const std::string& name) const;
245
258 asio::awaitable<bool> isConditionBucketEmpty(const std::string& name) const;
259
260 protected:
261 template<class T>
262 struct Node
263 {
265 std::filesystem::path path;
266 };
267
268 private:
269 asio::strand<asio::io_context::executor_type> _strand;
270
271 absl::flat_hash_map<std::string, evmc::address> _newest_feature;
272 absl::flat_hash_map<std::string, evmc::address> _newest_transformation;
273 absl::flat_hash_map<std::string, evmc::address> _newest_condition;
274
275 absl::flat_hash_map<std::string, absl::flat_hash_map<evmc::address, FeatureRecord>> _features;
276 absl::flat_hash_map<std::string, absl::flat_hash_map<evmc::address, TransformationRecord>> _transformations;
277 absl::flat_hash_map<std::string, absl::flat_hash_map<evmc::address, Node<Condition>>> _conditions;
278
279
280 absl::flat_hash_map<evmc::address, absl::flat_hash_set<std::string>> _owned_features;
281 absl::flat_hash_map<evmc::address, absl::flat_hash_set<std::string>> _owned_transformations;
282 absl::flat_hash_map<evmc::address, absl::flat_hash_set<std::string>> _owned_conditions;
283 };
284}
A class that represents a registry of features, transformations, and conditions.
Definition registry.hpp:37
asio::awaitable< std::optional< Condition > > getNewestCondition(const std::string &name) const
Retrieves the newest condition by name.
Definition registry.cpp:274
asio::awaitable< std::optional< Transformation > > getNewestTransformation(const std::string &name) const
Retrieves the newest transformation by name.
Definition registry.cpp:223
~Registry()=default
asio::awaitable< bool > isConditionBucketEmpty(const std::string &name) const
Checks if a condition bucket is empty.
Definition registry.cpp:64
asio::awaitable< std::optional< Feature > > getFeature(const std::string &name, const evmc::address &address) const
Retrieves a specific feature by name and address.
Definition registry.cpp:153
asio::awaitable< absl::flat_hash_set< std::string > > getOwnedFeatures(const evmc::address &address) const
Definition registry.cpp:299
asio::awaitable< bool > containsFeatureBucket(const std::string &name) const
Checks if a feature bucket exists in the registry.
Definition registry.cpp:27
asio::awaitable< bool > addTransformation(evmc::address address, Transformation transformation, evmc::address owner, std::filesystem::path source)
Adds a transformation to the registry.
Definition registry.cpp:171
asio::awaitable< std::optional< Feature > > getNewestFeature(const std::string &name) const
Retrieves the newest feature by name.
Definition registry.cpp:145
asio::awaitable< bool > isFeatureBucketEmpty(const std::string &name) const
Checks if a feature bucket is empty.
Definition registry.cpp:34
asio::awaitable< bool > isTransformationBucketEmpty(const std::string &name) const
Checks if a transformation bucket is empty.
Definition registry.cpp:49
asio::awaitable< bool > containsConditionBucket(const std::string &name) const
Checks if a condition bucket exists in the registry.
Definition registry.cpp:57
Registry()=delete
asio::awaitable< std::optional< Transformation > > getTransformation(const std::string &name, const evmc::address &address) const
Retrieves a specific transformation by name and address.
Definition registry.cpp:231
asio::awaitable< bool > addCondition(evmc::address address, Condition condition, std::filesystem::path source)
Adds a condition to the registry.
Definition registry.cpp:249
Registry & operator=(const Registry &)=delete
asio::awaitable< absl::flat_hash_set< std::string > > getOwnedTransformations(const evmc::address &address) const
Definition registry.cpp:307
asio::awaitable< std::optional< Condition > > getCondition(const std::string &name, const evmc::address &address) const
Retrieves a specific condition by name and address.
Definition registry.cpp:282
Registry(const Registry &)=delete
asio::awaitable< bool > addFeature(evmc::address address, Feature feature, evmc::address owner, std::filesystem::path source)
Adds a feature to the registry.
Definition registry.cpp:73
asio::awaitable< bool > containsTransformationBucket(const std::string &name) const
Checks if a transformation bucket exists in the registry.
Definition registry.cpp:42
asio::awaitable< bool > checkIfSubFeaturesExist(const Feature &feature) const
Recursively checks if all subfeatures exist in the registry.
Definition registry.cpp:11
Definition decentralised_art.hpp:30
Definition registry.hpp:263
std::filesystem::path path
Definition registry.hpp:265
T value
Definition registry.hpp:264