You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

296 lines
7.2 KiB

#ifndef DBMUSERTGC_H
#define DBMUSERTGC_H
#include <QMetaType>
#include <QString>
#include <QObject>
#include <QtSql>
#include <QDebug>
#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<QList<int> > 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<int> pripareTgcList(QStringList tgcData)
{
QList<int> 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<QList<int> > getTgcDataFromRow(int i, QSqlTableModel* tableModel)
{
QList<QList<int> > allData;
for(int j = 10; j <= TGC_COUNT; ++j)
{
auto tgcData = getTgcListFromRow(tableModel, i, j);
QList<int> 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<int>(userTgc.userTgcData.at(0)));
QSqlField data20("data11", QVariant::String);
data20.setValue(StaticUtility::convertListToString<int>(userTgc.userTgcData.at(1)));
QSqlField data21("data12", QVariant::String);
data21.setValue(StaticUtility::convertListToString<int>(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<DbmDtoUserTgc>& 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<int>(userTgc.userTgcData.at(
0)));
ret = tableModel->setData(tableModel->index(0, 2), data10);
QVariant data11;
data11.setValue(StaticUtility::convertListToString<int>(userTgc.userTgcData.at(
0)));
ret = tableModel->setData(tableModel->index(0, 3), data11);
QVariant data12;
data12.setValue(StaticUtility::convertListToString<int>(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<int> 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<int>(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<int> tgc)
{
int userId = getUserIDByUsername(username, tableModel);
if(userId > 0)
{
return updateUserTgcFieldByUserId(tableModel, userId, index, tgc);
}
return false;
}
};
#endif //DBMUSERTGC_H