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
38 asio::awaitable<bool> addParticle(evm::Address address, ParticleRecord particle);
39 asio::awaitable<std::optional<Particle>> getNewestParticle(const std::string& name) const;
40 asio::awaitable<std::optional<Particle>> getParticle(const std::string& name, const evm::Address & address) const;
41
42
53 asio::awaitable<bool> addFeature(evm::Address address, FeatureRecord feature);
54
66 asio::awaitable<std::optional<Feature>> getNewestFeature(const std::string& name) const;
67
81 asio::awaitable<std::optional<Feature>> getFeature(const std::string& name, const evm::Address & address) const;
82
95 asio::awaitable<bool> addTransformation(evm::Address address, TransformationRecord transformation);
96
108 asio::awaitable<std::optional<Transformation>> getNewestTransformation(const std::string& name) const;
109
124 asio::awaitable<std::optional<Transformation>> getTransformation(const std::string& name, const evm::Address & address) const;
125
136 asio::awaitable<bool> addCondition(evm::Address address, ConditionRecord condition);
137
149 asio::awaitable<std::optional<Condition>> getNewestCondition(const std::string& name) const;
150
164 asio::awaitable<std::optional<Condition>> getCondition(const std::string& name, const evm::Address & address) const;
165
166 asio::awaitable<absl::flat_hash_set<std::string>> getOwnedParticles(const evm::Address & address) const;
167 asio::awaitable<absl::flat_hash_set<std::string>> getOwnedFeatures(const evm::Address & address) const;
168 asio::awaitable<absl::flat_hash_set<std::string>> getOwnedTransformations(const evm::Address & address) const;
169 asio::awaitable<absl::flat_hash_set<std::string>> getOwnedConditions(const evm::Address & address) const;
170
171 protected:
172
173 asio::awaitable<bool> containsParticleBucket(const std::string& name) const;
174
183 asio::awaitable<bool> containsFeatureBucket(const std::string& name) const;
184
193 asio::awaitable<bool> containsTransformationBucket(const std::string& name) const;
194
203 asio::awaitable<bool> containsConditionBucket(const std::string& name) const;
204
205
206 asio::awaitable<bool> isParticleBucketEmpty(const std::string& name) const;
207
220 asio::awaitable<bool> isFeatureBucketEmpty(const std::string& name) const;
221
234 asio::awaitable<bool> isTransformationBucketEmpty(const std::string& name) const;
235
248 asio::awaitable<bool> isConditionBucketEmpty(const std::string& name) const;
249
250 private:
251 asio::strand<asio::io_context::executor_type> _strand;
252
253 absl::flat_hash_map<std::string, evm::Address> _newest_particle;
254 absl::flat_hash_map<std::string, evm::Address> _newest_feature;
255 absl::flat_hash_map<std::string, evm::Address> _newest_transformation;
256 absl::flat_hash_map<std::string, evm::Address> _newest_condition;
257
258 absl::flat_hash_map<std::string, absl::flat_hash_map<evm::Address, ParticleRecord>> _particles;
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_particles;
265 absl::flat_hash_map<evm::Address, absl::flat_hash_set<std::string>> _owned_features;
266 absl::flat_hash_map<evm::Address, absl::flat_hash_set<std::string>> _owned_transformations;
267 absl::flat_hash_map<evm::Address, absl::flat_hash_set<std::string>> _owned_conditions;
268 };
269}
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:385
asio::awaitable< bool > isFeatureBucketEmpty(const std::string &name) const
Checks if a feature bucket is empty.
Definition registry.cpp:33
asio::awaitable< absl::flat_hash_set< std::string > > getOwnedParticles(const evm::Address &address) const
Definition registry.cpp:369
asio::awaitable< bool > containsTransformationBucket(const std::string &name) const
Checks if a transformation bucket exists in the registry.
Definition registry.cpp:41
asio::awaitable< std::optional< Condition > > getNewestCondition(const std::string &name) const
Retrieves the newest condition by name.
Definition registry.cpp:344
asio::awaitable< std::optional< Transformation > > getNewestTransformation(const std::string &name) const
Retrieves the newest transformation by name.
Definition registry.cpp:281
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:289
asio::awaitable< absl::flat_hash_set< std::string > > getOwnedConditions(const evm::Address &address) const
Definition registry.cpp:393
asio::awaitable< bool > containsFeatureBucket(const std::string &name) const
Checks if a feature bucket exists in the registry.
Definition registry.cpp:26
asio::awaitable< std::optional< Particle > > getNewestParticle(const std::string &name) const
Definition registry.cpp:138
asio::awaitable< absl::flat_hash_set< std::string > > getOwnedFeatures(const evm::Address &address) const
Definition registry.cpp:377
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:226
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:352
asio::awaitable< bool > isTransformationBucketEmpty(const std::string &name) const
Checks if a transformation bucket is empty.
Definition registry.cpp:48
asio::awaitable< std::optional< Particle > > getParticle(const std::string &name, const evm::Address &address) const
Definition registry.cpp:146
asio::awaitable< bool > addParticle(evm::Address address, ParticleRecord particle)
Definition registry.cpp:71
asio::awaitable< bool > containsParticleBucket(const std::string &name) const
Definition registry.cpp:11
Registry(const Registry &)=delete
asio::awaitable< bool > addTransformation(evm::Address address, TransformationRecord transformation)
Adds a transformation to the registry.
Definition registry.cpp:244
asio::awaitable< bool > isParticleBucketEmpty(const std::string &name) const
Definition registry.cpp:18
asio::awaitable< bool > addCondition(evm::Address address, ConditionRecord condition)
Adds a condition to the registry.
Definition registry.cpp:307
asio::awaitable< std::optional< Feature > > getNewestFeature(const std::string &name) const
Retrieves the newest feature by name.
Definition registry.cpp:218
asio::awaitable< bool > addFeature(evm::Address address, FeatureRecord feature)
Adds a feature to the registry.
Definition registry.cpp:163
asio::awaitable< bool > containsConditionBucket(const std::string &name) const
Checks if a condition bucket exists in the registry.
Definition registry.cpp:56
asio::awaitable< bool > isConditionBucketEmpty(const std::string &name) const
Checks if a condition bucket is empty.
Definition registry.cpp:63
Registry & operator=(const Registry &)=delete
evmc::address Address
Definition evm.hpp:44
Definition registry.hpp:18