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.
Files changed (160) hide show
  1. package/lowcode/Entry.js +2 -2
  2. package/lowcode/Entry.ts +2 -2
  3. package/lowcode/backend-manager/bg-blog.js +617 -621
  4. package/lowcode/backend-manager/bg-blog.ts +2323 -2325
  5. package/lowcode/backend-manager/bg-line.js +5 -4
  6. package/lowcode/backend-manager/bg-line.ts +5 -4
  7. package/lowcode/backend-manager/bg-list-component.js +9 -0
  8. package/lowcode/backend-manager/bg-list-component.ts +15 -1
  9. package/lowcode/backend-manager/bg-notify.js +6 -4
  10. package/lowcode/backend-manager/bg-notify.ts +6 -4
  11. package/lowcode/backend-manager/bg-product.js +145 -0
  12. package/lowcode/backend-manager/bg-product.ts +153 -0
  13. package/lowcode/backend-manager/bg-sns.js +5 -3
  14. package/lowcode/backend-manager/bg-sns.ts +5 -3
  15. package/lowcode/backend-manager/bg-widget.js +92 -4
  16. package/lowcode/backend-manager/bg-widget.ts +122 -6
  17. package/lowcode/backend-manager/splitPage.js +0 -39
  18. package/lowcode/backend-manager/splitPage.ts +0 -40
  19. package/lowcode/cms-plugin/auto-fcm-advertise.js +17 -5
  20. package/lowcode/cms-plugin/auto-fcm-advertise.ts +19 -6
  21. package/lowcode/cms-plugin/auto-fcm-history.js +2732 -0
  22. package/lowcode/cms-plugin/auto-fcm-history.ts +2995 -0
  23. package/lowcode/cms-plugin/cms-router.js +5 -0
  24. package/lowcode/cms-plugin/cms-router.ts +6 -0
  25. package/lowcode/cms-plugin/filter-options.js +80 -27
  26. package/lowcode/cms-plugin/filter-options.ts +83 -27
  27. package/lowcode/cms-plugin/language-backend.js +50 -39
  28. package/lowcode/cms-plugin/language-backend.ts +109 -95
  29. package/lowcode/cms-plugin/menus-setting.js +175 -151
  30. package/lowcode/cms-plugin/menus-setting.ts +620 -591
  31. package/lowcode/cms-plugin/model/order.d.ts +1 -0
  32. package/lowcode/cms-plugin/module/data.js +7 -7
  33. package/lowcode/cms-plugin/module/data.ts +262 -233
  34. package/lowcode/cms-plugin/module/delivery-html.js +18 -10
  35. package/lowcode/cms-plugin/module/delivery-html.ts +26 -10
  36. package/lowcode/cms-plugin/module/order-setting.js +458 -328
  37. package/lowcode/cms-plugin/module/order-setting.ts +622 -351
  38. package/lowcode/cms-plugin/module/product-excel.js +1 -1
  39. package/lowcode/cms-plugin/module/product-excel.ts +2 -1
  40. package/lowcode/cms-plugin/order/order-module.js +90 -1
  41. package/lowcode/cms-plugin/order/order-module.ts +106 -1
  42. package/lowcode/cms-plugin/pos-pages/payment-page.js +11 -8
  43. package/lowcode/cms-plugin/pos-pages/payment-page.ts +28 -15
  44. package/lowcode/cms-plugin/pos-pages/products-page.js +0 -39
  45. package/lowcode/cms-plugin/pos-pages/products-page.ts +0 -40
  46. package/lowcode/cms-plugin/shopping-collections.ts +1 -3
  47. package/lowcode/cms-plugin/shopping-finance-setting.js +19 -80
  48. package/lowcode/cms-plugin/shopping-finance-setting.ts +19 -87
  49. package/lowcode/cms-plugin/shopping-order-manager.js +122 -38
  50. package/lowcode/cms-plugin/shopping-order-manager.ts +160 -58
  51. package/lowcode/cms-plugin/shopping-product-setting.js +364 -376
  52. package/lowcode/cms-plugin/shopping-product-setting.ts +406 -415
  53. package/lowcode/cms-plugin/shopping-setting-advance.js +57 -16
  54. package/lowcode/cms-plugin/shopping-setting-advance.ts +69 -18
  55. package/lowcode/cms-plugin/user/user-module.js +2 -43
  56. package/lowcode/cms-plugin/user/user-module.ts +2 -46
  57. package/lowcode/cms-plugin/user-list.js +4 -6
  58. package/lowcode/cms-plugin/user-list.ts +35 -38
  59. package/lowcode/css/editor.css +42 -3
  60. package/lowcode/glitter-base/global/language.js +6 -1
  61. package/lowcode/glitter-base/global/language.ts +10 -4
  62. package/lowcode/glitter-base/global/payment-config.js +19 -16
  63. package/lowcode/glitter-base/global/payment-config.ts +22 -16
  64. package/lowcode/glitter-base/global/shipment-config.js +6 -5
  65. package/lowcode/glitter-base/global/shipment-config.ts +12 -10
  66. package/lowcode/glitter-base/route/fcm.js +21 -1
  67. package/lowcode/glitter-base/route/fcm.ts +22 -2
  68. package/lowcode/glitter-base/route/shopping.js +8 -32
  69. package/lowcode/glitter-base/route/shopping.ts +10 -33
  70. package/lowcode/glitter-base/route/user.js +11 -2
  71. package/lowcode/glitter-base/route/user.ts +23 -12
  72. package/lowcode/jspage/function-page/setting_editor.js +9 -0
  73. package/lowcode/jspage/function-page/setting_editor.ts +9 -0
  74. package/lowcode/public-components/blogs/list.js +223 -195
  75. package/lowcode/public-components/blogs/list.ts +383 -352
  76. package/lowcode/public-components/product/product-list.js +8 -4
  77. package/lowcode/public-components/product/product-list.ts +9 -4
  78. package/lowcode/public-components/terms-related/index.js +1 -1
  79. package/lowcode/public-components/terms-related/index.ts +1 -1
  80. package/lowcode/public-components/user-manager/um-login.js +1 -1
  81. package/lowcode/public-components/user-manager/um-login.ts +2 -2
  82. package/lowcode/public-components/user-manager/um-order.js +41 -5
  83. package/lowcode/public-components/user-manager/um-order.ts +58 -20
  84. package/lowcode/public-components/user-manager/um-voucher.ts +2 -2
  85. package/nhi4veq3gk.json +1 -0
  86. package/package.json +1 -1
  87. package/src/Language.d.ts +2 -0
  88. package/src/Language.js +66 -65
  89. package/src/Language.js.map +1 -1
  90. package/src/Language.ts +719 -715
  91. package/src/api-public/config/shipment-config.js +3 -2
  92. package/src/api-public/config/shipment-config.js.map +1 -1
  93. package/src/api-public/config/shipment-config.ts +3 -2
  94. package/src/api-public/controllers/ai-chat.js.map +1 -1
  95. package/src/api-public/controllers/ai-chat.ts +1 -2
  96. package/src/api-public/controllers/fcm.js +23 -58
  97. package/src/api-public/controllers/fcm.js.map +1 -1
  98. package/src/api-public/controllers/fcm.ts +28 -56
  99. package/src/api-public/controllers/shop.js +7 -1
  100. package/src/api-public/controllers/shop.js.map +1 -1
  101. package/src/api-public/controllers/shop.ts +17 -10
  102. package/src/api-public/controllers/user.js +1 -0
  103. package/src/api-public/controllers/user.js.map +1 -1
  104. package/src/api-public/controllers/user.ts +2 -0
  105. package/src/api-public/services/auto-send-email.js +247 -187
  106. package/src/api-public/services/auto-send-email.js.map +1 -1
  107. package/src/api-public/services/auto-send-email.ts +568 -505
  108. package/src/api-public/services/delivery.js +1 -1
  109. package/src/api-public/services/delivery.js.map +1 -1
  110. package/src/api-public/services/delivery.ts +6 -5
  111. package/src/api-public/services/financial-service.js +1 -2
  112. package/src/api-public/services/financial-service.js.map +1 -1
  113. package/src/api-public/services/financial-service.ts +4 -6
  114. package/src/api-public/services/manager.d.ts +4 -3
  115. package/src/api-public/services/manager.js +8 -12
  116. package/src/api-public/services/manager.js.map +1 -1
  117. package/src/api-public/services/manager.ts +57 -59
  118. package/src/api-public/services/model/handlePaymentTransaction.d.ts +1 -1
  119. package/src/api-public/services/model/handlePaymentTransaction.js +23 -3
  120. package/src/api-public/services/model/handlePaymentTransaction.js.map +1 -1
  121. package/src/api-public/services/model/handlePaymentTransaction.ts +25 -36
  122. package/src/api-public/services/schedule.d.ts +1 -0
  123. package/src/api-public/services/schedule.js +27 -0
  124. package/src/api-public/services/schedule.js.map +1 -1
  125. package/src/api-public/services/schedule.ts +30 -0
  126. package/src/api-public/services/shopping.d.ts +22 -2
  127. package/src/api-public/services/shopping.js +362 -90
  128. package/src/api-public/services/shopping.js.map +1 -1
  129. package/src/api-public/services/shopping.ts +481 -134
  130. package/src/api-public/services/user.d.ts +1 -0
  131. package/src/api-public/services/user.js +36 -16
  132. package/src/api-public/services/user.js.map +1 -1
  133. package/src/api-public/services/user.ts +42 -23
  134. package/src/api-public/services/workers.js +3 -3
  135. package/src/api-public/services/workers.js.map +1 -1
  136. package/src/api-public/services/workers.ts +103 -103
  137. package/src/app-project/serverless/src/modules/database.js +1 -1
  138. package/src/app-project/serverless/src/modules/database.js.map +1 -1
  139. package/src/app-project/serverless/src/modules/database.ts +171 -171
  140. package/src/controllers/template.d.ts +1 -1
  141. package/src/controllers/template.js +16 -16
  142. package/src/controllers/template.js.map +1 -1
  143. package/src/controllers/template.ts +98 -84
  144. package/src/modules/database.js +3 -1
  145. package/src/modules/database.js.map +1 -1
  146. package/src/modules/database.ts +185 -181
  147. package/src/modules/firebase.d.ts +17 -0
  148. package/src/modules/firebase.js +126 -0
  149. package/src/modules/firebase.js.map +1 -1
  150. package/src/modules/firebase.ts +169 -0
  151. package/src/public-config-initial/auto-fcm.js +8 -2
  152. package/src/public-config-initial/auto-fcm.js.map +1 -1
  153. package/src/public-config-initial/auto-fcm.ts +15 -6
  154. package/src/services/app.d.ts +2 -1
  155. package/src/services/app.js.map +1 -1
  156. package/src/services/app.ts +2 -1
  157. package/src/services/template.d.ts +3 -2
  158. package/src/services/template.js +2 -1
  159. package/src/services/template.js.map +1 -1
  160. package/src/services/template.ts +13 -20
