aboutsummaryrefslogtreecommitdiff
path: root/include/DatabaseStorage.hpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2018-03-09 10:26:55 +0100
committerdec05eba <dec05eba@protonmail.com>2020-08-18 23:25:46 +0200
commit0e62cb8e5ed06d906ad84321cdda22acfcc952c9 (patch)
tree9ba0cc8e20febb4bf07d4d065e3d653ed651bdda /include/DatabaseStorage.hpp
parenteda9a7bbefc5587bf1ff895a9214f450e64575fa (diff)
Partially implement 'add' operation
Diffstat (limited to 'include/DatabaseStorage.hpp')
-rw-r--r--include/DatabaseStorage.hpp42
1 files changed, 30 insertions, 12 deletions
diff --git a/include/DatabaseStorage.hpp b/include/DatabaseStorage.hpp
index 6f251d1..fd29050 100644
--- a/include/DatabaseStorage.hpp
+++ b/include/DatabaseStorage.hpp
@@ -10,27 +10,33 @@
namespace odhtdb
{
class Group;
+ class User;
struct DatabaseStorageObject
{
DataView data;
- u64 timestamp; // In microseconds
+ u64 createdTimestamp; // In microseconds
Signature::PublicKey creatorPublicKey;
- DatabaseStorageObject(DataView &_data, u64 _timestamp, const Signature::PublicKey &_creatorPublicKey) :
- data(_data), timestamp(_timestamp), creatorPublicKey(_creatorPublicKey)
- {
-
- }
+ DatabaseStorageObject(DataView &_data, u64 _timestamp, const Signature::PublicKey &_creatorPublicKey);
};
struct DatabaseStorageObjectList
{
- u64 timestamp; // In microseconds
+ DataView data;
+ u64 createdTimestamp; // In microseconds
std::vector<Group*> groups;
- std::vector<DatabaseStorageObject> objects;
- u8 *createData;
- usize createDataSize;
+ std::vector<DatabaseStorageObject*> objects;
+ };
+
+ struct DatabaseStorageQuarantineObject
+ {
+ DataView data;
+ u64 createdTimestamp; // In microseconds
+ u64 storedTimestamp; // In microseconds
+ Signature::PublicKey creatorPublicKey;
+
+ DatabaseStorageQuarantineObject(DataView &_data, u64 _timestamp, const Signature::PublicKey &_creatorPublicKey);
};
class DatabaseStorageAlreadyExists : public std::runtime_error
@@ -46,6 +52,7 @@ namespace odhtdb
};
using DatabaseStorageMap = MapHashKey<DatabaseStorageObjectList*>;
+ using DatabaseStorageQuarantineMap = Signature::MapPublicKey<std::vector<DatabaseStorageQuarantineObject*>>;
class DatabaseStorage
{
@@ -54,11 +61,22 @@ namespace odhtdb
void createStorage(const Hash &hash, Group *creatorGroup, u64 timestamp, const u8 *data, usize dataSize);
// Throws DatabaseStorageNotFound if data with hash does not exist
- void appendStorage(const Hash &hash, DataView &data, u64 timestamp, const Signature::PublicKey &creatorPublicKey);
+ void appendStorage(const Hash &hash, const User *creatorUser, u64 timestamp, const u8 *data, usize dataSize);
+
+ void addToQuarantine(const Signature::PublicKey &creatorPublicKey, u64 timestamp, const u8 *data, usize dataSize);
- // Returns nullptr if not storage with provided hash exists
+ // Returns nullptr if no storage with provided hash exists
const DatabaseStorageObjectList* getStorage(const Hash &hash) const;
+
+ // Returns nullptr if no node with the user exists
+ const Hash* getNodeByUserPublicKey(const Signature::PublicKey &userPublicKey) const;
+
+ // Returns nullptr if no user with public key exists
+ const User* getUserByPublicKey(const Signature::PublicKey &userPublicKey) const;
private:
DatabaseStorageMap storageMap;
+ DatabaseStorageQuarantineMap quarantineStorageMap;
+ Signature::MapPublicKey<Hash> userPublicKeyNodeMap;
+ Signature::MapPublicKey<const User*> publicKeyUserMap;
};
}