diff --git a/services/backup/src/Reactors/server/CreateNewBackupReactor.h b/services/backup/src/Reactors/server/CreateNewBackupReactor.h --- a/services/backup/src/Reactors/server/CreateNewBackupReactor.h +++ b/services/backup/src/Reactors/server/CreateNewBackupReactor.h @@ -40,7 +40,7 @@ std::condition_variable blobPutDoneCV; std::mutex blobPutDoneCVMutex; - std::string generateBackupID(); + std::string generateBackupID(const std::string &userID); public: std::unique_ptr handleRequest( diff --git a/services/backup/src/Reactors/server/CreateNewBackupReactor.cpp b/services/backup/src/Reactors/server/CreateNewBackupReactor.cpp --- a/services/backup/src/Reactors/server/CreateNewBackupReactor.cpp +++ b/services/backup/src/Reactors/server/CreateNewBackupReactor.cpp @@ -8,9 +8,10 @@ namespace network { namespace reactor { -std::string CreateNewBackupReactor::generateBackupID() { - // mock - return generateRandomString(); +std::string +CreateNewBackupReactor::generateBackupID(const std::string &userID) { + return generateUUID() + ID_SEPARATOR + + std::to_string(getCurrentTimestamp()); } std::unique_ptr CreateNewBackupReactor::handleRequest( @@ -45,7 +46,13 @@ this->state = State::DATA_CHUNKS; // TODO confirm - holder may be a backup id - this->backupID = this->generateBackupID(); + this->backupID = this->generateBackupID(this->userID); + if (database::DatabaseManager::getInstance().findBackupItem( + this->userID, this->backupID) != nullptr) { + throw std::runtime_error( + "Backup with id [" + this->backupID + "] for user [" + + this->userID + "] already exists, creation aborted"); + } response->set_backupid(this->backupID); this->holder = this->backupID; this->putReactor = std::make_shared( diff --git a/services/lib/src/GlobalTools.h b/services/lib/src/GlobalTools.h --- a/services/lib/src/GlobalTools.h +++ b/services/lib/src/GlobalTools.h @@ -6,6 +6,8 @@ namespace comm { namespace network { +const std::string ID_SEPARATOR = ":"; + uint64_t getCurrentTimestamp(); bool hasEnvFlag(const std::string &flag);