Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 17 additions & 9 deletions App/Server/ServerConfigs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,14 @@
******************************************************************************/
/**
* @author S.Mehran M.Ziabary <ziabary@targoman.com>
* @author Kambiz Zandi <kambizzandi@gmail.com>
*/

#include "ServerConfigs.h"
#include "libTargomanCommon/Configuration/Validators.hpp"
#include "3rdParty/ISO639/ISO639.h"

namespace Targoman {
namespace API {
namespace Server {
namespace Targoman::API::Server {

using namespace Targoman::Common;
using namespace Targoman::Common::Configuration;
Expand Down Expand Up @@ -210,15 +209,26 @@ tmplConfigurable<FilePath_t> ServerConfigs::PublicPath(
"Directory static files are stored",
"",
Validators::tmplPathAccessValidator<
TARGOMAN_PATH_ACCESS(enuPathAccess::Dir | enuPathAccess::Readable),
false>,
TARGOMAN_PATH_ACCESS(enuPathAccess::Dir | enuPathAccess::Readable),
false
>,
"",
"DIRECTORY",
"public-path",
enuConfigSource::Arg | enuConfigSource::File);


/****************************************************************************/
tmplConfigurable<QString> ServerConfigs::DBPrefix(
ServerConfigs::makeConfig("DBPrefix"),
"Prefix to prepend to all database schemas",
"",
ReturnTrueCrossValidator(),
"",
"PREFIX",
"dbprefix",
enuConfigSource::Arg | enuConfigSource::File
);

tmplConfigurable<QString> ServerConfigs::MasterDB::Host(
ServerConfigs::MasterDB::makeConfig("Host"),
"Database Host address",
Expand Down Expand Up @@ -349,6 +359,4 @@ tmplConfigurableMultiMap<gConfigs::Server> gConfigs::TranslationServers(
"List of valid translation servers to connect to them separated by their translation engine");
*/

}
}
}
} //namespace Targoman::API::Server
14 changes: 6 additions & 8 deletions App/Server/ServerConfigs.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
******************************************************************************/
/**
* @author S.Mehran M.Ziabary <ziabary@targoman.com>
* @author Kambiz Zandi <kambizzandi@gmail.com>
*/

#ifndef TARGOMAN_API_SERVER_CONFIGS_H
Expand All @@ -27,9 +28,7 @@
#include "libTargomanCommon/Configuration/tmplConfigurable.h"
#include "Interfaces/Common/GenericTypes.h"

namespace Targoman{
namespace API {
namespace Server {
namespace Targoman::API::Server {

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wweak-vtables"
Expand Down Expand Up @@ -59,8 +58,9 @@ struct ServerConfigs

static QString BasePathWithVersion;

struct MasterDB{
static inline QString makeConfig(const QString& _name){return "/MasterDB/" + _name;}
static Targoman::Common::Configuration::tmplConfigurable<QString> DBPrefix;
struct MasterDB {
static inline QString makeConfig(const QString& _name) { return "/MasterDB/" + _name; }
static Targoman::Common::Configuration::tmplConfigurable<QString> Host;
static Targoman::Common::Configuration::tmplRangedConfigurable<quint16>Port;
static Targoman::Common::Configuration::tmplConfigurable<QString> User;
Expand All @@ -73,8 +73,6 @@ constexpr quint16 TAPI_BASE_USER_DEFINED_TYPEID = QMetaType::User + 3;

extern TAPI::stuStatistics gServerStats;

}
}
}
} //namespace Targoman::API::Server

#endif // TARGOMAN_API_SERVER_CONFIGS_H
33 changes: 18 additions & 15 deletions App/Server/appTargomanAPI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ void appTargomanAPI::slotExecute()
//Prepare database connections
if (RequiredDBs.size())
{
DBManager::clsDAC::addDBEngine(DBManager::enuDBEngines::MySQL);
TargomanDebug(0, "Registering db connections");

QSet<QString> ConnectionStrings;

Expand All @@ -102,28 +102,31 @@ void appTargomanAPI::slotExecute()
ServerConfigs::MasterDB::Pass.value()
};

ConnectionStrings.insert(MasterDBInfo.toConnStr(/*true*/));
DBManager::clsDAC::setConnectionString(MasterDBInfo.toConnStr());
QString ConnStr = MasterDBInfo.toConnStr(ServerConfigs::DBPrefix.value()/*, true*/);
ConnectionStrings.insert(ConnStr);

TargomanDebug(0, "Registering " << ConnStr);
DBManager::clsDAC::addDBEngine(DBManager::enuDBEngines::MySQL);
DBManager::clsDAC::setConnectionString(ConnStr);
}

for (auto DBInfoIter = RequiredDBs.begin(); DBInfoIter != RequiredDBs.end(); ++DBInfoIter)
{
QString ConnStr = DBInfoIter->toConnStr(ServerConfigs::DBPrefix.value()/*true*/);

if (DBInfoIter->Host.size()
&& DBInfoIter->Schema.size()
&& ConnectionStrings.contains(DBInfoIter->toConnStr(/*true*/)) == false)
&& ConnectionStrings.contains(ConnStr) == false)
{
DBManager::clsDAC::addDBEngine(DBManager::enuDBEngines::MySQL, DBInfoIter.key(), DBInfoIter->Schema);
ConnectionStrings.insert(ConnStr);

ConnectionStrings.insert(DBInfoIter->toConnStr(/*true*/));

// if (ConnectionStrings.isEmpty())
// DBManager::clsDAC::setConnectionString(DBInfoIter->toConnStr());
// else
DBManager::clsDAC::setConnectionString(
DBInfoIter->toConnStr(),
DBInfoIter.key(),
DBInfoIter->Schema
);
TargomanDebug(0, "Registering <" << DBInfoIter.key() << "> " << ConnStr);
DBManager::clsDAC::addDBEngine(DBManager::enuDBEngines::MySQL, DBInfoIter.key(), DBInfoIter->Schema);
DBManager::clsDAC::setConnectionString(
ConnStr,
DBInfoIter.key(),
DBInfoIter->Schema
);
}
}
}
Expand Down
14 changes: 7 additions & 7 deletions Interfaces/API/intfPureModule.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -107,13 +107,13 @@ intfPureModule::stuDBInfo::stuDBInfo(QString _schema, quint16 _port, QString _ho
Schema(_schema)
{}

QString intfPureModule::stuDBInfo::toConnStr(bool _noSchema) {
return QString("HOST=%1;PORT=%2;USER=%3;PASSWORD=%4;SCHEMA=%5").arg(
this->Host).arg(
this->Port).arg(
this->User).arg(
this->Pass).arg(
_noSchema ? "" : this->Schema);
QString intfPureModule::stuDBInfo::toConnStr(const QString &_dbPrefix, bool _noSchema) {
return QString("HOST=%1;PORT=%2;USER=%3;PASSWORD=%4;SCHEMA=%5")
.arg(this->Host)
.arg(this->Port)
.arg(this->User)
.arg(this->Pass)
.arg(_noSchema ? "" : _dbPrefix + this->Schema);
}

} //namespace Targoman::API::API
2 changes: 1 addition & 1 deletion Interfaces/API/intfPureModule.h
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,7 @@ class intfPureModule : public Targoman::Common::Configuration::intfModule
QString Schema;

stuDBInfo(QString _schema = "", quint16 _port = 0, QString _host = "", QString _user = "", QString _pass = "");
QString toConnStr(bool _noSchema = false);
QString toConnStr(const QString &_dbPrefix="", bool _noSchema=false);
};