@@ -7,224 +7,228 @@ const TAG = '[Database]';
7
7
  let pool: mysql.Pool;
8
8
 
9
9
  const createPool = async () => {
10
- const logger = new Logger();
11
- pool = mysql.createPool({
12
- connectionLimit: config.DB_CONN_LIMIT,
13
- queueLimit: config.DB_QUEUE_LIMIT,
14
- host: config.DB_URL,
15
- port: config.DB_PORT,
16
- user: config.DB_USER,
17
- password: config.DB_PWD,
18
- supportBigNumbers: true,
19
- });
20
- try {
21
- return pool;
22
- } catch (err) {
23
- logger.error(TAG, 'Failed to create connection pool for mysql because ' + err);
24
- throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to create connection pool.');
25
- }
10
+ const logger = new Logger();
11
+ pool = mysql.createPool({
12
+ connectionLimit: config.DB_CONN_LIMIT,
13
+ queueLimit: config.DB_QUEUE_LIMIT,
14
+ host: config.DB_URL,
15
+ port: config.DB_PORT,
16
+ user: config.DB_USER,
17
+ password: config.DB_PWD,
18
+ supportBigNumbers: true,
19
+ // 啟用連線保持活躍
20
+ enableKeepAlive: true,
21
+ // 每 10 秒發送一次保持活躍訊號
22
+ keepAliveInitialDelay: 10000,
23
+ });
24
+ try {
25
+ return pool;
26
+ } catch (err) {
27
+ logger.error(TAG, 'Failed to create connection pool for mysql because ' + err);
28
+ throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to create connection pool.');
29
+ }
26
30
  };
