ts-glitter 20.6.7 → 20.6.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lowcode/Entry.js +2 -2
- package/lowcode/Entry.ts +2 -2
- package/lowcode/backend-manager/bg-blog.js +617 -621
- package/lowcode/backend-manager/bg-blog.ts +2323 -2325
- package/lowcode/backend-manager/bg-line.js +5 -4
- package/lowcode/backend-manager/bg-line.ts +5 -4
- package/lowcode/backend-manager/bg-list-component.js +9 -0
- package/lowcode/backend-manager/bg-list-component.ts +15 -1
- package/lowcode/backend-manager/bg-notify.js +6 -4
- package/lowcode/backend-manager/bg-notify.ts +6 -4
- package/lowcode/backend-manager/bg-product.js +145 -0
- package/lowcode/backend-manager/bg-product.ts +153 -0
- package/lowcode/backend-manager/bg-sns.js +5 -3
- package/lowcode/backend-manager/bg-sns.ts +5 -3
- package/lowcode/backend-manager/bg-widget.js +92 -4
- package/lowcode/backend-manager/bg-widget.ts +122 -6
- package/lowcode/backend-manager/splitPage.js +0 -39
- package/lowcode/backend-manager/splitPage.ts +0 -40
- package/lowcode/cms-plugin/auto-fcm-advertise.js +17 -5
- package/lowcode/cms-plugin/auto-fcm-advertise.ts +19 -6
- package/lowcode/cms-plugin/auto-fcm-history.js +2732 -0
- package/lowcode/cms-plugin/auto-fcm-history.ts +2995 -0
- package/lowcode/cms-plugin/cms-router.js +5 -0
- package/lowcode/cms-plugin/cms-router.ts +6 -0
- package/lowcode/cms-plugin/filter-options.js +80 -27
- package/lowcode/cms-plugin/filter-options.ts +83 -27
- package/lowcode/cms-plugin/language-backend.js +50 -39
- package/lowcode/cms-plugin/language-backend.ts +109 -95
- package/lowcode/cms-plugin/menus-setting.js +175 -151
- package/lowcode/cms-plugin/menus-setting.ts +620 -591
- package/lowcode/cms-plugin/model/order.d.ts +1 -0
- package/lowcode/cms-plugin/module/data.js +7 -7
- package/lowcode/cms-plugin/module/data.ts +262 -233
- package/lowcode/cms-plugin/module/delivery-html.js +18 -10
- package/lowcode/cms-plugin/module/delivery-html.ts +26 -10
- package/lowcode/cms-plugin/module/order-setting.js +458 -328
- package/lowcode/cms-plugin/module/order-setting.ts +622 -351
- package/lowcode/cms-plugin/module/product-excel.js +1 -1
- package/lowcode/cms-plugin/module/product-excel.ts +2 -1
- package/lowcode/cms-plugin/order/order-module.js +90 -1
- package/lowcode/cms-plugin/order/order-module.ts +106 -1
- package/lowcode/cms-plugin/pos-pages/payment-page.js +11 -8
- package/lowcode/cms-plugin/pos-pages/payment-page.ts +28 -15
- package/lowcode/cms-plugin/pos-pages/products-page.js +0 -39
- package/lowcode/cms-plugin/pos-pages/products-page.ts +0 -40
- package/lowcode/cms-plugin/shopping-collections.ts +1 -3
- package/lowcode/cms-plugin/shopping-finance-setting.js +19 -80
- package/lowcode/cms-plugin/shopping-finance-setting.ts +19 -87
- package/lowcode/cms-plugin/shopping-order-manager.js +122 -38
- package/lowcode/cms-plugin/shopping-order-manager.ts +160 -58
- package/lowcode/cms-plugin/shopping-product-setting.js +364 -376
- package/lowcode/cms-plugin/shopping-product-setting.ts +406 -415
- package/lowcode/cms-plugin/shopping-setting-advance.js +57 -16
- package/lowcode/cms-plugin/shopping-setting-advance.ts +69 -18
- package/lowcode/cms-plugin/user/user-module.js +2 -43
- package/lowcode/cms-plugin/user/user-module.ts +2 -46
- package/lowcode/cms-plugin/user-list.js +4 -6
- package/lowcode/cms-plugin/user-list.ts +35 -38
- package/lowcode/css/editor.css +42 -3
- package/lowcode/glitter-base/global/language.js +6 -1
- package/lowcode/glitter-base/global/language.ts +10 -4
- package/lowcode/glitter-base/global/payment-config.js +19 -16
- package/lowcode/glitter-base/global/payment-config.ts +22 -16
- package/lowcode/glitter-base/global/shipment-config.js +6 -5
- package/lowcode/glitter-base/global/shipment-config.ts +12 -10
- package/lowcode/glitter-base/route/fcm.js +21 -1
- package/lowcode/glitter-base/route/fcm.ts +22 -2
- package/lowcode/glitter-base/route/shopping.js +8 -32
- package/lowcode/glitter-base/route/shopping.ts +10 -33
- package/lowcode/glitter-base/route/user.js +11 -2
- package/lowcode/glitter-base/route/user.ts +23 -12
- package/lowcode/jspage/function-page/setting_editor.js +9 -0
- package/lowcode/jspage/function-page/setting_editor.ts +9 -0
- package/lowcode/public-components/blogs/list.js +223 -195
- package/lowcode/public-components/blogs/list.ts +383 -352
- package/lowcode/public-components/product/product-list.js +8 -4
- package/lowcode/public-components/product/product-list.ts +9 -4
- package/lowcode/public-components/terms-related/index.js +1 -1
- package/lowcode/public-components/terms-related/index.ts +1 -1
- package/lowcode/public-components/user-manager/um-login.js +1 -1
- package/lowcode/public-components/user-manager/um-login.ts +2 -2
- package/lowcode/public-components/user-manager/um-order.js +41 -5
- package/lowcode/public-components/user-manager/um-order.ts +58 -20
- package/lowcode/public-components/user-manager/um-voucher.ts +2 -2
- package/nhi4veq3gk.json +1 -0
- package/package.json +1 -1
- package/src/Language.d.ts +2 -0
- package/src/Language.js +66 -65
- package/src/Language.js.map +1 -1
- package/src/Language.ts +719 -715
- package/src/api-public/config/shipment-config.js +3 -2
- package/src/api-public/config/shipment-config.js.map +1 -1
- package/src/api-public/config/shipment-config.ts +3 -2
- package/src/api-public/controllers/ai-chat.js.map +1 -1
- package/src/api-public/controllers/ai-chat.ts +1 -2
- package/src/api-public/controllers/fcm.js +23 -58
- package/src/api-public/controllers/fcm.js.map +1 -1
- package/src/api-public/controllers/fcm.ts +28 -56
- package/src/api-public/controllers/shop.js +7 -1
- package/src/api-public/controllers/shop.js.map +1 -1
- package/src/api-public/controllers/shop.ts +17 -10
- package/src/api-public/controllers/user.js +1 -0
- package/src/api-public/controllers/user.js.map +1 -1
- package/src/api-public/controllers/user.ts +2 -0
- package/src/api-public/services/auto-send-email.js +247 -187
- package/src/api-public/services/auto-send-email.js.map +1 -1
- package/src/api-public/services/auto-send-email.ts +568 -505
- package/src/api-public/services/delivery.js +1 -1
- package/src/api-public/services/delivery.js.map +1 -1
- package/src/api-public/services/delivery.ts +6 -5
- package/src/api-public/services/financial-service.js +1 -2
- package/src/api-public/services/financial-service.js.map +1 -1
- package/src/api-public/services/financial-service.ts +4 -6
- package/src/api-public/services/manager.d.ts +4 -3
- package/src/api-public/services/manager.js +8 -12
- package/src/api-public/services/manager.js.map +1 -1
- package/src/api-public/services/manager.ts +57 -59
- package/src/api-public/services/model/handlePaymentTransaction.d.ts +1 -1
- package/src/api-public/services/model/handlePaymentTransaction.js +23 -3
- package/src/api-public/services/model/handlePaymentTransaction.js.map +1 -1
- package/src/api-public/services/model/handlePaymentTransaction.ts +25 -36
- package/src/api-public/services/schedule.d.ts +1 -0
- package/src/api-public/services/schedule.js +27 -0
- package/src/api-public/services/schedule.js.map +1 -1
- package/src/api-public/services/schedule.ts +30 -0
- package/src/api-public/services/shopping.d.ts +22 -2
- package/src/api-public/services/shopping.js +362 -90
- package/src/api-public/services/shopping.js.map +1 -1
- package/src/api-public/services/shopping.ts +481 -134
- package/src/api-public/services/user.d.ts +1 -0
- package/src/api-public/services/user.js +36 -16
- package/src/api-public/services/user.js.map +1 -1
- package/src/api-public/services/user.ts +42 -23
- package/src/api-public/services/workers.js +3 -3
- package/src/api-public/services/workers.js.map +1 -1
- package/src/api-public/services/workers.ts +103 -103
- package/src/app-project/serverless/src/modules/database.js +1 -1
- package/src/app-project/serverless/src/modules/database.js.map +1 -1
- package/src/app-project/serverless/src/modules/database.ts +171 -171
- package/src/controllers/template.d.ts +1 -1
- package/src/controllers/template.js +16 -16
- package/src/controllers/template.js.map +1 -1
- package/src/controllers/template.ts +98 -84
- package/src/modules/database.js +3 -1
- package/src/modules/database.js.map +1 -1
- package/src/modules/database.ts +185 -181
- package/src/modules/firebase.d.ts +17 -0
- package/src/modules/firebase.js +126 -0
- package/src/modules/firebase.js.map +1 -1
- package/src/modules/firebase.ts +169 -0
- package/src/public-config-initial/auto-fcm.js +8 -2
- package/src/public-config-initial/auto-fcm.js.map +1 -1
- package/src/public-config-initial/auto-fcm.ts +15 -6
- package/src/services/app.d.ts +2 -1
- package/src/services/app.js.map +1 -1
- package/src/services/app.ts +2 -1
- package/src/services/template.d.ts +3 -2
- package/src/services/template.js +2 -1
- package/src/services/template.js.map +1 -1
- package/src/services/template.ts +13 -20
|
@@ -8,215 +8,215 @@ const TAG = '[Database]';
|
|
|
8
8
|
let pool: mysql.Pool;
|
|
9
9
|
|
|
10
10
|
const createPool = async () => {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
} catch (err) {
|
|
29
|
-
logger.error(TAG, 'Failed to create connection pool for mysql because ' + err);
|
|
30
|
-
throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to create connection pool.');
|
|
11
|
+
const logger = new Logger();
|
|
12
|
+
pool = mysql.createPool({
|
|
13
|
+
connectionLimit: config.DB_CONN_LIMIT,
|
|
14
|
+
queueLimit: config.DB_QUEUE_LIMIT,
|
|
15
|
+
host: config.DB_URL,
|
|
16
|
+
port: config.DB_PORT,
|
|
17
|
+
user: config.DB_USER,
|
|
18
|
+
password: config.DB_PWD,
|
|
19
|
+
supportBigNumbers: true,
|
|
20
|
+
});
|
|
21
|
+
try {
|
|
22
|
+
const connection = await pool.getConnection();
|
|
23
|
+
if (connection) {
|
|
24
|
+
connection.release();
|
|
25
|
+
config.DB_SHOW_INFO && logger.info(TAG, 'Pool has been created. (function: createPool)');
|
|
26
|
+
return pool;
|
|
31
27
|
}
|
|
28
|
+
} catch (err) {
|
|
29
|
+
logger.error(TAG, 'Failed to create connection pool for mysql because ' + err);
|
|
30
|
+
throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to create connection pool.');
|
|
31
|
+
}
|
|
32
32
|
};
|
|
33
33
|
|
|
34
34
|
const getConnection = async (connPool: null | mysql.Pool): Promise<mysql.PoolConnection> => {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
35
|
+
const logger = new Logger();
|
|
36
|
+
const _pool = connPool || pool;
|
|
37
|
+
try {
|
|
38
|
+
const connection = await _pool.getConnection();
|
|
39
|
+
return connection;
|
|
40
|
+
} catch (err) {
|
|
41
|
+
logger.error(TAG, 'Failed to get connection from pool because ' + err);
|
|
42
|
+
throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to get connection from pool.');
|
|
43
|
+
}
|
|
44
44
|
};
|
|
45
45
|
|
|
46
46
|
const execute = async (sql: string, params: any[]): Promise<any> => {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
47
|
+
const logger = new Logger();
|
|
48
|
+
const TAG = '[Database][Execute]';
|
|
49
|
+
if (params.indexOf(undefined) !== -1) {
|
|
50
|
+
logger.error(TAG, 'Failed to exect statement ' + sql + ' because params=null');
|
|
51
|
+
throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to exect statement because params=null');
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
const [results] = await pool.execute(sql, params);
|
|
55
|
+
return results;
|
|
56
|
+
} catch (err) {
|
|
57
|
+
logger.error(TAG, 'Failed to exect statement ' + sql + ' because ' + err);
|
|
58
|
+
throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to execute statement.');
|
|
59
|
+
}
|
|
60
60
|
};
|
|
61
61
|
|
|
62
62
|
export const limit = (map: any) => {
|
|
63
|
-
|
|
63
|
+
return ` limit ${parseInt(map.page, 10) * parseInt(map.limit, 10)}, ${parseInt(map.limit, 10)} `;
|
|
64
64
|
};
|
|
65
65
|
const query = async (sql: string, params: unknown[]): Promise<any> => {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
66
|
+
const logger = new Logger();
|
|
67
|
+
const TAG = '[Database][Query]';
|
|
68
|
+
try {
|
|
69
|
+
const [results] = await pool.query(sql, params);
|
|
70
|
+
return results;
|
|
71
|
+
} catch (err) {
|
|
72
|
+
logger.error(TAG, 'Failed to query statement ' + sql + ' because ' + err);
|
|
73
|
+
throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to execute statement.');
|
|
74
|
+
}
|
|
75
75
|
};
|
|
76
76
|
|
|
77
77
|
export const queryLambada = async (
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
78
|
+
cf: {
|
|
79
|
+
database?: string;
|
|
80
|
+
},
|
|
81
|
+
fun: (v: { query(sql: string, params: unknown[]): Promise<any> }) => any
|
|
82
82
|
) => {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}
|
|
103
|
-
const data = await fun({
|
|
104
|
-
query(sql: string, params: unknown[]): Promise<any> {
|
|
105
|
-
return new Promise<any>(async (resolve, reject) => {
|
|
106
|
-
const logger = new Logger();
|
|
107
|
-
const TAG = '[Database][Query]';
|
|
108
|
-
try {
|
|
109
|
-
const [results] = await sp.query(sql, params);
|
|
110
|
-
resolve(results);
|
|
111
|
-
} catch (err) {
|
|
112
|
-
logger.error(TAG, 'Failed to query statement ' + sql + ' because ' + err);
|
|
113
|
-
reject(err);
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
},
|
|
117
|
-
});
|
|
118
|
-
//Close connection
|
|
119
|
-
connection.release();
|
|
120
|
-
sp.end();
|
|
121
|
-
return data;
|
|
122
|
-
} catch (err) {
|
|
123
|
-
logger.error(TAG, 'Failed to create connection pool for mysql because ' + err);
|
|
124
|
-
throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to create connection pool.');
|
|
83
|
+
const logger = new Logger();
|
|
84
|
+
const cs: any = {
|
|
85
|
+
connectionLimit: config.DB_CONN_LIMIT,
|
|
86
|
+
queueLimit: config.DB_QUEUE_LIMIT,
|
|
87
|
+
host: config.DB_URL,
|
|
88
|
+
port: config.DB_PORT,
|
|
89
|
+
user: config.DB_USER,
|
|
90
|
+
password: config.DB_PWD,
|
|
91
|
+
supportBigNumbers: true,
|
|
92
|
+
};
|
|
93
|
+
Object.keys(cf).map(key => {
|
|
94
|
+
cs[key] = (cf as any)[key];
|
|
95
|
+
});
|
|
96
|
+
const sp = mysql.createPool(cs);
|
|
97
|
+
try {
|
|
98
|
+
const connection = await sp.getConnection();
|
|
99
|
+
if (connection) {
|
|
100
|
+
connection.release();
|
|
101
|
+
config.DB_SHOW_INFO && logger.info(TAG, 'Pool has been created. (function: queryLambada)');
|
|
125
102
|
}
|
|
103
|
+
const data = await fun({
|
|
104
|
+
query(sql: string, params: unknown[]): Promise<any> {
|
|
105
|
+
return new Promise<any>(async (resolve, reject) => {
|
|
106
|
+
const logger = new Logger();
|
|
107
|
+
const TAG = '[Database][Query]';
|
|
108
|
+
try {
|
|
109
|
+
const [results] = await sp.query(sql, params);
|
|
110
|
+
resolve(results);
|
|
111
|
+
} catch (err) {
|
|
112
|
+
logger.error(TAG, 'Failed to query statement ' + sql + ' because ' + err);
|
|
113
|
+
reject(err);
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
},
|
|
117
|
+
});
|
|
118
|
+
//Close connection
|
|
119
|
+
connection.release();
|
|
120
|
+
sp.end();
|
|
121
|
+
return data;
|
|
122
|
+
} catch (err) {
|
|
123
|
+
logger.error(TAG, 'Failed to create connection pool for mysql because ' + err);
|
|
124
|
+
throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to create connection pool.');
|
|
125
|
+
}
|
|
126
126
|
};
|
|
127
127
|
|
|
128
128
|
class Transaction {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
129
|
+
private trans: any;
|
|
130
|
+
connectionId: any;
|
|
131
|
+
private TAG: any;
|
|
132
132
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
}
|
|
133
|
+
static async build(): Promise<Transaction> {
|
|
134
|
+
const logger = new Logger();
|
|
135
|
+
const Trans = new Transaction();
|
|
136
|
+
try {
|
|
137
|
+
Trans.trans = await getConnection(null);
|
|
138
|
+
Trans.TAG = `[Database][Transaction][CID:${Trans.trans.threadId}]`;
|
|
139
|
+
Trans.trans.beginTransaction();
|
|
140
|
+
return Trans;
|
|
141
|
+
} catch (err) {
|
|
142
|
+
logger.error(Trans.TAG, 'Failed to create transaction when call transaction.init because ' + err);
|
|
143
|
+
Trans.release();
|
|
144
|
+
throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to create transaction when connecting database.');
|
|
146
145
|
}
|
|
146
|
+
}
|
|
147
147
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
}
|
|
153
|
-
try {
|
|
154
|
-
const [result] = await this.trans.query(sql, params);
|
|
155
|
-
return result;
|
|
156
|
-
} catch (err) {
|
|
157
|
-
//rollback transaction and release connection when error occurred.
|
|
158
|
-
logger.error(this.TAG, `Failed to execute statement ${sql} from transaction because ${err}`);
|
|
159
|
-
await this.release();
|
|
160
|
-
this.trans = null;
|
|
161
|
-
throw err;
|
|
162
|
-
}
|
|
148
|
+
public async execute(sql: string, params: any[] | any): Promise<any> {
|
|
149
|
+
const logger = new Logger();
|
|
150
|
+
if (!this.trans) {
|
|
151
|
+
throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Can not use Transaction class without build.');
|
|
163
152
|
}
|
|
153
|
+
try {
|
|
154
|
+
const [result] = await this.trans.query(sql, params);
|
|
155
|
+
return result;
|
|
156
|
+
} catch (err) {
|
|
157
|
+
//rollback transaction and release connection when error occurred.
|
|
158
|
+
logger.error(this.TAG, `Failed to execute statement ${sql} from transaction because ${err}`);
|
|
159
|
+
await this.release();
|
|
160
|
+
this.trans = null;
|
|
161
|
+
throw err;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
164
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
}
|
|
165
|
+
async commit() {
|
|
166
|
+
const logger = new Logger();
|
|
167
|
+
try {
|
|
168
|
+
await this.trans.commit();
|
|
169
|
+
await this.trans.release();
|
|
170
|
+
config.DB_SHOW_INFO && logger.info(this.TAG, 'Commited successfully');
|
|
171
|
+
} catch (err) {
|
|
172
|
+
logger.error(this.TAG, 'Failed to commit from transaction because ' + err);
|
|
173
|
+
await this.trans.rollback();
|
|
174
|
+
await this.trans.destroy();
|
|
175
|
+
throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to commit from transaction.');
|
|
177
176
|
}
|
|
177
|
+
}
|
|
178
178
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
}
|
|
179
|
+
async release() {
|
|
180
|
+
const logger = new Logger();
|
|
181
|
+
try {
|
|
182
|
+
if (this.trans) {
|
|
183
|
+
await this.trans.rollback();
|
|
184
|
+
// 如果transaction已經被rollback且也已release回pool時,會變成一般性的connection(autocommit=1)
|
|
185
|
+
// 導致其他併發的Promise使用到這個一般性的connection進行execute的動作,造成隱性commit的行為
|
|
186
|
+
// 為了避免這個狀況,所以當使用者手動釋放transaction時,我們會將它destroy掉,排除隱性commit的可能性
|
|
187
|
+
await this.trans.rollback();
|
|
188
|
+
await this.trans.destroy();
|
|
189
|
+
this.trans = null;
|
|
190
|
+
config.DB_SHOW_INFO && logger.info(this.TAG, 'Release successfully');
|
|
191
|
+
}
|
|
192
|
+
} catch (err) {
|
|
193
|
+
logger.error(this.TAG, 'Failed to commit from transaction because ' + err);
|
|
194
|
+
throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to release transaction.');
|
|
196
195
|
}
|
|
196
|
+
}
|
|
197
197
|
}
|
|
198
198
|
|
|
199
199
|
const getPagination = (sql: string, page: number, pageCount: number) => {
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
200
|
+
let newSql = sql;
|
|
201
|
+
newSql += ' LIMIT ' + pageCount + ' OFFSET ' + (page - 1) * pageCount;
|
|
202
|
+
return newSql;
|
|
203
203
|
};
|
|
204
204
|
|
|
205
205
|
const escape = (parameter: any) => {
|
|
206
|
-
|
|
206
|
+
return mysql.escape(parameter);
|
|
207
207
|
};
|
|
208
208
|
|
|
209
209
|
const checkExists = async (sql: string) => {
|
|
210
|
-
|
|
210
|
+
return (await query('select count(1) from ' + sql, []))[0]['count(1)'] > 0;
|
|
211
211
|
};
|
|
212
212
|
|
|
213
213
|
export default {
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
214
|
+
createPool,
|
|
215
|
+
execute,
|
|
216
|
+
query,
|
|
217
|
+
Transaction,
|
|
218
|
+
getPagination,
|
|
219
|
+
escape,
|
|
220
|
+
queryLambada,
|
|
221
|
+
checkExists,
|
|
222
222
|
};
|
|
@@ -14,11 +14,11 @@ const seo_config_js_1 = require("../seo-config.js");
|
|
|
14
14
|
const router = express_1.default.Router();
|
|
15
15
|
router.post('/', async (req, resp) => {
|
|
16
16
|
try {
|
|
17
|
-
if (!await ut_permission_js_1.UtPermission.isManager(req)) {
|
|
17
|
+
if (!(await ut_permission_js_1.UtPermission.isManager(req))) {
|
|
18
18
|
throw exception_js_1.default.BadRequestError('Forbidden', 'No Permission.', null);
|
|
19
19
|
}
|
|
20
20
|
else {
|
|
21
|
-
return response_1.default.succ(resp, { result:
|
|
21
|
+
return response_1.default.succ(resp, { result: await new template_1.Template(req.body.token).createPage(req.body) });
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
catch (err) {
|
|
@@ -27,12 +27,12 @@ router.post('/', async (req, resp) => {
|
|
|
27
27
|
});
|
|
28
28
|
router.put('/', async (req, resp) => {
|
|
29
29
|
try {
|
|
30
|
-
if (!await ut_permission_js_1.UtPermission.isManager(req)) {
|
|
30
|
+
if (!(await ut_permission_js_1.UtPermission.isManager(req))) {
|
|
31
31
|
throw exception_js_1.default.BadRequestError('Forbidden', 'No Permission.', null);
|
|
32
32
|
}
|
|
33
33
|
else {
|
|
34
34
|
req.body.language = req.headers['language'];
|
|
35
|
-
return response_1.default.succ(resp, { result:
|
|
35
|
+
return response_1.default.succ(resp, { result: await new template_1.Template(req.body.token).updatePage(req.body) });
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
catch (err) {
|
|
@@ -41,12 +41,12 @@ router.put('/', async (req, resp) => {
|
|
|
41
41
|
});
|
|
42
42
|
router.delete('/', async (req, resp) => {
|
|
43
43
|
try {
|
|
44
|
-
if (!await ut_permission_js_1.UtPermission.isManager(req)) {
|
|
44
|
+
if (!(await ut_permission_js_1.UtPermission.isManager(req))) {
|
|
45
45
|
throw exception_js_1.default.BadRequestError('Forbidden', 'No Permission.', null);
|
|
46
46
|
}
|
|
47
47
|
else {
|
|
48
48
|
req.body.language = req.headers['language'];
|
|
49
|
-
return response_1.default.succ(resp, { result:
|
|
49
|
+
return response_1.default.succ(resp, { result: await new template_1.Template(req.body.token).deletePage(req.body) });
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
catch (err) {
|
|
@@ -60,7 +60,7 @@ router.get('/', async (req, resp) => {
|
|
|
60
60
|
const seo = await seo_config_js_1.SeoConfig.seoDetail(req.query.appName, req, resp);
|
|
61
61
|
let language = req.headers['language'];
|
|
62
62
|
req.query.language = language;
|
|
63
|
-
const result =
|
|
63
|
+
const result = await new template_1.Template(req.body.token).getPage(req.query);
|
|
64
64
|
let redirect = '';
|
|
65
65
|
if (result.length === 0) {
|
|
66
66
|
try {
|
|
@@ -68,11 +68,12 @@ router.get('/', async (req, resp) => {
|
|
|
68
68
|
FROM \`${config_1.saasConfig.SAAS_NAME}\`.app_config
|
|
69
69
|
where \`${config_1.saasConfig.SAAS_NAME}\`.app_config.appName = ${database_1.default.escape(req.query.appName)}
|
|
70
70
|
`, []))[0]['config'];
|
|
71
|
-
if (config &&
|
|
71
|
+
if (config &&
|
|
72
|
+
(await database_1.default.execute(`SELECT count(1)
|
|
72
73
|
FROM \`${config_1.saasConfig.SAAS_NAME}\`.page_config
|
|
73
74
|
where \`${config_1.saasConfig.SAAS_NAME}\`.page_config.appName = ${database_1.default.escape(req.query.appName)}
|
|
74
75
|
and tag = ${database_1.default.escape(config['homePage'])}
|
|
75
|
-
`, []))[0][
|
|
76
|
+
`, []))[0]['count(1)'] === 1) {
|
|
76
77
|
redirect = config['homePage'];
|
|
77
78
|
}
|
|
78
79
|
else {
|
|
@@ -82,8 +83,7 @@ router.get('/', async (req, resp) => {
|
|
|
82
83
|
`, []))[0]['tag'];
|
|
83
84
|
}
|
|
84
85
|
}
|
|
85
|
-
catch (e) {
|
|
86
|
-
}
|
|
86
|
+
catch (e) { }
|
|
87
87
|
}
|
|
88
88
|
let preload_data = {};
|
|
89
89
|
if (req.query.preload) {
|
|
@@ -93,7 +93,7 @@ router.get('/', async (req, resp) => {
|
|
|
93
93
|
result: result,
|
|
94
94
|
redirect: redirect,
|
|
95
95
|
preload_data: preload_data,
|
|
96
|
-
seo_config: seo.seo_detail
|
|
96
|
+
seo_config: seo.seo_detail,
|
|
97
97
|
});
|
|
98
98
|
}
|
|
99
99
|
catch (err) {
|
|
@@ -103,16 +103,16 @@ router.get('/', async (req, resp) => {
|
|
|
103
103
|
});
|
|
104
104
|
router.post('/create_template', async (req, resp) => {
|
|
105
105
|
try {
|
|
106
|
-
if (!await ut_permission_js_1.UtPermission.isManager(req)) {
|
|
106
|
+
if (!(await ut_permission_js_1.UtPermission.isManager(req))) {
|
|
107
107
|
throw exception_js_1.default.BadRequestError('Forbidden', 'No Permission.', null);
|
|
108
108
|
}
|
|
109
109
|
else {
|
|
110
110
|
return response_1.default.succ(resp, {
|
|
111
|
-
result:
|
|
111
|
+
result: await new template_1.Template(req.body.token).postTemplate({
|
|
112
112
|
appName: req.body.appName,
|
|
113
113
|
data: req.body.config,
|
|
114
|
-
tag: req.body.tag
|
|
115
|
-
})
|
|
114
|
+
tag: req.body.tag,
|
|
115
|
+
}),
|
|
116
116
|
});
|
|
117
117
|
}
|
|
118
118
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["template.ts"],"names":[],"mappings":";;;;AAAA,sDAA8B;AAC9B,mEAA2C;AAC3C,mEAAqC;AACrC,
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["template.ts"],"names":[],"mappings":"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"}
|