// SPDX-FileCopyrightText: 2023 Yury Gubich // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include #include #include #include namespace DB { struct Session { unsigned int id; unsigned int owner; std::string accessToken; std::string renewToken; }; struct Asset { unsigned int id; unsigned int owner; unsigned int currency; std::string title; std::string icon; // `color` INTEGER UNSIGNED DEFAULT 0, // `balance` DECIMAL (20, 5) DEFAULT 0, // `type` INTEGER UNSIGNED NOT NULL, bool archived; }; 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; protected: Interface(Type type); protected: State state; }; }