// SPDX-FileCopyrightText: 2023 Yury Gubich // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include #include #include #include #include "schema/session.h" #include "schema/asset.h" namespace DB { class Interface { public: enum class Type { mysql }; enum class State { disconnected, connecting, connected }; static std::unique_ptr create(Type type); virtual ~Interface(); State currentState() const; const Type type; public: virtual void connect(const std::string& path) = 0; virtual void disconnect() = 0; virtual void setDatabase(const std::string& newDatabase) = 0; virtual void setCredentials(const std::string& login, const std::string& password) = 0; virtual void migrate(uint8_t targetVersion) = 0; virtual uint8_t getVersion() = 0; virtual void setVersion(uint8_t version) = 0; virtual unsigned int registerAccount(const std::string& login, const std::string& hash) = 0; virtual std::string getAccountHash(const std::string& login) = 0; virtual Session createSession(const std::string& login, const std::string& access, const std::string& renew) = 0; virtual Session findSession(const std::string& accessToken) = 0; virtual std::vector listAssets(unsigned int owner) = 0; virtual Asset addAsset(const Asset& asset) = 0; virtual bool deleteAsset(unsigned int assetId, unsigned int actorId) = 0; protected: Interface(Type type); protected: State state; }; }