#ifndef DBMUSERTGC_H #define DBMUSERTGC_H #include #include #include #include #include #include "model/databaseManager/utils/initializationUtils.h" #include "model/databaseManager/utils/StaticUtility.h" #define TGC_COUNT 12 #define FACTORY "factory" /*************************************************************************************************/ /** * @brief Database dto structure for User * @author Mohammad Mohsen Talaie * @details * @date 23 feb 2021 */ /*************************************************************************************************/ typedef struct DbmDtoUserTgc { int ID; int User_Id; QList > userTgcData; }DbmDtoUserTgc; Q_DECLARE_METATYPE(DbmDtoUserTgc) /*************************************************************************************************/ /** * @brief Database class for User * @author Mohammad Mohsen Talaie * @details * @date 23 feb 2021 */ /*************************************************************************************************/ class DbmUserTgc { private: static int getUserIDByUsername(QString username, QSqlTableModel* tableModel) { tableModel->setTable("User"); tableModel->setFilter(QString("username is '%1'").arg(username)); bool ret = tableModel->select(); if(ret) { int id = tableModel->record(0).value("ID").toInt(); return id; } return 0; } static QList pripareTgcList(QStringList tgcData) { QList dataTemp; for(int k = 0; k < tgcData.length(); ++k) { dataTemp.append(tgcData[k].toInt()); } return dataTemp; } static QStringList getTgcListFromRow(QSqlTableModel* tableModel, int rowNumber, int dataNumber) { auto tgcData = tableModel->record(rowNumber).value("DATA" + QString::number(dataNumber)).toString().split(',', QString::SkipEmptyParts); return tgcData; } static QList > getTgcDataFromRow(int i, QSqlTableModel* tableModel) { QList > allData; for(int j = 10; j <= TGC_COUNT; ++j) { auto tgcData = getTgcListFromRow(tableModel, i, j); QList dataTemp = pripareTgcList(tgcData); allData.append(dataTemp); dataTemp.clear(); } return allData; } static bool insertInitUserTgcFromFactory(int userId, QSqlTableModel* tableModel) { DbmDtoUserTgc userTgc; getUserTgcByUsername(FACTORY, tableModel, userTgc); userTgc.User_Id = userId; tableModel->clear(); return setUserTgcByUserId(userId, tableModel, userTgc); } static QSqlRecord createUserTgcRecord(DbmDtoUserTgc& userTgc) { QSqlRecord newRec; QSqlField uId("User_id", QVariant::Int); uId.setValue(userTgc.User_Id); QSqlField data19("data10", QVariant::String); data19.setValue(StaticUtility::convertListToString(userTgc.userTgcData.at(0))); QSqlField data20("data11", QVariant::String); data20.setValue(StaticUtility::convertListToString(userTgc.userTgcData.at(1))); QSqlField data21("data12", QVariant::String); data21.setValue(StaticUtility::convertListToString(userTgc.userTgcData.at(2))); newRec.append(uId); newRec.append(data19); newRec.append(data20); newRec.append(data21); return newRec; } static bool selectFromUserTgc(QSqlTableModel* tableModel, QString filter = "") { tableModel->setTable("UserTgc"); if(!filter.isEmpty()) { tableModel->setFilter(filter); } bool ret = tableModel->select(); return ret; } public: static bool getUserTgcss(QSqlTableModel* tableModel, QList& userTgcs) { bool ret = selectFromUserTgc(tableModel); DbmDtoUserTgc userIns; for(int i = 0; i < tableModel->rowCount(); ++i) { if(tableModel->record(i).value("ID").toInt() > 0) { DbmDtoUserTgc tgcTemp; tgcTemp.userTgcData.append(getTgcDataFromRow(i, tableModel)); tgcTemp.ID = tableModel->record(i).value("ID").toInt(); tgcTemp.User_Id = tableModel->record(i).value("User_Id").toInt(); userTgcs.append(tgcTemp); } } return ret; } static bool getUserTgcByUserId(int userId, QSqlTableModel* tableModel, DbmDtoUserTgc& userTgc) { auto filter = QString("User_Id is %1").arg(userId); bool ret = selectFromUserTgc(tableModel, filter); if(tableModel->rowCount() < 1) { insertInitUserTgcFromFactory(userId, tableModel); ret = tableModel->select(); if(!ret) { return false; } } userTgc.userTgcData.append(getTgcDataFromRow(0, tableModel)); userTgc.ID = tableModel->record(0).value("ID").toInt(); userTgc.User_Id = tableModel->record(0).value("User_Id").toInt(); return ret; } static bool getUserTgcByUsername(QString username, QSqlTableModel* tableModel, DbmDtoUserTgc& userTgc) { tableModel->setTable("UserTgc"); int userId = getUserIDByUsername(username, tableModel); if(userId > 0) { auto ret = getUserTgcByUserId(userId, tableModel, userTgc); return ret; } return false; } static bool setUserTgcByUserId(int userId, QSqlTableModel* tableModel, DbmDtoUserTgc& userTgc) { bool ret; auto filter = QString("User_Id is %1").arg(userId); auto noError = selectFromUserTgc(tableModel, filter); if(!noError) { return false; } if(tableModel->rowCount() > 0) { ret = tableModel->setData(tableModel->index(0, 1), 2); QVariant data10; data10.setValue(StaticUtility::convertListToString(userTgc.userTgcData.at( 0))); ret = tableModel->setData(tableModel->index(0, 2), data10); QVariant data11; data11.setValue(StaticUtility::convertListToString(userTgc.userTgcData.at( 0))); ret = tableModel->setData(tableModel->index(0, 3), data11); QVariant data12; data12.setValue(StaticUtility::convertListToString(userTgc.userTgcData.at( 0))); ret = tableModel->setData(tableModel->index(0, 4), data12); ret = tableModel->submit(); } else { userTgc.User_Id = userId; QSqlRecord newRec = createUserTgcRecord(userTgc); ret = tableModel->insertRecord(-1, newRec); } return ret; } static bool setUserTgcByUsername(QString username, QSqlTableModel* tableModel, DbmDtoUserTgc& userTgc) { bool ret; int userId = getUserIDByUsername(username, tableModel); if(userId == 0) { return false; } return setUserTgcByUserId(userId, tableModel, userTgc); } static bool updateUserTgcFieldByUserId(QSqlTableModel* tableModel, int userId, int index, QList tgc) { auto filter = QString("User_Id is %1").arg(userId); auto noError = selectFromUserTgc(tableModel, filter); if(!noError) { return false; } int trueIndex = index + 2; //0 : id | 1 : User_Id QVariant data; data.setValue(StaticUtility::convertListToString(tgc)); bool ret = tableModel->setData(tableModel->index(0, trueIndex), data); ret = tableModel->submit(); return ret; } static bool updateUserTgcFieldByUsername(QSqlTableModel* tableModel, QString username, int index, QList tgc) { int userId = getUserIDByUsername(username, tableModel); if(userId > 0) { return updateUserTgcFieldByUserId(tableModel, userId, index, tgc); } return false; } }; #endif //DBMUSERTGC_H