2023-12-30 22:42:11 +00:00
|
|
|
//SPDX-FileCopyrightText: 2023 Yury Gubich <blue@macaw.me>
|
|
|
|
//SPDX-License-Identifier: GPL-3.0-or-later
|
2023-12-10 23:23:15 +00:00
|
|
|
|
2023-12-07 20:32:43 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <stdexcept>
|
2023-12-10 23:23:15 +00:00
|
|
|
#include <filesystem>
|
2023-12-11 23:29:55 +00:00
|
|
|
#include <optional>
|
2023-12-07 20:32:43 +00:00
|
|
|
|
|
|
|
#include <mysql.h>
|
|
|
|
|
2023-12-29 17:40:00 +00:00
|
|
|
#include "database/interface.h"
|
2023-12-10 23:23:15 +00:00
|
|
|
#include "utils/helpers.h"
|
2023-12-07 20:32:43 +00:00
|
|
|
|
2023-12-29 17:40:00 +00:00
|
|
|
namespace DB {
|
|
|
|
class MySQL : public Interface {
|
2023-12-08 22:26:16 +00:00
|
|
|
class Statement;
|
2023-12-20 22:42:13 +00:00
|
|
|
class Transaction;
|
2023-12-22 23:25:20 +00:00
|
|
|
|
2023-12-07 20:32:43 +00:00
|
|
|
public:
|
2024-01-11 21:33:46 +00:00
|
|
|
MySQL ();
|
|
|
|
~MySQL () override;
|
2023-12-07 20:32:43 +00:00
|
|
|
|
2024-01-11 21:33:46 +00:00
|
|
|
void connect (const std::string& path) override;
|
|
|
|
void disconnect () override;
|
|
|
|
void setCredentials (const std::string& login, const std::string& password) override;
|
|
|
|
void setDatabase (const std::string& database) override;
|
2023-12-07 20:32:43 +00:00
|
|
|
|
2024-01-11 21:33:46 +00:00
|
|
|
void migrate (uint8_t targetVersion) override;
|
|
|
|
uint8_t getVersion () override;
|
|
|
|
void setVersion (uint8_t version) override;
|
2023-12-08 22:26:16 +00:00
|
|
|
|
2024-01-22 18:21:55 +00:00
|
|
|
uint32_t registerAccount (const std::string& login, const std::string& hash) override;
|
2024-01-11 21:33:46 +00:00
|
|
|
std::string getAccountHash (const std::string& login) override;
|
2024-04-10 23:09:45 +00:00
|
|
|
|
2024-01-11 21:33:46 +00:00
|
|
|
Session createSession (const std::string& login, const std::string& access, const std::string& renew) override;
|
|
|
|
Session findSession (const std::string& accessToken) override;
|
2024-04-10 23:09:45 +00:00
|
|
|
|
2024-01-22 18:21:55 +00:00
|
|
|
std::vector<Asset> listAssets (uint32_t owner) override;
|
2024-01-12 23:39:41 +00:00
|
|
|
Asset addAsset (const Asset& asset) override;
|
2024-04-07 23:03:10 +00:00
|
|
|
void updateAsset (const Asset& asset) override;
|
2024-01-22 18:21:55 +00:00
|
|
|
bool deleteAsset(uint32_t assetId, uint32_t actorId) override;
|
2024-04-10 23:09:45 +00:00
|
|
|
|
2024-01-22 18:21:55 +00:00
|
|
|
std::vector<Currency> listUsedCurrencies(uint32_t owner) override;
|
2023-12-20 22:42:13 +00:00
|
|
|
|
2024-04-10 23:09:45 +00:00
|
|
|
DB::Transaction addTransaction(const DB::Transaction& transaction) override;
|
|
|
|
std::vector<DB::Transaction> listTransactions(uint32_t owner) override;
|
2024-04-15 22:13:22 +00:00
|
|
|
void updateTransaction(const DB::Transaction& transaction) override;
|
|
|
|
void deleteTransaction(uint32_t id) override;
|
2024-04-10 23:09:45 +00:00
|
|
|
|
2023-12-10 23:23:15 +00:00
|
|
|
private:
|
2024-01-11 21:33:46 +00:00
|
|
|
void executeFile (const std::filesystem::path& relativePath);
|
2024-04-15 00:16:36 +00:00
|
|
|
bool getBlock (std::ifstream& file, std::string& block, std::string& name);
|
2024-01-22 18:21:55 +00:00
|
|
|
uint32_t lastInsertedId ();
|
2023-12-10 23:23:15 +00:00
|
|
|
|
2023-12-07 20:32:43 +00:00
|
|
|
protected:
|
|
|
|
MYSQL connection;
|
|
|
|
std::string login;
|
|
|
|
std::string password;
|
|
|
|
std::string database;
|
2023-12-22 23:25:20 +00:00
|
|
|
|
|
|
|
struct ResDeleter {
|
|
|
|
void operator () (MYSQL_RES* res) {
|
|
|
|
mysql_free_result(res);
|
|
|
|
}
|
|
|
|
};
|
2023-12-07 20:32:43 +00:00
|
|
|
};
|
2023-12-29 17:40:00 +00:00
|
|
|
}
|