27
31
 
28
32
  async function createNewPool() {
29
- const logger = new Logger();
30
- const new_pool: mysql.Pool = mysql.createPool({
31
- connectionLimit: config.DB_CONN_LIMIT,
32
- queueLimit: config.DB_QUEUE_LIMIT,
33
- host: config.DB_URL,
34
- port: config.DB_PORT,
35
- user: config.DB_USER,
36
- password: config.DB_PWD,
37
- supportBigNumbers: true,
38
- });
39
- try {
40
- config.DB_SHOW_INFO && logger.info(TAG, 'Pool has been created. (function: createNewPool)');
41
- return new_pool;
42
- } catch (err) {
43
- logger.error(TAG, '(createNewPool) Failed to create connection pool for mysql because ' + err);
44
- throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to create connection pool.');
45
- }
33
+ const logger = new Logger();
34
+ const new_pool: mysql.Pool = mysql.createPool({
35
+ connectionLimit: config.DB_CONN_LIMIT,
36
+ queueLimit: config.DB_QUEUE_LIMIT,
37
+ host: config.DB_URL,
38
+ port: config.DB_PORT,
39
+ user: config.DB_USER,
40
+ password: config.DB_PWD,
41
+ supportBigNumbers: true,
42
+ });
43
+ try {
44
+ config.DB_SHOW_INFO && logger.info(TAG, 'Pool has been created. (function: createNewPool)');
45
+ return new_pool;
46
+ } catch (err) {
47
+ logger.error(TAG, '(createNewPool) Failed to create connection pool for mysql because ' + err);
48
+ throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to create connection pool.');
49
+ }
46
50
  }