struct stuModuleMethod {
Expand Down
1 change: 0 additions & 1 deletion Modules/Account/Account.pro
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,3 @@ OTHER_FILES += \
migrations/db/* \
migrations/local/* \
migrations/local/.migrations

3 changes: 0 additions & 3 deletions Modules/Account/functionalTest/testAccount.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,6 @@ private slots:

// qDebug() << Result;
// QVERIFY(UserID > 0);

// clsDAC DAC;
// DAC.execQuery("", "UPDATE tblUser SET tblUser.usr_rolID=? WHERE tblUser.usrID=?", {UT_AdminRoleID, gAdminUserID});
}

void ApproveMobile_And_Login_0999_888_1010()
Expand Down
12 changes: 6 additions & 6 deletions Modules/Advert/functionalTest/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,12 @@ int main(int argc, char *argv[])
QCoreApplication App(argc, argv);
App.setAttribute(Qt::AA_Use96Dpi, true);

clsDAC::addDBEngine(enuDBEngines::MySQL);
clsDAC::setConnectionString("HOST=" TARGOMAN_M2STR(UNITTEST_DB_HOST) ";"
"PORT=" TARGOMAN_M2STR(UNITTEST_DB_PORT) ";"
"USER=" TARGOMAN_M2STR(UNITTEST_DB_USER) ";"
"PASSWORD=" TARGOMAN_M2STR(UNITTEST_DB_PASSWORD) ";"
"SCHEMA=" TARGOMAN_M2STR(UNITTEST_DB_SCHEMA) ";");
// clsDAC::addDBEngine(enuDBEngines::MySQL);
// clsDAC::setConnectionString("HOST=" TARGOMAN_M2STR(UNITTEST_DB_HOST) ";"
// "PORT=" TARGOMAN_M2STR(UNITTEST_DB_PORT) ";"
// "USER=" TARGOMAN_M2STR(UNITTEST_DB_USER) ";"
// "PASSWORD=" TARGOMAN_M2STR(UNITTEST_DB_PASSWORD) ";"
// "SCHEMA=" TARGOMAN_M2STR(UNITTEST_DB_SCHEMA) ";");

bool BreakOnFirstFail = true;
int FailedTests = 0;
Expand Down
4 changes: 2 additions & 2 deletions Modules/Advert/functionalTest/testAdvert.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,8 @@ class testAdvert : public clsBaseTest

void cleanupUnitTestData()
{
clsDAC DAC;
DAC.execQuery("", "UPDATE AAA.tblUser SET usrStatus='R' WHERE usrEmail IN(?,?)", { UT_UserEmail, UT_AdminUserEmail });
// clsDAC DAC;
// DAC.execQuery("", "UPDATE AAA.tblUser SET usrStatus='R' WHERE usrEmail IN(?,?)", { UT_UserEmail, UT_AdminUserEmail });
}

private slots:
Expand Down
139 changes: 139 additions & 0 deletions Modules/MT/migrations/db/m20220314_145735_MT_init.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
/* Migration File: m20220314_145735_MT_init.sql */

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!50503 SET NAMES utf8mb4 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

-- Dumping structure for table MT.tblActionLog
CREATE TABLE IF NOT EXISTS `tblActionLog` (
`atlID` int NOT NULL AUTO_INCREMENT,
`atlBy_usrID` bigint unsigned DEFAULT NULL,
`atlInsertionDateTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`atlType` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
`atlDescription` json DEFAULT NULL,
PRIMARY KEY (`atlID`),
KEY `atlType` (`atlType`),
KEY `atlInsertionDateTime` (`atlInsertionDateTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- Dumping structure for table MT.tblCorrectionRules
CREATE TABLE IF NOT EXISTS `tblCorrectionRules` (
`crlID` int unsigned NOT NULL AUTO_INCREMENT,
`crlType` char(1) COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'R' COMMENT 'R: Replace, T: Translation',
`crlPattern` varchar(250) COLLATE utf8mb4_general_ci NOT NULL,
`crlReplacement` varchar(500) COLLATE utf8mb4_general_ci NOT NULL,
PRIMARY KEY (`crlID`),
UNIQUE KEY `crlPattern` (`crlPattern`),
KEY `crlType` (`crlType`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- Dumping structure for table MT.tblDigestedTranslationLogs
CREATE TABLE IF NOT EXISTS `tblDigestedTranslationLogs` (
`dtlDateTime` datetime NOT NULL,
`dtl_aptID` bigint unsigned NOT NULL DEFAULT '0',
`dtl_usrID` bigint unsigned NOT NULL DEFAULT '0',
`dtlEngine` char(3) COLLATE utf8mb4_general_ci NOT NULL,
`dtlDir` char(5) COLLATE utf8mb4_general_ci NOT NULL,
`dtlTotalWordsRequested` bigint unsigned NOT NULL,
`dtlTotalTranslatedWords` bigint unsigned NOT NULL,
`dtlAverageTranslationTime` double NOT NULL,
`dtlMaxSpeed` double NOT NULL,
`dtlAverageSourceWordCount` double NOT NULL,
`dtlMaxSourceWordCount` int NOT NULL,
`dtlMinSourceWordCount` int NOT NULL,
`dtlOkCount` bigint unsigned NOT NULL,
`dtlErrLongCount` bigint unsigned NOT NULL,
`dtlErrNoResourceCount` bigint unsigned NOT NULL,
`dtlErrOtherCount` bigint unsigned NOT NULL,
PRIMARY KEY (`dtlDateTime`,`dtl_aptID`,`dtlEngine`,`dtlDir`,`dtl_usrID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=COMPACT;

-- Dumping structure for table MT.tblMultiDic
CREATE TABLE IF NOT EXISTS `tblMultiDic` (
`dicID` int unsigned NOT NULL AUTO_INCREMENT,
`dicSourceLang` char(2) COLLATE utf8mb4_general_ci NOT NULL,
`dicWord` varchar(100) COLLATE utf8mb4_general_ci NOT NULL,
`dicTranslation` json DEFAULT NULL,
`dicStatus` char(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'A' COMMENT 'A: Active, R: Removed',
`_dicVersion` int unsigned NOT NULL DEFAULT '0',
`dicInsertedBy_usrID` bigint NOT NULL,
`dicInsertionDate` datetime DEFAULT CURRENT_TIMESTAMP,
`dicUpdatedBy_urID` bigint DEFAULT NULL,
PRIMARY KEY (`dicID`),
UNIQUE KEY `dicWord` (`dicWord`),
KEY `dicLang` (`dicSourceLang`),
KEY `dicInsertedBy_usrID` (`dicInsertedBy_usrID`),
KEY `dicInsertionDate` (`dicInsertionDate`),
KEY `dicUpdatedBy_urID` (`dicUpdatedBy_urID`),
KEY `dicStatus` (`dicStatus`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- Dumping structure for table MT.tblTokenStats
CREATE TABLE IF NOT EXISTS `tblTokenStats` (
`tks_tokID` bigint unsigned NOT NULL,
`tksEngine` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
`tksDir` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
`tksTodayWords` int unsigned NOT NULL DEFAULT '0',
`tksThisMonthWords` int unsigned NOT NULL DEFAULT '0',
`tksTotalWords` bigint unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`tks_tokID`,`tksEngine`,`tksDir`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- Dumping structure for table MT.tblTranslatedPhrases
CREATE TABLE IF NOT EXISTS `tblTranslatedPhrases` (
`tps_tlsID` bigint unsigned NOT NULL,
`tpsSourceString` longtext COLLATE utf8mb4_general_ci NOT NULL,
`tpsTargetString` longtext COLLATE utf8mb4_general_ci,
PRIMARY KEY (`tps_tlsID`),
CONSTRAINT `FK__tbl_SMT_TranslationLogs` FOREIGN KEY (`tps_tlsID`) REFERENCES `tblTranslationLogs` (`tlsid`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- Dumping structure for table MT.tblTranslationLogs
CREATE TABLE IF NOT EXISTS `tblTranslationLogs` (
`tlsID` bigint unsigned NOT NULL AUTO_INCREMENT,
`tls_usrID` bigint unsigned NOT NULL,
`tls_aptID` int unsigned DEFAULT NULL,
`tlsRequestTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`tlsDir` char(5) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'Translation like en2fa or fa2en',
`tlsEngine` char(3) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'SMT, NMT, ENT, DIC',
`tlsClass` varchar(10) COLLATE utf8mb4_general_ci NOT NULL,
`tlsServer` bigint DEFAULT NULL,
`tlsSourceWordsCount` int NOT NULL,
`tlsTranslationTime` float NOT NULL,
`tlsErrNo` tinyint NOT NULL DEFAULT '0',
PRIMARY KEY (`tlsID`),
KEY `tlsTime` (`tlsRequestTime`),
KEY `tls_tfsID` (`tlsDir`),
KEY `tlsErrNo` (`tlsErrNo`),
KEY `tlsTranslationTime` (`tlsTranslationTime`),
KEY `tlsEngine` (`tlsEngine`),
KEY `tls_aptID` (`tls_aptID`),
KEY `tlsServer` (`tlsServer`),
KEY `tlsClass` (`tlsClass`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- Dumping structure for trigger MT.tblMultiDic_after_update
SET @OLDTMP_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
DELIMITER //
CREATE TRIGGER `tblMultiDic_after_update` AFTER UPDATE ON `tblMultiDic` FOR EACH ROW BEGIN
DECLARE Changes JSON DEFAULT "{}";

IF NEW.dicSourceLang != OLD.dicSourceLang THEN SET Changes = JSON_MERGE_PATCH(Changes, JSON_OBJECT("dicSourceLang", OLD.dicSourceLang)); END IF;
IF NEW.dicWord != OLD.dicWord THEN SET Changes = JSON_MERGE_PATCH(Changes, JSON_OBJECT("dicWord", OLD.dicWord)); END IF;
IF NEW.dicTranslation != OLD.dicTranslation THEN SET Changes = JSON_MERGE_PATCH(Changes, JSON_OBJECT("dicTranslation", OLD.dicTranslation)); END IF;

INSERT INTO tblActionLogs
SET tblActionLogs.atlBy_usrID = NEW.dicUpdatedBy_urID,
tblActionLogs.atlType = "tblMultiDic-Updated",
tblActionLogs.atlDescription = Changes;
END//
DELIMITER ;
SET SQL_MODE=@OLDTMP_SQL_MODE;

/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
/*!40014 SET FOREIGN_KEY_CHECKS=IFNULL(@OLD_FOREIGN_KEY_CHECKS, 1) */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40111 SET SQL_NOTES=IFNULL(@OLD_SQL_NOTES, 1) */;
5 changes: 5 additions & 0 deletions Modules/NGT/NGT.pro
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,8 @@ include($$QBUILD_PATH/templates/projectConfigs.pri)

addSubdirs(moduleSrc, Dependencies)
addSubdirs(functionalTest, Dependencies)

OTHER_FILES += \
migrations/db/* \
migrations/local/* \
migrations/local/.migrations
Loading