From 7dbe6f971d150adcf78ba8b257582f8e922f1d2d Mon Sep 17 00:00:00 2001 From: kambizzandi Date: Sun, 11 Sep 2022 13:07:47 +0430 Subject: [PATCH] gtwtype i18n created --- ...220911_121311_AAA_create_gtw_type_i18n.sql | 58 +++++++++++++ .../Account/moduleSrc/ORM/PaymentGateways.cpp | 62 +++++++++++++- .../Account/moduleSrc/ORM/PaymentGateways.h | 83 ++++++++++++++++--- .../moduleSrc/Payment/PaymentLogic.cpp | 2 +- Modules/Advert/functionalTest/testAdvert.hpp | 4 + 5 files changed, 195 insertions(+), 14 deletions(-) create mode 100644 Modules/Account/migrations/db/m20220911_121311_AAA_create_gtw_type_i18n.sql diff --git a/Modules/Account/migrations/db/m20220911_121311_AAA_create_gtw_type_i18n.sql b/Modules/Account/migrations/db/m20220911_121311_AAA_create_gtw_type_i18n.sql new file mode 100644 index 00000000..e4db1fbe --- /dev/null +++ b/Modules/Account/migrations/db/m20220911_121311_AAA_create_gtw_type_i18n.sql @@ -0,0 +1,58 @@ +/* Migration File: m20220911_121311_AAA_create_gtw_type_i18n.sql */ +/* CAUTION: don't forget to use {{dbprefix}} for schemas */ + +USE `{{dbprefix}}{{Schema}}`; + +ALTER TABLE `tblPaymentGatewayTypes` + ADD COLUMN `pgtID` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, + DROP PRIMARY KEY, + ADD UNIQUE INDEX `pgtType` (`pgtType`), + ADD PRIMARY KEY (`pgtID`); + +CREATE TABLE `tblPaymentGatewayTypesI18N` ( + `pid` SMALLINT(5) UNSIGNED NOT NULL, + `language` VARCHAR(6) NOT NULL COLLATE 'utf8mb4_general_ci', + `pgtNameI18N` VARCHAR(50) NOT NULL COLLATE 'utf8mb4_general_ci', + PRIMARY KEY (`pid`, `language`) USING BTREE, + INDEX `pid` (`pid`) USING BTREE, + INDEX `language` (`language`) USING BTREE, + CONSTRAINT `FK_tblPaymentGatewayTypesI18N_tblPaymentGatewayTypes` FOREIGN KEY (`pid`) REFERENCES `tblPaymentGatewayTypes` (`pgtID`) ON UPDATE NO ACTION ON DELETE CASCADE +) +COLLATE='utf8mb4_general_ci' +ENGINE=InnoDB +; + +INSERT IGNORE INTO tblPaymentGatewayTypesI18N(pid, language, pgtNameI18N) + SELECT pgtID, 'fa', 'تست دولوپر' + FROM tblPaymentGatewayTypes + WHERE pgtType = '-'; + +INSERT IGNORE INTO tblPaymentGatewayTypesI18N(pid, language, pgtNameI18N) + SELECT pgtID, 'fa', 'رمز ارز' + FROM tblPaymentGatewayTypes + WHERE pgtType = 'B'; + +INSERT IGNORE INTO tblPaymentGatewayTypesI18N(pid, language, pgtNameI18N) + SELECT pgtID, 'fa', 'کردیت کارت بین المللی' + FROM tblPaymentGatewayTypes + WHERE pgtType = 'C'; + +INSERT IGNORE INTO tblPaymentGatewayTypesI18N(pid, language, pgtNameI18N) + SELECT pgtID, 'fa', 'دبیت کارت بین المللی' + FROM tblPaymentGatewayTypes + WHERE pgtType = 'D'; + +INSERT IGNORE INTO tblPaymentGatewayTypesI18N(pid, language, pgtNameI18N) + SELECT pgtID, 'fa', 'بانک ایران' + FROM tblPaymentGatewayTypes + WHERE pgtType = 'I'; + +INSERT IGNORE INTO tblPaymentGatewayTypesI18N(pid, language, pgtNameI18N) + SELECT pgtID, 'fa', 'درگاه واسطه ایران' + FROM tblPaymentGatewayTypes + WHERE pgtType = 'M'; + +INSERT IGNORE INTO tblPaymentGatewayTypesI18N(pid, language, pgtNameI18N) + SELECT pgtID, 'fa', 'پرداخت در محل' + FROM tblPaymentGatewayTypes + WHERE pgtType = 'O'; diff --git a/Modules/Account/moduleSrc/ORM/PaymentGateways.cpp b/Modules/Account/moduleSrc/ORM/PaymentGateways.cpp index c60a84be..ae911235 100644 --- a/Modules/Account/moduleSrc/ORM/PaymentGateways.cpp +++ b/Modules/Account/moduleSrc/ORM/PaymentGateways.cpp @@ -40,6 +40,20 @@ namespace Targoman::API::AccountModule { namespace ORM { +/*****************************************************************\ +|* PaymentGatewayTypesI18N ***************************************| +\*****************************************************************/ +TARGOMAN_API_SUBMODULE_IMPLEMENT(Account, PaymentGatewayTypesI18N) + +PaymentGatewayTypesI18N::PaymentGatewayTypesI18N() : + intfSQLBasedModule( + AAASchema, + tblPaymentGatewayTypesI18N::Name, + tblPaymentGatewayTypesI18N::Private::ORMFields, + tblPaymentGatewayTypesI18N::Private::Relations, + tblPaymentGatewayTypesI18N::Private::Indexes +) { ; } + /*****************************************************************\ |* PaymentGatewayTypes *******************************************| \*****************************************************************/ @@ -52,7 +66,53 @@ PaymentGatewayTypes::PaymentGatewayTypes() : tblPaymentGatewayTypes::Private::ORMFields, tblPaymentGatewayTypes::Private::Relations, tblPaymentGatewayTypes::Private::Indexes -) { ; } +) { + PaymentGatewayTypesI18N::instance(); +} + +ORMSelectQuery PaymentGatewayTypes::makeSelectQuery(INTFAPICALLBOOM_IMPL &APICALLBOOM_PARAM, const QString &_alias, Q_DECL_UNUSED bool _translate, Q_DECL_UNUSED bool _isRoot) { + PaymentGatewayTypesI18N::instance().prepareFiltersList(); + + ORMSelectQuery Query = intfSQLBasedModule::makeSelectQuery(APICALLBOOM_PARAM, _alias, _translate); + + if (_translate) { + Query + .removeCol(tblPaymentGatewayTypes::Fields::pgtName) + .nestedLeftJoin(PaymentGatewayTypesI18N::instance().makeSelectQuery(APICALLBOOM_PARAM) + .where({ tblPaymentGatewayTypesI18N::Fields::language, enuConditionOperator::Equal, APICALLBOOM_PARAM.language() }) + , "lng_tblPaymentGatewayTypes" + , { "lng_tblPaymentGatewayTypes", tblPaymentGatewayTypesI18N::Fields::pid, + enuConditionOperator::Equal, + tblPaymentGatewayTypes::Name, tblPaymentGatewayTypes::Fields::pgtID + } + ) + .addCol(enuConditionalAggregation::IF, + { "lng_tblPaymentGatewayTypes", tblPaymentGatewayTypesI18N::Fields::pgtNameI18N, enuConditionOperator::Null }, + DBExpression::VALUE(R(_alias.isEmpty() ? tblPaymentGatewayTypes::Name : _alias, tblPaymentGatewayTypes::Fields::pgtName)), + DBExpression::VALUE(R("lng_tblPaymentGatewayTypes", tblPaymentGatewayTypesI18N::Fields::pgtNameI18N)), + tblPaymentGatewayTypes::Fields::pgtName + ) + ; + } else { + Query + .nestedLeftJoin(PaymentGatewayTypesI18N::instance().makeSelectQuery(APICALLBOOM_PARAM) + .addCol(tblPaymentGatewayTypesI18N::Fields::pid) + .addCol(DBExpression::VALUE(QString("CONCAT('[', GROUP_CONCAT(JSON_OBJECT(`language`, %1)), ']')") + .arg(tblPaymentGatewayTypesI18N::Fields::pgtNameI18N)), + tblPaymentGatewayTypesI18N::Fields::pgtNameI18N) + .groupBy(tblPaymentGatewayTypesI18N::Fields::pid) + , "lng_tblPaymentGatewayTypes" + , { "lng_tblPaymentGatewayTypes", tblPaymentGatewayTypesI18N::Fields::pid, + enuConditionOperator::Equal, + tblPaymentGatewayTypes::Name, tblPaymentGatewayTypes::Fields::pgtID + } + ) + .addCol(R("lng_tblPaymentGatewayTypes", tblPaymentGatewayTypesI18N::Fields::pgtNameI18N), tblPaymentGatewayTypes::Fields::pgtNameI18N) + ; + } + + return Query; +} QVariant IMPL_ORMGET_USER(PaymentGatewayTypes) { Authorization::checkPriv(APICALLBOOM_PARAM, this->privOn(EHTTP_GET, this->moduleBaseName())); diff --git a/Modules/Account/moduleSrc/ORM/PaymentGateways.h b/Modules/Account/moduleSrc/ORM/PaymentGateways.h index 2ca6630a..87d87e9d 100644 --- a/Modules/Account/moduleSrc/ORM/PaymentGateways.h +++ b/Modules/Account/moduleSrc/ORM/PaymentGateways.h @@ -84,6 +84,30 @@ namespace ORM { #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-variable" +namespace tblPaymentGatewayTypes { + constexpr char Name[] = "tblPaymentGatewayTypes"; + + namespace Fields { + TARGOMAN_CREATE_CONSTEXPR(pgtID); + TARGOMAN_CREATE_CONSTEXPR(pgtType); + TARGOMAN_CREATE_CONSTEXPR(pgtName); + TARGOMAN_CREATE_CONSTEXPR(pgtNameI18N); + TARGOMAN_CREATE_CONSTEXPR(pgtMinRequestAmount); + TARGOMAN_CREATE_CONSTEXPR(pgtMaxRequestAmount); + TARGOMAN_CREATE_CONSTEXPR(pgtStatus); + } +} + +namespace tblPaymentGatewayTypesI18N { + constexpr char Name[] = "tblPaymentGatewayTypesI18N"; + + namespace Fields { + TARGOMAN_CREATE_CONSTEXPR(pid); + TARGOMAN_CREATE_CONSTEXPR(language); + TARGOMAN_CREATE_CONSTEXPR(pgtNameI18N); + } +} + namespace tblPaymentGateways { constexpr char Name[] = "tblPaymentGateways"; @@ -119,16 +143,8 @@ namespace tblPaymentGateways { } } +//-- tbl inside namespace tblPaymentGatewayTypes { - constexpr char Name[] = "tblPaymentGatewayTypes"; - - namespace Fields { - TARGOMAN_CREATE_CONSTEXPR(pgtType); - TARGOMAN_CREATE_CONSTEXPR(pgtName); - TARGOMAN_CREATE_CONSTEXPR(pgtMinRequestAmount); - TARGOMAN_CREATE_CONSTEXPR(pgtMaxRequestAmount); - TARGOMAN_CREATE_CONSTEXPR(pgtStatus); - } namespace Relation { // constexpr char AAA[] = "aaa"; @@ -137,16 +153,18 @@ namespace tblPaymentGatewayTypes { namespace Private { const QList ORMFields = { //ColName Type Validation Default UpBy Sort Filter Self Virt PK + { Fields::pgtID, ORM_PRIMARYKEY_16 }, { Fields::pgtType, S(Targoman::API::AccountModule::enuPaymentGatewayType::Type), QFV, QRequired, UPAdmin }, - { Fields::pgtName, S(QString), QFV.unicodeAlNum().maxLenght(64), QRequired, UPAdmin }, + ORM_MULTILANGUAGE(Fields::pgtName, QRequired, UPAdmin), { Fields::pgtMinRequestAmount, S(qreal), QFV.minValue(1), 1, UPAdmin }, { Fields::pgtMaxRequestAmount, S(NULLABLE_TYPE(double)), QFV, QNull, UPAdmin }, { Fields::pgtStatus, ORM_STATUS_FIELD(Targoman::API::AccountModule::enuPaymentGatewayTypeStatus, Targoman::API::AccountModule::enuPaymentGatewayTypeStatus::Active) }, }; const QList Relations = { - //Col Reference Table ForeignCol Rename LeftJoin - { Fields::pgtType, R(AAASchema, tblPaymentGateways::Name), tblPaymentGateways::Fields::pgwType }, + //Col Reference Table ForeignCol Rename LeftJoin + { Fields::pgtType, R(AAASchema, tblPaymentGateways::Name), tblPaymentGateways::Fields::pgwType }, + { Fields::pgtID, R(AAASchema, tblPaymentGatewayTypesI18N::Name), tblPaymentGatewayTypesI18N::Fields::pid }, }; const QList Indexes = { @@ -155,6 +173,7 @@ namespace tblPaymentGatewayTypes { } //namespace Private TAPI_DEFINE_STRUCT(DTO, + SF_ORM_PRIMARYKEY_16 (pgtID), SF_Enum (pgtType, Targoman::API::AccountModule::enuPaymentGatewayType, Targoman::API::AccountModule::enuPaymentGatewayType::COD), SF_QString (pgtName), SF_qreal (pgtMinRequestAmount), @@ -163,6 +182,33 @@ namespace tblPaymentGatewayTypes { ); } +namespace tblPaymentGatewayTypesI18N { + namespace Relation { + } + + namespace Private { + const QList ORMFields = { + //ColName Type Validation Default UpBy Sort Filter Self Virt PK + { Fields::pid, S(quint16), QFV, QRequired, UPNone, true, true, false, false, true }, + { Fields::language, S(QString), QFV, QRequired, UPNone, true, true, false, false, true }, + { Fields::pgtNameI18N, S(QString), QFV, QRequired, UPOwner }, + }; + + const QList Relations = { + }; + + const QList Indexes = { + }; + + } //namespace Private + + TAPI_DEFINE_STRUCT(DTO, + SF_quint16 (pid), + SF_QString (language), + SF_QString (pgtNameI18N) + ); +} + namespace tblPaymentGateways { namespace Relation { constexpr char Type[] = "type"; @@ -243,11 +289,22 @@ namespace tblPaymentGateways { #pragma GCC diagnostic pop +/******************************************************/ +class PaymentGatewayTypesI18N : public intfSQLBasedModule +{ + Q_OBJECT + TARGOMAN_API_SUBMODULE_DEFINE(Account, PaymentGatewayTypesI18N) +}; + +/******************************************************/ class PaymentGatewayTypes : public intfSQLBasedModule { Q_OBJECT TARGOMAN_API_SUBMODULE_DEFINE(Account, PaymentGatewayTypes) +public: + virtual ORMSelectQuery makeSelectQuery(INTFAPICALLBOOM_DECL &APICALLBOOM_PARAM, const QString &_alias = {}, bool _translate = true, bool _isRoot = true); + private slots: QVariant ORMGET_USER("Get payment gateway type information") quint32 ORMCREATE_USER("Create a new payment gateway type by an authorized user") @@ -255,6 +312,7 @@ private slots: bool ORMDELETE_USER("Delete a payment gateway type") }; +/******************************************************/ class PaymentGateways : public intfSQLBasedModule { Q_OBJECT @@ -277,6 +335,7 @@ private slots: ) }; +/******************************************************/ } //namespace ORM } //namespace Targoman::API::AccountModule diff --git a/Modules/Account/moduleSrc/Payment/PaymentLogic.cpp b/Modules/Account/moduleSrc/Payment/PaymentLogic.cpp index b687796a..8f072701 100644 --- a/Modules/Account/moduleSrc/Payment/PaymentLogic.cpp +++ b/Modules/Account/moduleSrc/Payment/PaymentLogic.cpp @@ -107,7 +107,7 @@ QVariantList PaymentLogic::findAvailableGatewayTypes( ORMSelectQuery qry = PaymentGatewayTypes::instance().makeSelectQuery(APICALLBOOM_PARAM) .addCol(tblPaymentGatewayTypes::Fields::pgtType) - .addCol(tblPaymentGatewayTypes::Fields::pgtName) +// .addCol(tblPaymentGatewayTypes::Fields::pgtName) .addCol(DBExpression::VALUE("IFNULL(pgtMinRequestAmount, 0)"), tblPaymentGatewayTypes::Fields::pgtMinRequestAmount) .addCol(DBExpression::VALUE("IFNULL(pgtMaxRequestAmount, 0)"), tblPaymentGatewayTypes::Fields::pgtMaxRequestAmount) .nestedInnerJoin(PaymentGatewayTypes::instance().makeSelectQuery(APICALLBOOM_PARAM) diff --git a/Modules/Advert/functionalTest/testAdvert.hpp b/Modules/Advert/functionalTest/testAdvert.hpp index 88cfa5c7..44b970b9 100644 --- a/Modules/Advert/functionalTest/testAdvert.hpp +++ b/Modules/Advert/functionalTest/testAdvert.hpp @@ -895,6 +895,10 @@ private slots: { { "amount", this->LastPreVoucher.ToPay }, { "domain", "dev.test" }, + }, + {}, + { + { "accept-language: fa" }, } );