47
51
 
48
52
  const execute = async (sql: string, params: any[]): Promise<any> => {
49
- const logger = new Logger();
50
- const TAG = '[Database][Execute]';
51
- if (params.indexOf(undefined) !== -1) {
52
- logger.error(TAG, 'Failed to exect statement ' + sql + ' because params=null');
53
- throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to exect statement because params=null');
54
- }
55
- try {
56
- const connection = await pool.getConnection();
57
- const [results] = await pool.execute(sql, params);
58
- connection.release();
59
- return results;
60
- } catch (err) {
61
- logger.error(TAG, 'Failed to exect statement ' + sql + ' because ' + err);
62
- throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to execute statement.');
63
- }
53
+ const logger = new Logger();
54
+ const TAG = '[Database][Execute]';
55
+ if (params.indexOf(undefined) !== -1) {
56
+ logger.error(TAG, 'Failed to exect statement ' + sql + ' because params=null');
57
+ throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to exect statement because params=null');
58
+ }
59
+ try {
60
+ const connection = await pool.getConnection();
61
+ const [results] = await pool.execute(sql, params);
62
+ connection.release();
63
+ return results;
64
+ } catch (err) {
65
+ logger.error(TAG, 'Failed to exect statement ' + sql + ' because ' + err);
66
+ throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to execute statement.');
67
+ }
64
68
  };
65
69
 
66
70
  export const limit = (map: any) => {
67
- return ` limit ${parseInt(map.page, 10) * parseInt(map.limit, 10)}, ${parseInt(map.limit, 10)} `;
71
+ return ` limit ${parseInt(map.page, 10) * parseInt(map.limit, 10)}, ${parseInt(map.limit, 10)} `;
68
72
  };
69
73
  const query = async (sql: string, params: unknown[]): Promise<any> => {
70
- const logger = new Logger();
71
- const TAG = '[Database][Query]';
72
- try {
73
- const connection = await pool.getConnection();
74
- await pool.query(`SET time_zone = '+00:00';`, []);
75
- const [results] = await pool.query(sql, params);
76
- connection.release();
77
- return results;
78
- } catch (err) {
79
- logger.error(TAG, 'Failed to query statement ' + sql + ' because ' + err);
80
- throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to execute statement.');
81
- }
74
+ const logger = new Logger();
75
+ const TAG = '[Database][Query]';
76
+ try {
77
+ const connection = await pool.getConnection();
78
+ await pool.query(`SET time_zone = '+00:00';`, []);
79
+ const [results] = await pool.query(sql, params);
80
+ connection.release();
81
+ return results;
82
+ } catch (err) {
83
+ logger.error(TAG, 'Failed to query statement ' + sql + ' because ' + err);
84
+ throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to execute statement.');
85
+ }
82
86
  };
