#ifndef GRADIDO_LOGIN_SERVER_MODEL_TABLE_NODE_SERVER_INCLUDE #define GRADIDO_LOGIN_SERVER_MODEL_TABLE_NODE_SERVER_INCLUDE #include "ModelBase.h" #include "Poco/Tuple.h" namespace model { namespace table { typedef Poco::Tuple NodeServerTuple; enum NodeServerType { NODE_SERVER_NONE, NODE_SERVER_GRADIDO_NODE, NODE_SERVER_GRADIDO_COMMUNITY, NODE_SERVER_HEDERA_MAINNET_NODE, NODE_SERVER_HEDERA_TESTNET_NODE, NODE_SERVER_TYPE_COUNT, NODE_SERVER_TYPE_NONE }; bool NodeServerIsHederaNode(NodeServerType type); bool NodeServerHasGroup(NodeServerType type); class NodeServer : public ModelBase { public: NodeServer(); NodeServer(const std::string& url, int port, int groupId, NodeServerType type, int nodeHederaId); NodeServer(const NodeServerTuple& tuple); ~NodeServer(); // generic db operations const char* getTableName() const { return "node_servers"; } std::string toString(); static const char* nodeServerTypeToString(NodeServerType type); inline void setLastLiveSign(Poco::DateTime lastLiveSign) { UNIQUE_LOCK; mLastLiveSign = lastLiveSign; } // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // !ATTENTION! if using set port or set url review CronManager code // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! inline std::string getUrl() const { return mUrl; } inline int getPort() const { return mPort; } inline std::string getUrlWithPort() const { return mUrl + ":" + std::to_string(mPort); } inline int getGroupId() const { return mGroupId; } inline NodeServerType getNodeServerType() const { return (NodeServerType)mServerType; } inline bool isHederaNode() const { return NodeServerIsHederaNode((NodeServerType)mServerType);} inline bool hasGroup() const {return NodeServerHasGroup((NodeServerType)mServerType);} inline int getNodeHederaId() const { return mNodeHederaId; } inline Poco::DateTime getLastLiveSign() const { SHARED_LOCK; return mLastLiveSign; } protected: Poco::Data::Statement _loadFromDB(Poco::Data::Session session, const std::string& fieldName); Poco::Data::Statement _loadMultipleFromDB(Poco::Data::Session session, const std::string& fieldName); Poco::Data::Statement _loadMultipleFromDB(Poco::Data::Session session, const std::vector fieldNames, MysqlConditionType conditionType = MYSQL_CONDITION_AND); Poco::Data::Statement _loadIdFromDB(Poco::Data::Session session); Poco::Data::Statement _insertIntoDB(Poco::Data::Session session); std::string mUrl; int mPort; int mGroupId; int mServerType; int mNodeHederaId; Poco::DateTime mLastLiveSign; }; } } #endif //GRADIDO_LOGIN_SERVER_MODEL_TABLE_NODE_SERVER_INCLUDE