mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
adding PendingTask model and controller
This commit is contained in:
parent
4289a23c9f
commit
6a53b19a42
36
src/cpp/controller/PendingTask.cpp
Normal file
36
src/cpp/controller/PendingTask.cpp
Normal file
@ -0,0 +1,36 @@
|
||||
#include "PendingTask.h"
|
||||
|
||||
namespace controller {
|
||||
|
||||
PendingTask::PendingTask(model::table::PendingTask* dbModel)
|
||||
{
|
||||
mDBModel = dbModel;
|
||||
}
|
||||
|
||||
PendingTask::~PendingTask()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
Poco::AutoPtr<PendingTask> PendingTask::create(int userId, std::string serializedProtoRequest, model::table::TaskType type)
|
||||
{
|
||||
auto db = new model::table::PendingTask(userId, serializedProtoRequest, type);
|
||||
auto pending_task = new PendingTask(db);
|
||||
return Poco::AutoPtr<PendingTask>(pending_task);
|
||||
}
|
||||
|
||||
std::vector<Poco::AutoPtr<PendingTask>> PendingTask::load(int userId)
|
||||
{
|
||||
auto db = new model::table::PendingTask();
|
||||
auto pending_task_list = db->loadFromDB<int, model::table::PendingTaskTuple>("user_id", userId, 3);
|
||||
std::vector<Poco::AutoPtr<PendingTask>> resultVector;
|
||||
resultVector.reserve(pending_task_list.size());
|
||||
for (auto it = pending_task_list.begin(); it != pending_task_list.end(); it++) {
|
||||
resultVector.push_back(new PendingTask(new model::table::PendingTask(*it)));
|
||||
}
|
||||
return resultVector;
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
37
src/cpp/controller/PendingTask.h
Normal file
37
src/cpp/controller/PendingTask.h
Normal file
@ -0,0 +1,37 @@
|
||||
#ifndef GRADIDO_LOGIN_SERVER_CONTROLLER_PENDING_TASK_INCLUDE
|
||||
#define GRADIDO_LOGIN_SERVER_CONTROLLER_PENDING_TASK_INCLUDE
|
||||
|
||||
#include "../model/table/PendingTask.h"
|
||||
|
||||
#include "Poco/SharedPtr.h"
|
||||
|
||||
#include "TableControllerBase.h"
|
||||
|
||||
namespace controller {
|
||||
|
||||
|
||||
typedef Poco::Tuple<int, std::string, int, int, int, int, Poco::UInt64, Poco::UInt64, Poco::UInt64, Poco::DateTime> NodeServerFullTuple;
|
||||
|
||||
class PendingTask : public TableControllerBase
|
||||
{
|
||||
public:
|
||||
|
||||
~PendingTask();
|
||||
|
||||
static Poco::AutoPtr<PendingTask> create(int userId, std::string serializedProtoRequest, model::table::TaskType type);
|
||||
|
||||
static std::vector<Poco::AutoPtr<PendingTask>> load(int userId);
|
||||
|
||||
inline bool deleteFromDB() { return mDBModel->deleteFromDB(); }
|
||||
|
||||
inline Poco::AutoPtr<model::table::PendingTask> getModel() { return _getModel<model::table::PendingTask>(); }
|
||||
|
||||
|
||||
protected:
|
||||
PendingTask(model::table::PendingTask* dbModel);
|
||||
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
#endif //GRADIDO_LOGIN_SERVER_CONTROLLER_PENDING_TASK_INCLUDE
|
||||
94
src/cpp/model/table/PendingTask.cpp
Normal file
94
src/cpp/model/table/PendingTask.cpp
Normal file
@ -0,0 +1,94 @@
|
||||
#include "PendingTask.h"
|
||||
|
||||
//#include <sstream>
|
||||
|
||||
using namespace Poco::Data::Keywords;
|
||||
|
||||
namespace model
|
||||
{
|
||||
namespace table
|
||||
{
|
||||
PendingTask::PendingTask()
|
||||
: mUserId(0), mTaskTypeId(TASK_TYPE_NONE)
|
||||
{
|
||||
|
||||
}
|
||||
PendingTask::PendingTask(int userId, std::string serializedProtoRequest, TaskType type)
|
||||
: mUserId(userId), mRequest((const unsigned char*)serializedProtoRequest.data(), serializedProtoRequest.size()),
|
||||
mTaskTypeId(TASK_TYPE_NONE)
|
||||
{
|
||||
|
||||
}
|
||||
PendingTask::PendingTask(const PendingTaskTuple& tuple)
|
||||
: ModelBase(tuple.get<0>()), mUserId(tuple.get<1>()), mRequest(tuple.get<2>()), mCreated(tuple.get<3>()), mFinished(tuple.get<4>()),
|
||||
mResultJsonString(tuple.get<5>()), mTaskTypeId(tuple.get<6>())
|
||||
{
|
||||
|
||||
}
|
||||
PendingTask::~PendingTask()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
std::string PendingTask::toString()
|
||||
{
|
||||
std::stringstream ss;
|
||||
std::shared_lock<std::shared_mutex> _lock(mSharedMutex);
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
|
||||
const char* PendingTask::typeToString(TaskType type)
|
||||
{
|
||||
switch (type) {
|
||||
case TASK_TYPE_GROUP_CREATE: return "group create";
|
||||
case TASK_TYPE_GROUP_ADD_MEMBER: return "group add member";
|
||||
case TASK_TYPE_CREATION: return "creation";
|
||||
case TASK_TYPE_TRANSFER: return "transfer";
|
||||
case TASK_TYPE_HEDERA_TOPIC_CREATE: return "hedera topic create";
|
||||
case TASK_TYPE_HEDERA_TOPIC_MESSAGE: return "hedera topic send message";
|
||||
case TASK_TYPE_HEDERA_ACCOUNT_CREATE: return "hedera account create";
|
||||
default: return "<unknown>";
|
||||
}
|
||||
return "<invalid>";
|
||||
}
|
||||
|
||||
Poco::Data::Statement PendingTask::_loadFromDB(Poco::Data::Session session, const std::string& fieldName)
|
||||
{
|
||||
Poco::Data::Statement select(session);
|
||||
|
||||
select << "SELECT id, user_id, request, created, finished, result_json, task_type_id FROM " << getTableName()
|
||||
<< " where " << fieldName << " = ?"
|
||||
, into(mID), into(mUserId), into(mRequest), into(mCreated), into(mFinished), into(mResultJsonString), into(mTaskTypeId);
|
||||
|
||||
return select;
|
||||
}
|
||||
|
||||
Poco::Data::Statement PendingTask::_loadIdFromDB(Poco::Data::Session session)
|
||||
{
|
||||
Poco::Data::Statement select(session);
|
||||
lock();
|
||||
select << "SELECT id FROM " << getTableName()
|
||||
<< " WHERE user_id = ? "
|
||||
<< " AND created = ? "
|
||||
<< " AND task_type_id = ? "
|
||||
, into(mID), use(mUserId), use(mCreated), use(mTaskTypeId);
|
||||
unlock();
|
||||
return select;
|
||||
}
|
||||
|
||||
|
||||
Poco::Data::Statement PendingTask::_insertIntoDB(Poco::Data::Session session)
|
||||
{
|
||||
Poco::Data::Statement insert(session);
|
||||
lock();
|
||||
insert << "INSERT INTO " << getTableName()
|
||||
<< " (user_id, request, created, task_type_id) VALUES(?,?,?,?)"
|
||||
, use(mUserId), use(mRequest), use(mCreated), use(mTaskTypeId);
|
||||
unlock();
|
||||
return insert;
|
||||
}
|
||||
}
|
||||
}
|
||||
61
src/cpp/model/table/PendingTask.h
Normal file
61
src/cpp/model/table/PendingTask.h
Normal file
@ -0,0 +1,61 @@
|
||||
#ifndef GRADIDO_LOGIN_SERVER_MODEL_TABLE_PENDING_TASKS_INCLUDE
|
||||
#define GRADIDO_LOGIN_SERVER_MODEL_TABLE_PENDING_TASKS_INCLUDE
|
||||
|
||||
#include "ModelBase.h"
|
||||
#include "Poco/Types.h"
|
||||
|
||||
#include <shared_mutex>
|
||||
|
||||
namespace model {
|
||||
namespace table {
|
||||
|
||||
enum TaskType {
|
||||
TASK_TYPE_NONE = 0,
|
||||
TASK_TYPE_GROUP_CREATE = 1,
|
||||
TASK_TYPE_GROUP_ADD_MEMBER = 2,
|
||||
TASK_TYPE_CREATION = 10,
|
||||
TASK_TYPE_TRANSFER = 11,
|
||||
TASK_TYPE_HEDERA_TOPIC_CREATE = 20,
|
||||
TASK_TYPE_HEDERA_TOPIC_MESSAGE = 21,
|
||||
TASK_TYPE_HEDERA_ACCOUNT_CREATE = 25,
|
||||
|
||||
};
|
||||
|
||||
typedef Poco::Tuple<int, int, Poco::Data::BLOB, Poco::DateTime, Poco::DateTime, std::string, int> PendingTaskTuple;
|
||||
|
||||
class PendingTask : public ModelBase
|
||||
{
|
||||
public:
|
||||
PendingTask();
|
||||
PendingTask(int userId, std::string serializedProtoRequest, TaskType type);
|
||||
PendingTask(const PendingTaskTuple& tuple);
|
||||
|
||||
~PendingTask();
|
||||
|
||||
// generic db operations
|
||||
const char* getTableName() const { return "pending_tasks"; }
|
||||
std::string toString();
|
||||
|
||||
|
||||
static const char* typeToString(TaskType type);
|
||||
protected:
|
||||
Poco::Data::Statement _loadFromDB(Poco::Data::Session session, const std::string& fieldName);
|
||||
Poco::Data::Statement _loadIdFromDB(Poco::Data::Session session);
|
||||
Poco::Data::Statement _insertIntoDB(Poco::Data::Session session);
|
||||
|
||||
int mUserId;
|
||||
Poco::Data::BLOB mRequest;
|
||||
Poco::DateTime mCreated;
|
||||
Poco::DateTime mFinished;
|
||||
std::string mResultJsonString;
|
||||
int mTaskTypeId;
|
||||
|
||||
std::shared_mutex mSharedMutex;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endif //GRADIDO_LOGIN_SERVER_MODEL_TABLE_PENDING_TASKS_INCLUDE
|
||||
Loading…
x
Reference in New Issue
Block a user