83
87
 
84
88
  export const queryLambada = async (
85
- cf: {
86
- database?: string;
87
- },
88
- fun: (v: { query(sql: string, params: unknown[]): Promise<any> }) => any
89
+ cf: {
90
+ database?: string;
91
+ },
92
+ fun: (v: { query(sql: string, params: unknown[]): Promise<any> }) => any
89
93
  ) => {
90
- const logger = new Logger();
91
- const cs: any = {
92
- connectionLimit: config.DB_CONN_LIMIT,
93
- queueLimit: config.DB_QUEUE_LIMIT,
94
- host: config.DB_URL,
95
- port: config.DB_PORT,
96
- user: config.DB_USER,
97
- password: config.DB_PWD,
98
- supportBigNumbers: true,
99
- };
100
- Object.keys(cf).map((key) => {
101
- cs[key] = (cf as any)[key];
102
- });
103
- const sp = mysql.createPool(cs);
104
- const connection = await sp.getConnection();
105
- if (connection) {
106
- connection.release();
107
- config.DB_SHOW_INFO && logger.info(TAG, 'Pool has been created. (function: queryLambada)');
108
- }
109
- try {
110
- const data = await fun({
111
- query(sql: string, params: unknown[]): Promise<any> {
112
- return new Promise<any>(async (resolve, reject) => {
113
- const logger = new Logger();
114
- const TAG = '[Database][Query]';
115
- try {
116
- const [results] = await sp.query(sql, params);
117
- resolve(results);
118
- } catch (err) {
119
- logger.error(TAG, 'Failed to query statement ' + sql + ' because ' + err);
120
- reject(err);
121
- }
122
- });
123
- },
94
+ const logger = new Logger();
95
+ const cs: any = {
96
+ connectionLimit: config.DB_CONN_LIMIT,
97
+ queueLimit: config.DB_QUEUE_LIMIT,
98
+ host: config.DB_URL,
99
+ port: config.DB_PORT,
100
+ user: config.DB_USER,
101
+ password: config.DB_PWD,
102
+ supportBigNumbers: true,
103
+ };
104
+ Object.keys(cf).map(key => {
105
+ cs[key] = (cf as any)[key];
106
+ });
107
+ const sp = mysql.createPool(cs);
108
+ const connection = await sp.getConnection();
109
+ if (connection) {
110
+ connection.release();
111
+ config.DB_SHOW_INFO && logger.info(TAG, 'Pool has been created. (function: queryLambada)');
112
+ }
113
+ try {
114
+ const data = await fun({
115
+ query(sql: string, params: unknown[]): Promise<any> {
116
+ return new Promise<any>(async (resolve, reject) => {
117
+ const logger = new Logger();
118
+ const TAG = '[Database][Query]';
119
+ try {
120
+ const [results] = await sp.query(sql, params);
121
+ resolve(results);
122
+ } catch (err) {
123
+ logger.error(TAG, 'Failed to query statement ' + sql + ' because ' + err);
124
+ reject(err);
125
+ }
124
126
  });
125
- //Close connection
126
- connection.release();
127
- sp.end();
128
- return data;
129
- } catch (err) {
130
- //Close connection
131
- connection.release();
132
- sp.end();
133
- logger.error(TAG, 'Failed to create connection pool for mysql because ' + err);
134
- throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to create connection pool.');
135
- }
127
+ },
128
+ });
129
+ //Close connection
130
+ connection.release();
131
+ sp.end();
132
+ return data;
133
+ } catch (err) {
134
+ //Close connection
135
+ connection.release();
136
+ sp.end();
137
+ logger.error(TAG, 'Failed to create connection pool for mysql because ' + err);
138
+ throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to create connection pool.');
139
+ }
136
140
  };
137
141
 
138
142
  class Transaction {
139
- private pool?: mysql.Pool;
140
- private trans: any;
141
- connectionId: any;
142
- private TAG: any;
143
+ private pool?: mysql.Pool;
144
+ private trans: any;
145
+ connectionId: any;
146
+ private TAG: any;
143
147
 
144
- static async build(): Promise<Transaction> {
145
- const logger = new Logger();
146
- const Trans = new Transaction();
147
- try {
148
- Trans.pool = (await createNewPool())!;
149
- Trans.trans = await Trans.pool.getConnection();
150
- Trans.TAG = `[Database][Transaction][CID:${Trans.trans.threadId}]`;
151
- Trans.trans.beginTransaction();
152
- return Trans;
153
- } catch (err) {
154
- logger.error(Trans.TAG, 'Failed to create transaction when call transaction.init because ' + err);
155
- await Trans.release();
156
- throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to create transaction when connecting database.');
157
- }
148
+ static async build(): Promise<Transaction> {
149
+ const logger = new Logger();
150
+ const Trans = new Transaction();
151
+ try {
152
+ Trans.pool = (await createNewPool())!;
153
+ Trans.trans = await Trans.pool.getConnection();
154
+ Trans.TAG = `[Database][Transaction][CID:${Trans.trans.threadId}]`;
155
+ Trans.trans.beginTransaction();
156
+ return Trans;
157
+ } catch (err) {
158
+ logger.error(Trans.TAG, 'Failed to create transaction when call transaction.init because ' + err);
159
+ await Trans.release();
160
+ throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to create transaction when connecting database.');
158
161
  }
162
+ }
159
163
 
160
- public async execute(sql: string, params: any[] | any): Promise<any> {
161
- const logger = new Logger();
162
- if (!this.trans) {
163
- throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Can not use Transaction class without build.');
164
- }
165
- try {
166
- const [result] = await this.trans.query(sql, params);
167
- return result;
168
- } catch (err) {
169
- //rollback transaction and release connection when error occurred.
170
- logger.error(this.TAG, `Failed to execute statement ${sql} from transaction because ${err}`);
171
- await this.release();
172
- throw err;
173
- }
164
+ public async execute(sql: string, params: any[] | any): Promise<any> {
165
+ const logger = new Logger();
166
+ if (!this.trans) {
167
+ throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Can not use Transaction class without build.');
174
168
  }
169
+ try {
170
+ const [result] = await this.trans.query(sql, params);
171
+ return result;
172
+ } catch (err) {
173
+ //rollback transaction and release connection when error occurred.
174
+ logger.error(this.TAG, `Failed to execute statement ${sql} from transaction because ${err}`);
175
+ await this.release();
176
+ throw err;
177
+ }
178
+ }
175
179
 
176
- async commit() {
177
- const logger = new Logger();
178
- try {
179
- await this.trans.commit();
180
- await this.release();
181
- config.DB_SHOW_INFO && logger.info(this.TAG, 'Commited successfully');
182
- } catch (err) {
183
- logger.error(this.TAG, 'Failed to commit from transaction because ' + err);
184
- await this.release();
185
- throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to commit from transaction.');
186
- }
180
+ async commit() {
181
+ const logger = new Logger();
182
+ try {
183
+ await this.trans.commit();
184
+ await this.release();
185
+ config.DB_SHOW_INFO && logger.info(this.TAG, 'Commited successfully');
186
+ } catch (err) {
187
+ logger.error(this.TAG, 'Failed to commit from transaction because ' + err);
188
+ await this.release();
189
+ throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to commit from transaction.');
187
190
  }
191
+ }
188
192
 
189
- async release() {
190
- const logger = new Logger();
191
- try {
192
- if (this.trans) {
193
- await this.trans.release();
194
- await this.trans.destroy();
195
- this.trans = null;
196
- await this.pool?.end();
197
- config.DB_SHOW_INFO && logger.info(this.TAG, 'Release successfully');
198
- }
199
- } catch (err) {
200
- logger.error(this.TAG, 'Failed to commit from transaction because ' + err);
201
- await this.pool?.end();
202
- throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to release transaction.');
203
- }
193
+ async release() {
194
+ const logger = new Logger();
195
+ try {
196
+ if (this.trans) {
197
+ await this.trans.release();
198
+ await this.trans.destroy();
199
+ this.trans = null;
200
+ await this.pool?.end();
201
+ config.DB_SHOW_INFO && logger.info(this.TAG, 'Release successfully');
202
+ }
203
+ } catch (err) {
204
+ logger.error(this.TAG, 'Failed to commit from transaction because ' + err);
205
+ await this.pool?.end();
206
+ throw exception.ServerError('INTERNAL_SERVER_ERROR', 'Failed to release transaction.');
204
207
  }
208
+ }
205
209
  }
206
210
 
207
211
  const getPagination = (sql: string, page: number, pageCount: number) => {
208
- let newSql = sql;
209
- newSql += ' LIMIT ' + pageCount + ' OFFSET ' + (page - 1) * pageCount;
210
- return newSql;
212
+ let newSql = sql;
213
+ newSql += ' LIMIT ' + pageCount + ' OFFSET ' + (page - 1) * pageCount;
214
+ return newSql;
211
215
  };
212
216
 
213
217
  const escape = (parameter: any) => {
214
- return mysql.escape(parameter);
218
+ return mysql.escape(parameter);
215
219
  };
216
220
 
217
221
  const checkExists = async (sql: string) => {
218
- return (await query('select count(1) from ' + sql, []))[0]['count(1)'] > 0;
222
+ return (await query('select count(1) from ' + sql, []))[0]['count(1)'] > 0;
219
223
  };
220
224
 
221
225
  export default {
222
- createPool,
223
- execute,
224
- query,
225
- Transaction,
226
- getPagination,
227
- escape,
228
- queryLambada,
229
- checkExists,
226
+ createPool,
227
+ execute,
228
+ query,
229
+ Transaction,
230
+ getPagination,
231
+ escape,
232
+ queryLambada,
233
+ checkExists,
230
234
  };
@@ -22,4 +22,21 @@ export declare class Firebase {
22
22
  app?: string;
23
23
  pass_store?: boolean;
24
24
  }): Promise<unknown>;
25
+ postFCM(data: any): Promise<{
26
+ result: boolean;
27
+ message: string;
28
+ }>;
29
+ chunkSendFcm(data: any, id: number, date?: string): Promise<void>;
30
+ getFCM(query: {
31
+ type: string;
32
+ page: number;
33
+ limit: number;
34
+ search?: string;
35
+ searchType?: string;
36
+ mailType?: string;
37
+ status?: string;
38
+ }): Promise<{
39
+ data: any;
40
+ total: any;
41
+ }>;
25
42
  }
@@ -10,6 +10,7 @@ const config_1 = require("../config");
10
10
  const database_1 = __importDefault(require("../modules/database"));
11
11
  const web_socket_js_1 = require("../services/web-socket.js");
12
12
  const caught_error_js_1 = require("./caught-error.js");
13
+ const exception_js_1 = __importDefault(require("./exception.js"));
13
14
  class Firebase {
14
15
  constructor(app) {
15
16
  this.app = '';
@@ -144,6 +145,131 @@ class Firebase {
144
145
  resolve(true);
145
146
  });
146
147
  }
148
+ async postFCM(data) {
149
+ data.msgid = '';
150
+ try {
151
+ if (Boolean(data.sendTime)) {
152
+ if (isLater(data.sendTime)) {
153
+ return { result: false, message: '排定發送的時間需大於現在時間' };
154
+ }
155
+ const insertData = await database_1.default.query(`INSERT INTO \`${this.app}\`.\`t_triggers\`
156
+ SET ?;`, [
157
+ {
158
+ tag: 'sendFCM',
159
+ content: JSON.stringify(data),
160
+ trigger_time: formatDateTime(data.sendTime),
161
+ status: 0,
162
+ },
163
+ ]);
164
+ this.chunkSendFcm(data, insertData.insertId, formatDateTime(data.sendTime));
165
+ }
166
+ else {
167
+ const insertData = await database_1.default.query(`INSERT INTO \`${this.app}\`.\`t_triggers\`
168
+ SET ?;`, [
169
+ {
170
+ tag: 'sendFCM',
171
+ content: JSON.stringify(data),
172
+ trigger_time: formatDateTime(),
173
+ status: 1,
174
+ },
175
+ ]);
176
+ this.chunkSendFcm(data, insertData.insertId);
177
+ }
178
+ return { result: true, message: '寄送成功' };
179
+ }
180
+ catch (e) {
181
+ throw exception_js_1.default.BadRequestError('BAD_REQUEST', 'postMail Error:' + e, null);
182
+ }
183
+ }
184
+ async chunkSendFcm(data, id, date) {
185
+ try {
186
+ let msgid = '';
187
+ for (const b of chunkArray(Array.from(new Set(data.userList.map((dd) => {
188
+ return dd.id;
189
+ }))), 10)) {
190
+ let check = b.length;
191
+ await new Promise(resolve => {
192
+ for (const d of b) {
193
+ this.sendMessage({
194
+ userID: d,
195
+ title: data.title,
196
+ body: data.content,
197
+ tag: 'promote',
198
+ link: data.link,
199
+ });
200
+ }
201
+ });
202
+ }
203
+ }
204
+ catch (e) {
205
+ throw exception_js_1.default.BadRequestError('BAD_REQUEST', 'chunkSendSns Error:' + e, null);
206
+ }
207
+ }
208
+ async getFCM(query) {
209
+ var _a, _b;
210
+ try {
211
+ const whereList = ['1 = 1'];
212
+ switch (query.searchType) {
213
+ case 'email':
214
+ break;
215
+ case 'name':
216
+ whereList.push(`(UPPER(JSON_EXTRACT(content, '$.name')) LIKE UPPER('%${(_a = query.search) !== null && _a !== void 0 ? _a : ''}%'))`);
217
+ break;
218
+ case 'title':
219
+ whereList.push(`(UPPER(JSON_EXTRACT(content, '$.title')) LIKE UPPER('%${(_b = query.search) !== null && _b !== void 0 ? _b : ''}%'))`);
220
+ break;
221
+ }
222
+ if (query.status) {
223
+ whereList.push(`(status in (${query.status}))`);
224
+ }
225
+ if (query.mailType) {
226
+ const maiTypeString = query.mailType.replace(/[^,]+/g, "'$&'");
227
+ whereList.push(`(JSON_EXTRACT(content, '$.type') in (${maiTypeString}))`);
228
+ }
229
+ const whereSQL = `(tag = 'sendFCM') AND ${whereList.join(' AND ')}`;
230
+ const emails = await database_1.default.query(`SELECT * FROM \`${this.app}\`.t_triggers
231
+ WHERE ${whereSQL}
232
+ ORDER BY id DESC
233
+ ${query.type === 'download' ? '' : `LIMIT ${query.page * query.limit}, ${query.limit}`};`, []);
234
+ const total = await database_1.default.query(`SELECT count(id) as c FROM \`${this.app}\`.t_triggers
235
+ WHERE ${whereSQL};`, []);
236
+ for (const email of emails) {
237
+ email.content.typeName = "手動發送";
238
+ }
239
+ return { data: emails, total: total[0].c };
240
+ }
241
+ catch (e) {
242
+ throw exception_js_1.default.BadRequestError('BAD_REQUEST', 'getMail Error:' + e, null);
243
+ }
244
+ }
147
245
  }
148
246
  exports.Firebase = Firebase;
247
+ function isLater(dateTimeObj) {
248
+ const currentDateTime = new Date();
249
+ const { date, time } = dateTimeObj;
250
+ const dateTimeString = `${date}T${time}:00`;
251
+ const providedDateTime = new Date(dateTimeString);
252
+ return currentDateTime > providedDateTime;
253
+ }
254
+ function chunkArray(array, groupSize) {
255
+ const result = [];
256
+ for (let i = 0; i < array.length; i += groupSize) {
257
+ result.push(array.slice(i, i + groupSize));
258
+ }
259
+ return result;
260
+ }
261
+ function formatDate(date) {
262
+ const year = date.getFullYear();
263
+ const month = String(date.getMonth() + 1).padStart(2, '0');
264
+ const day = String(date.getDate()).padStart(2, '0');
265
+ const hours = String(date.getHours()).padStart(2, '0');
266
+ const minutes = String(date.getMinutes()).padStart(2, '0');
267
+ const seconds = String(date.getSeconds()).padStart(2, '0');
268
+ return `${year}${month}${day}${hours}${minutes}${seconds}`;
269
+ }
270
+ function formatDateTime(sendTime) {
271
+ const dateTimeString = sendTime ? sendTime.date + ' ' + sendTime.time : undefined;
272
+ const dateObject = dateTimeString ? new Date(dateTimeString) : new Date();
273
+ return formatDate(dateObject);
274
+ }
149
275
  //# sourceMappingURL=firebase.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"firebase.js","sourceRoot":"","sources":["firebase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"firebase.js","sourceRoot":"","sources":["firebase.ts"],"names":[],"mappings":"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"}