befly 3.76.1 → 3.76.3
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/Befly.js +159 -0
- package/README.md +50 -11
- package/apis/admin/delete.js +1 -3
- package/apis/admin/select.js +2 -7
- package/apis/admin/update.js +1 -5
- package/apis/api/select.js +2 -7
- package/apis/auth/login.js +16 -20
- package/apis/dict/delete.js +1 -1
- package/apis/dict/detail.js +1 -3
- package/apis/dict/select.js +1 -2
- package/apis/dict/update.js +1 -1
- package/apis/dictType/delete.js +1 -1
- package/apis/dictType/detail.js +1 -1
- package/apis/dictType/insert.js +1 -1
- package/apis/dictType/select.js +2 -7
- package/apis/dictType/update.js +2 -2
- package/apis/email/config.js +4 -7
- package/apis/email/logList.js +2 -7
- package/apis/email/send.js +1 -2
- package/apis/email/verify.js +1 -3
- package/apis/loginLog/select.js +2 -7
- package/apis/menu/select.js +2 -7
- package/apis/operateLog/select.js +2 -7
- package/apis/role/apiSave.js +2 -2
- package/apis/role/menuSave.js +2 -2
- package/apis/role/select.js +2 -7
- package/apis/source/imageList.js +2 -5
- package/apis/tongJi/dailyReport.js +12 -13
- package/apis/tongJi/dailyReportSelect.js +1 -2
- package/apis/tongJi/dailyStats.js +1 -1
- package/apis/tongJi/dailyStatsDistribution.js +2 -2
- package/apis/tongJi/errorList.js +1 -2
- package/apis/tongJi/errorReport.js +1 -2
- package/apis/tongJi/projectDelete.js +1 -3
- package/apis/tongJi/projectSelect.js +2 -4
- package/apis/tongJi/projectUpdate.js +2 -2
- package/apis/upload/file.js +7 -5
- package/checks/api.js +43 -66
- package/checks/config.js +17 -12
- package/checks/corns.js +28 -46
- package/checks/field.js +18 -0
- package/checks/items.js +16 -60
- package/checks/menu.js +28 -39
- package/checks/table.js +106 -26
- package/checks/validation.js +13 -0
- package/configs/beflyConfig.json +6 -6
- package/configs/constConfig.js +2 -63
- package/exports.js +2 -0
- package/hooks/auth.js +11 -7
- package/hooks/parser.js +55 -59
- package/hooks/permission.js +1 -0
- package/hooks/rateLimit.js +25 -62
- package/hooks/validator.js +43 -31
- package/index.js +43 -344
- package/{lib → libs}/cacheHelper.js +3 -8
- package/libs/cron.js +60 -0
- package/libs/logger/index.js +1 -0
- package/libs/logger/logger.js +245 -0
- package/libs/logger/sanitize.js +115 -0
- package/{lib → libs/mysql}/dbHelper.js +100 -73
- package/{lib → libs/mysql}/dbParse.js +16 -9
- package/{lib → libs/mysql}/dbUtil.js +15 -32
- package/libs/mysql/error.js +29 -0
- package/libs/mysql/index.js +6 -0
- package/libs/mysql/is.js +29 -0
- package/libs/mysql/mysql.js +43 -0
- package/libs/mysql/sql/identifier.js +85 -0
- package/libs/mysql/sql/index.js +2 -0
- package/{lib → libs/mysql/sql}/sqlBuilder.js +2 -3
- package/libs/mysql/util.js +44 -0
- package/libs/redis/index.js +2 -0
- package/libs/redis/redis.js +204 -0
- package/libs/redis/redisError.js +8 -0
- package/libs/tableModel.js +72 -0
- package/libs/tool.js +33 -0
- package/libs/validator/compiler.js +248 -0
- package/libs/validator/index.js +10 -0
- package/libs/validator/parser.js +173 -0
- package/libs/validator/util.js +5 -0
- package/package.json +10 -8
- package/paths.js +2 -3
- package/plugins/cache.js +2 -1
- package/plugins/email.js +4 -4
- package/plugins/mysql.js +5 -15
- package/plugins/redis.js +4 -12
- package/router/api.js +14 -10
- package/router/root.js +14 -0
- package/router/static.js +3 -3
- package/schemas/api.json +99 -0
- package/schemas/config.json +255 -0
- package/schemas/corn.json +39 -0
- package/schemas/item.json +43 -0
- package/schemas/menu.json +44 -0
- package/schemas/table.json +80 -0
- package/scripts/syncDb/apply.js +87 -0
- package/scripts/syncDb/ddl.js +43 -0
- package/scripts/syncDb/index.js +175 -30
- package/scripts/syncDb/model.js +60 -0
- package/scripts/syncDb/plan.js +160 -0
- package/scripts/syncDb/preflight.js +98 -0
- package/scripts/syncDb/report.js +177 -162
- package/scripts/syncDb/snapshot.js +118 -0
- package/tables/admin.json +51 -53
- package/tables/api.json +28 -39
- package/tables/dailyReport.json +85 -73
- package/tables/dict.json +27 -39
- package/tables/dictType.json +20 -34
- package/tables/emailLog.json +49 -47
- package/tables/errorReport.json +86 -60
- package/tables/file.json +47 -50
- package/tables/loginLog.json +68 -55
- package/tables/menu.json +20 -34
- package/tables/operateLog.json +53 -47
- package/tables/project.json +18 -30
- package/tables/role.json +33 -37
- package/utils/cors.js +37 -41
- package/utils/deepMerge.js +3 -1
- package/utils/error.js +1 -56
- package/utils/id.js +44 -0
- package/utils/is.js +6 -243
- package/utils/response.js +12 -1
- package/utils/scanFiles.js +13 -4
- package/utils/scanSources.js +58 -20
- package/utils/util.js +11 -163
- package/apis/_apis.js +0 -20
- package/apis/auth/sendSmsCode.js +0 -24
- package/configs/regexpAlias.json +0 -55
- package/lib/connect.js +0 -119
- package/lib/logger.js +0 -430
- package/lib/redisHelper.js +0 -399
- package/lib/validator.js +0 -274
- package/lib/xmlParse.js +0 -149
- package/plugins/config.js +0 -13
- package/plugins/cron.js +0 -115
- package/plugins/logger.js +0 -17
- package/plugins/tool.js +0 -131
- package/plugins/xmlParse.js +0 -10
- package/schemas/config.js +0 -67
- package/scripts/syncDb/context.js +0 -120
- package/scripts/syncDb/diff.js +0 -279
- package/scripts/syncDb/transform.js +0 -113
- package/sql/befly.sql +0 -271
- package/utils/email.js +0 -3
- package/utils/fieldClear.js +0 -22
- package/utils/formatValidationIssues.js +0 -28
- package/utils/getClientIp.js +0 -47
- package/utils/loggerUtils.js +0 -196
- package/utils/regexpUtil.js +0 -52
- /package/{lib → libs}/smtpText.js +0 -0
package/scripts/syncDb/diff.js
DELETED
|
@@ -1,279 +0,0 @@
|
|
|
1
|
-
import { join } from "node:path";
|
|
2
|
-
|
|
3
|
-
import { BEFLY_TABLE_PREFIX } from "#befly/configs/constConfig.js";
|
|
4
|
-
import { isNonEmptyString, isPlainObject } from "#befly/utils/is.js";
|
|
5
|
-
import { camelCase, snakeCase } from "#befly/utils/util.js";
|
|
6
|
-
|
|
7
|
-
import { printSyncDbProcessLog } from "./report.js";
|
|
8
|
-
import { toSyncDbFieldDef } from "./transform.js";
|
|
9
|
-
|
|
10
|
-
const SYNC_DB_MANAGED_FIELD_NAMES = new Set(["id", "created_at", "updated_at", "deleted_at", "state"]);
|
|
11
|
-
const SYNC_DB_HEAD_FIELD_NAME = "id";
|
|
12
|
-
const SYNC_DB_TAIL_FIELD_NAMES = ["created_at", "updated_at", "deleted_at", "state"];
|
|
13
|
-
const SYNC_DB_TAIL_FIELD_NAME_SET = new Set(SYNC_DB_TAIL_FIELD_NAMES);
|
|
14
|
-
|
|
15
|
-
function shouldSkipSyncDbColumn(columnMeta, beflyMode) {
|
|
16
|
-
if (beflyMode !== "manual") {
|
|
17
|
-
return false;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
const columnName = String(columnMeta?.columnName || "").toLowerCase();
|
|
21
|
-
return SYNC_DB_MANAGED_FIELD_NAMES.has(columnName);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
function shouldSkipSyncDbFieldName(fieldName, beflyMode) {
|
|
25
|
-
if (beflyMode !== "manual") {
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
return SYNC_DB_MANAGED_FIELD_NAMES.has(snakeCase(String(fieldName || "")));
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
function sortSyncDbObjectKeys(source) {
|
|
33
|
-
const output = {};
|
|
34
|
-
|
|
35
|
-
if (Object.hasOwn(source, SYNC_DB_HEAD_FIELD_NAME)) {
|
|
36
|
-
output[SYNC_DB_HEAD_FIELD_NAME] = source[SYNC_DB_HEAD_FIELD_NAME];
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
for (const [key, value] of Object.entries(source)) {
|
|
40
|
-
if (key === SYNC_DB_HEAD_FIELD_NAME) {
|
|
41
|
-
continue;
|
|
42
|
-
}
|
|
43
|
-
if (SYNC_DB_TAIL_FIELD_NAME_SET.has(snakeCase(key))) {
|
|
44
|
-
continue;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
output[key] = value;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
for (const fieldName of SYNC_DB_TAIL_FIELD_NAMES) {
|
|
51
|
-
for (const [key, value] of Object.entries(source)) {
|
|
52
|
-
if (snakeCase(key) !== fieldName) {
|
|
53
|
-
continue;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
output[key] = value;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
return output;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export function groupSyncDbColumns(rows) {
|
|
64
|
-
const grouped = new Map();
|
|
65
|
-
|
|
66
|
-
for (const row of rows) {
|
|
67
|
-
const tableName = String(row.tableName || "");
|
|
68
|
-
if (!isNonEmptyString(tableName)) {
|
|
69
|
-
continue;
|
|
70
|
-
}
|
|
71
|
-
if (tableName.toLowerCase().startsWith(BEFLY_TABLE_PREFIX)) {
|
|
72
|
-
continue;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
if (!grouped.has(tableName)) {
|
|
76
|
-
grouped.set(tableName, []);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
const tableColumns = grouped.get(tableName);
|
|
80
|
-
tableColumns.push({
|
|
81
|
-
tableName: tableName,
|
|
82
|
-
tableComment: row.tableComment,
|
|
83
|
-
columnName: row.columnName,
|
|
84
|
-
dataType: row.dataType,
|
|
85
|
-
columnType: row.columnType,
|
|
86
|
-
charLength: row.charLength,
|
|
87
|
-
columnComment: row.columnComment,
|
|
88
|
-
ordinalPosition: row.ordinalPosition
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
return grouped;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
export function buildSyncDbDiff(groupedDbColumns, existingTableMap, beflyMode = "auto") {
|
|
96
|
-
const missingTables = [];
|
|
97
|
-
const extraTables = [];
|
|
98
|
-
const missingFieldsByTable = {};
|
|
99
|
-
const extraFieldsByTable = {};
|
|
100
|
-
const groupedDbTableKeySet = new Set();
|
|
101
|
-
let missingFieldCount = 0;
|
|
102
|
-
let extraFieldCount = 0;
|
|
103
|
-
|
|
104
|
-
for (const [tableName, columns] of groupedDbColumns.entries()) {
|
|
105
|
-
const tableFileName = camelCase(tableName);
|
|
106
|
-
const tableKey = String(tableFileName).toLowerCase();
|
|
107
|
-
groupedDbTableKeySet.add(tableKey);
|
|
108
|
-
const existing = existingTableMap.get(tableKey);
|
|
109
|
-
const filteredColumns = columns.filter((columnMeta) => !shouldSkipSyncDbColumn(columnMeta, beflyMode));
|
|
110
|
-
|
|
111
|
-
if (!existing) {
|
|
112
|
-
if (filteredColumns.length === 0) {
|
|
113
|
-
continue;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
missingTables.push({
|
|
117
|
-
tableName: tableName,
|
|
118
|
-
tableFileName: tableFileName,
|
|
119
|
-
columns: filteredColumns
|
|
120
|
-
});
|
|
121
|
-
continue;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
const existingFields = isPlainObject(existing.tableDef) ? existing.tableDef : {};
|
|
125
|
-
const existingFieldNameByDbColumnName = new Map();
|
|
126
|
-
|
|
127
|
-
for (const fieldName of Object.keys(existingFields)) {
|
|
128
|
-
if (shouldSkipSyncDbFieldName(fieldName, beflyMode)) {
|
|
129
|
-
continue;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
existingFieldNameByDbColumnName.set(snakeCase(fieldName), fieldName);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
const missingFields = [];
|
|
136
|
-
const dbFieldNameSet = new Set();
|
|
137
|
-
for (const columnMeta of filteredColumns) {
|
|
138
|
-
const fieldInfo = toSyncDbFieldDef(columnMeta);
|
|
139
|
-
const dbColumnName = String(columnMeta.columnName || "");
|
|
140
|
-
const normalizedDbColumnName = dbColumnName.toLowerCase();
|
|
141
|
-
|
|
142
|
-
dbFieldNameSet.add(normalizedDbColumnName);
|
|
143
|
-
if (existingFieldNameByDbColumnName.has(normalizedDbColumnName)) {
|
|
144
|
-
continue;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
missingFields.push({
|
|
148
|
-
tableName: tableName,
|
|
149
|
-
tableFileName: tableFileName,
|
|
150
|
-
dbColumnName: dbColumnName,
|
|
151
|
-
dbDataType: columnMeta.dataType,
|
|
152
|
-
dbColumnType: columnMeta.columnType,
|
|
153
|
-
dbCharLength: columnMeta.charLength,
|
|
154
|
-
fieldName: fieldInfo.fieldName,
|
|
155
|
-
fieldDef: fieldInfo.fieldDef
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
if (missingFields.length > 0) {
|
|
160
|
-
missingFieldCount = missingFieldCount + missingFields.length;
|
|
161
|
-
missingFieldsByTable[tableFileName] = {
|
|
162
|
-
tableName: tableName,
|
|
163
|
-
tableFileName: existing.tableFileName || tableFileName,
|
|
164
|
-
filePath: existing.filePath,
|
|
165
|
-
fields: missingFields
|
|
166
|
-
};
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
const extraFields = [];
|
|
170
|
-
for (const fieldName of Object.keys(existingFields)) {
|
|
171
|
-
if (shouldSkipSyncDbFieldName(fieldName, beflyMode)) {
|
|
172
|
-
continue;
|
|
173
|
-
}
|
|
174
|
-
if (dbFieldNameSet.has(snakeCase(fieldName))) {
|
|
175
|
-
continue;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
extraFields.push({
|
|
179
|
-
tableName: tableName,
|
|
180
|
-
tableFileName: tableFileName,
|
|
181
|
-
fieldName: fieldName,
|
|
182
|
-
fieldDef: existingFields[fieldName]
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
if (extraFields.length > 0) {
|
|
187
|
-
extraFieldCount = extraFieldCount + extraFields.length;
|
|
188
|
-
extraFieldsByTable[tableFileName] = {
|
|
189
|
-
tableName: tableName,
|
|
190
|
-
tableFileName: existing.tableFileName || tableFileName,
|
|
191
|
-
filePath: existing.filePath,
|
|
192
|
-
fields: extraFields
|
|
193
|
-
};
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
for (const [tableKey, existing] of existingTableMap.entries()) {
|
|
198
|
-
if (groupedDbTableKeySet.has(tableKey)) {
|
|
199
|
-
continue;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
extraTables.push({
|
|
203
|
-
tableFileName: existing.tableFileName || camelCase(tableKey),
|
|
204
|
-
filePath: existing.filePath
|
|
205
|
-
});
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
return {
|
|
209
|
-
missingTables: missingTables,
|
|
210
|
-
extraTables: extraTables,
|
|
211
|
-
missingFieldsByTable: missingFieldsByTable,
|
|
212
|
-
extraFieldsByTable: extraFieldsByTable,
|
|
213
|
-
missingFieldCount: missingFieldCount,
|
|
214
|
-
extraFieldCount: extraFieldCount
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
export async function applySyncDbDiff(diff, tablesDir, existingTableMap) {
|
|
219
|
-
let createdTableFileCount = 0;
|
|
220
|
-
let appendedFieldCount = 0;
|
|
221
|
-
let removedFieldCount = 0;
|
|
222
|
-
|
|
223
|
-
for (const missingTable of diff.missingTables) {
|
|
224
|
-
const tableDef = {};
|
|
225
|
-
for (const columnMeta of missingTable.columns) {
|
|
226
|
-
const fieldInfo = toSyncDbFieldDef(columnMeta);
|
|
227
|
-
tableDef[fieldInfo.fieldName] = fieldInfo.fieldDef;
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
const filePath = join(tablesDir, `${missingTable.tableFileName}.json`);
|
|
231
|
-
await Bun.write(filePath, `${JSON.stringify(sortSyncDbObjectKeys(tableDef), null, 4)}\n`);
|
|
232
|
-
createdTableFileCount = createdTableFileCount + 1;
|
|
233
|
-
printSyncDbProcessLog(`已生成表映射 ${filePath}`);
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
for (const [tableFileName, tableInfo] of Object.entries(diff.missingFieldsByTable)) {
|
|
237
|
-
const existing = existingTableMap.get(String(tableFileName).toLowerCase());
|
|
238
|
-
const targetFilePath = existing?.filePath || join(tablesDir, `${tableFileName}.json`);
|
|
239
|
-
|
|
240
|
-
const currentTableDef = isPlainObject(existing?.tableDef) ? existing.tableDef : {};
|
|
241
|
-
for (const fieldItem of tableInfo.fields) {
|
|
242
|
-
currentTableDef[fieldItem.fieldName] = fieldItem.fieldDef;
|
|
243
|
-
appendedFieldCount = appendedFieldCount + 1;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
await Bun.write(targetFilePath, `${JSON.stringify(sortSyncDbObjectKeys(currentTableDef), null, 4)}\n`);
|
|
247
|
-
printSyncDbProcessLog(`已补充字段映射 ${targetFilePath},补充字段数量=${tableInfo.fields.length}`);
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
for (const [tableFileName, tableInfo] of Object.entries(diff.extraFieldsByTable)) {
|
|
251
|
-
const existing = existingTableMap.get(String(tableFileName).toLowerCase());
|
|
252
|
-
const targetFilePath = existing?.filePath || tableInfo.filePath || join(tablesDir, `${tableFileName}.json`);
|
|
253
|
-
const currentTableDef = isPlainObject(existing?.tableDef) ? existing.tableDef : {};
|
|
254
|
-
let tableRemovedFieldCount = 0;
|
|
255
|
-
|
|
256
|
-
for (const fieldItem of tableInfo.fields) {
|
|
257
|
-
if (!Object.hasOwn(currentTableDef, fieldItem.fieldName)) {
|
|
258
|
-
continue;
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
delete currentTableDef[fieldItem.fieldName];
|
|
262
|
-
removedFieldCount = removedFieldCount + 1;
|
|
263
|
-
tableRemovedFieldCount = tableRemovedFieldCount + 1;
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
if (tableRemovedFieldCount <= 0) {
|
|
267
|
-
continue;
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
await Bun.write(targetFilePath, `${JSON.stringify(sortSyncDbObjectKeys(currentTableDef), null, 4)}\n`);
|
|
271
|
-
printSyncDbProcessLog(`已删除多余字段映射 ${targetFilePath},删除字段数量=${tableRemovedFieldCount}`);
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
return {
|
|
275
|
-
createdTableFileCount: createdTableFileCount,
|
|
276
|
-
appendedFieldCount: appendedFieldCount,
|
|
277
|
-
removedFieldCount: removedFieldCount
|
|
278
|
-
};
|
|
279
|
-
}
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { DECIMAL_KIND_TYPES, ENUM_KIND_TYPES, FLOAT_KIND_TYPES, INT_KIND_TYPES, JSON_KIND_TYPES, STRING_KIND_TYPES, TEXT_KIND_TYPES } from "#befly/configs/constConfig.js";
|
|
2
|
-
import { isNonEmptyString, isNumber } from "#befly/utils/is.js";
|
|
3
|
-
import { camelCase, snakeCase } from "#befly/utils/util.js";
|
|
4
|
-
|
|
5
|
-
function resolveSyncDbEnumInput(columnType) {
|
|
6
|
-
const matched = /^enum\((.*)\)$/.exec(columnType);
|
|
7
|
-
if (!matched || !matched[1]) {
|
|
8
|
-
return "";
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const values = [];
|
|
12
|
-
const enumValueRegexp = /'((?:[^'\\]|\\.)*)'/g;
|
|
13
|
-
|
|
14
|
-
let execResult = enumValueRegexp.exec(matched[1]);
|
|
15
|
-
while (execResult) {
|
|
16
|
-
const decodedValue = String(execResult[1]).replaceAll("\\'", "'");
|
|
17
|
-
values.push(decodedValue);
|
|
18
|
-
execResult = enumValueRegexp.exec(matched[1]);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
if (values.length === 0) {
|
|
22
|
-
return "";
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
return values.join("|");
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
function resolveSyncDbInputByColumn(columnMeta) {
|
|
29
|
-
const dataType = String(columnMeta.dataType || "").toLowerCase();
|
|
30
|
-
const columnType = String(columnMeta.columnType || "").toLowerCase();
|
|
31
|
-
|
|
32
|
-
if (ENUM_KIND_TYPES.includes(dataType)) {
|
|
33
|
-
const enumInput = resolveSyncDbEnumInput(columnType);
|
|
34
|
-
if (isNonEmptyString(enumInput)) {
|
|
35
|
-
return enumInput;
|
|
36
|
-
}
|
|
37
|
-
return "string";
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
if (JSON_KIND_TYPES.includes(dataType)) {
|
|
41
|
-
return "json";
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
if (INT_KIND_TYPES.includes(dataType)) {
|
|
45
|
-
return "integer";
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
if (DECIMAL_KIND_TYPES.includes(dataType) || FLOAT_KIND_TYPES.includes(dataType)) {
|
|
49
|
-
return "number";
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
if (STRING_KIND_TYPES.includes(dataType) || TEXT_KIND_TYPES.includes(dataType)) {
|
|
53
|
-
if (dataType === "char") {
|
|
54
|
-
return "char";
|
|
55
|
-
}
|
|
56
|
-
return "string";
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
if (dataType.includes("date") || dataType.includes("time") || dataType === "year") {
|
|
60
|
-
return "string";
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
if (dataType === "bit" || dataType === "boolean") {
|
|
64
|
-
return "integer";
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
return "string";
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
function resolveSyncDbMaxByColumn(columnMeta) {
|
|
71
|
-
const dataType = String(columnMeta.dataType || "").toLowerCase();
|
|
72
|
-
|
|
73
|
-
if (!(STRING_KIND_TYPES.includes(dataType) || TEXT_KIND_TYPES.includes(dataType))) {
|
|
74
|
-
return null;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
if (!isNumber(columnMeta.charLength)) {
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
if (!Number.isFinite(columnMeta.charLength)) {
|
|
82
|
-
return null;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
if (columnMeta.charLength <= 0 || columnMeta.charLength > Number.MAX_SAFE_INTEGER) {
|
|
86
|
-
return null;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
return Math.floor(columnMeta.charLength);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
export function toSyncDbFieldDef(columnMeta) {
|
|
93
|
-
const camelFieldName = camelCase(columnMeta.columnName);
|
|
94
|
-
const columnName = String(columnMeta.columnName || "");
|
|
95
|
-
const fieldName = snakeCase(camelFieldName) === columnName ? camelFieldName : columnName;
|
|
96
|
-
const fieldDisplayName = isNonEmptyString(columnMeta.columnComment) ? String(columnMeta.columnComment).trim() : fieldName;
|
|
97
|
-
const fieldInput = resolveSyncDbInputByColumn(columnMeta);
|
|
98
|
-
const fieldMax = resolveSyncDbMaxByColumn(columnMeta);
|
|
99
|
-
|
|
100
|
-
const fieldDef = {
|
|
101
|
-
name: fieldDisplayName,
|
|
102
|
-
input: fieldInput
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
if (isNumber(fieldMax)) {
|
|
106
|
-
fieldDef.max = fieldMax;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
return {
|
|
110
|
-
fieldName: fieldName,
|
|
111
|
-
fieldDef: fieldDef
|
|
112
|
-
};
|
|
113
|
-
}
|
package/sql/befly.sql
DELETED
|
@@ -1,271 +0,0 @@
|
|
|
1
|
-
CREATE TABLE IF NOT EXISTS `befly_admin` (
|
|
2
|
-
`id` BIGINT NOT NULL,
|
|
3
|
-
`nickname` VARCHAR(50) NOT NULL DEFAULT '',
|
|
4
|
-
`username` VARCHAR(30) NOT NULL DEFAULT '',
|
|
5
|
-
`password` VARCHAR(500) NOT NULL DEFAULT '',
|
|
6
|
-
`email` VARCHAR(100) NOT NULL DEFAULT '',
|
|
7
|
-
`phone` VARCHAR(20) NOT NULL DEFAULT '',
|
|
8
|
-
`avatar` VARCHAR(500) NOT NULL DEFAULT '',
|
|
9
|
-
`role_code` VARCHAR(50) NOT NULL DEFAULT '',
|
|
10
|
-
`role_type` VARCHAR(5) NOT NULL DEFAULT 'user',
|
|
11
|
-
`last_login_time` BIGINT NOT NULL DEFAULT 0,
|
|
12
|
-
`last_login_ip` VARCHAR(50) NOT NULL DEFAULT '',
|
|
13
|
-
`state` TINYINT NOT NULL DEFAULT 1,
|
|
14
|
-
`created_at` BIGINT NOT NULL DEFAULT 0,
|
|
15
|
-
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
|
16
|
-
`deleted_at` BIGINT NULL DEFAULT NULL,
|
|
17
|
-
PRIMARY KEY (`id`)
|
|
18
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
19
|
-
|
|
20
|
-
CREATE TABLE IF NOT EXISTS `befly_api` (
|
|
21
|
-
`id` BIGINT NOT NULL,
|
|
22
|
-
`name` VARCHAR(100) NOT NULL DEFAULT '',
|
|
23
|
-
`auth` VARCHAR(200) NOT NULL DEFAULT '',
|
|
24
|
-
`path` VARCHAR(200) NOT NULL DEFAULT '',
|
|
25
|
-
`parent_path` VARCHAR(200) NOT NULL DEFAULT '',
|
|
26
|
-
`method` VARCHAR(20) NOT NULL DEFAULT '',
|
|
27
|
-
`state` TINYINT NOT NULL DEFAULT 1,
|
|
28
|
-
`created_at` BIGINT NOT NULL DEFAULT 0,
|
|
29
|
-
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
|
30
|
-
`deleted_at` BIGINT NULL DEFAULT NULL,
|
|
31
|
-
PRIMARY KEY (`id`)
|
|
32
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
33
|
-
|
|
34
|
-
CREATE TABLE IF NOT EXISTS `befly_daily_report` (
|
|
35
|
-
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
36
|
-
`report_time` BIGINT NOT NULL DEFAULT 0,
|
|
37
|
-
`report_date` INT NOT NULL DEFAULT 0,
|
|
38
|
-
`member_type` VARCHAR(6) NOT NULL DEFAULT '',
|
|
39
|
-
`member` VARCHAR(500) NOT NULL DEFAULT '',
|
|
40
|
-
`user_id` BIGINT NOT NULL DEFAULT 0,
|
|
41
|
-
`client_id` VARCHAR(120) NOT NULL DEFAULT '',
|
|
42
|
-
`ip` VARCHAR(50) NOT NULL DEFAULT '',
|
|
43
|
-
`client_type` VARCHAR(20) NOT NULL DEFAULT '',
|
|
44
|
-
`product_name` VARCHAR(100) NOT NULL DEFAULT '',
|
|
45
|
-
`product_code` VARCHAR(100) NOT NULL DEFAULT '',
|
|
46
|
-
`product_version` VARCHAR(50) NOT NULL DEFAULT '',
|
|
47
|
-
`client_version` VARCHAR(100) NOT NULL DEFAULT '',
|
|
48
|
-
`os` VARCHAR(100) NOT NULL DEFAULT '',
|
|
49
|
-
`system` VARCHAR(100) NOT NULL DEFAULT '',
|
|
50
|
-
`brand` VARCHAR(100) NOT NULL DEFAULT '',
|
|
51
|
-
`model` VARCHAR(100) NOT NULL DEFAULT '',
|
|
52
|
-
`state` TINYINT NOT NULL DEFAULT 1,
|
|
53
|
-
`created_at` BIGINT NOT NULL DEFAULT 0,
|
|
54
|
-
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
|
55
|
-
`deleted_at` BIGINT NULL DEFAULT NULL,
|
|
56
|
-
PRIMARY KEY (`id`),
|
|
57
|
-
UNIQUE KEY `uk_befly_daily_report_report_date_member` (`report_date`, `member`),
|
|
58
|
-
KEY `idx_befly_daily_report_report_date_product_code` (`report_date`, `product_code`)
|
|
59
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
60
|
-
|
|
61
|
-
CREATE TABLE IF NOT EXISTS `befly_dict` (
|
|
62
|
-
`id` BIGINT NOT NULL,
|
|
63
|
-
`type_code` VARCHAR(50) NOT NULL DEFAULT '',
|
|
64
|
-
`key` VARCHAR(50) NOT NULL DEFAULT '',
|
|
65
|
-
`label` VARCHAR(100) NOT NULL DEFAULT '',
|
|
66
|
-
`sort` INT NOT NULL DEFAULT 0,
|
|
67
|
-
`remark` VARCHAR(200) NOT NULL DEFAULT '',
|
|
68
|
-
`state` TINYINT NOT NULL DEFAULT 1,
|
|
69
|
-
`created_at` BIGINT NOT NULL DEFAULT 0,
|
|
70
|
-
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
|
71
|
-
`deleted_at` BIGINT NULL DEFAULT NULL,
|
|
72
|
-
PRIMARY KEY (`id`)
|
|
73
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
74
|
-
|
|
75
|
-
CREATE TABLE IF NOT EXISTS `befly_dict_type` (
|
|
76
|
-
`id` BIGINT NOT NULL,
|
|
77
|
-
`code` VARCHAR(50) NOT NULL DEFAULT '',
|
|
78
|
-
`name` VARCHAR(50) NOT NULL DEFAULT '',
|
|
79
|
-
`description` VARCHAR(200) NOT NULL DEFAULT '',
|
|
80
|
-
`sort` INT NOT NULL DEFAULT 0,
|
|
81
|
-
`state` TINYINT NOT NULL DEFAULT 1,
|
|
82
|
-
`created_at` BIGINT NOT NULL DEFAULT 0,
|
|
83
|
-
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
|
84
|
-
`deleted_at` BIGINT NULL DEFAULT NULL,
|
|
85
|
-
PRIMARY KEY (`id`)
|
|
86
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
87
|
-
|
|
88
|
-
CREATE TABLE IF NOT EXISTS `befly_email_log` (
|
|
89
|
-
`id` BIGINT NOT NULL,
|
|
90
|
-
`admin_id` BIGINT NOT NULL DEFAULT 0,
|
|
91
|
-
`username` VARCHAR(100) NOT NULL DEFAULT '',
|
|
92
|
-
`nickname` VARCHAR(100) NOT NULL DEFAULT '',
|
|
93
|
-
`to_email` VARCHAR(200) NOT NULL DEFAULT '',
|
|
94
|
-
`subject` VARCHAR(200) NOT NULL DEFAULT '',
|
|
95
|
-
`content` TEXT NULL,
|
|
96
|
-
`cc_email` VARCHAR(500) NOT NULL DEFAULT '',
|
|
97
|
-
`bcc_email` VARCHAR(500) NOT NULL DEFAULT '',
|
|
98
|
-
`send_time` BIGINT NOT NULL DEFAULT 0,
|
|
99
|
-
`send_result` TINYINT NOT NULL DEFAULT 0,
|
|
100
|
-
`message_id` VARCHAR(200) NOT NULL DEFAULT '',
|
|
101
|
-
`fail_reason` VARCHAR(500) NOT NULL DEFAULT '',
|
|
102
|
-
`state` TINYINT NOT NULL DEFAULT 1,
|
|
103
|
-
`created_at` BIGINT NOT NULL DEFAULT 0,
|
|
104
|
-
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
|
105
|
-
`deleted_at` BIGINT NULL DEFAULT NULL,
|
|
106
|
-
PRIMARY KEY (`id`)
|
|
107
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
108
|
-
|
|
109
|
-
CREATE TABLE IF NOT EXISTS `befly_file` (
|
|
110
|
-
`id` BIGINT NOT NULL,
|
|
111
|
-
`user_id` BIGINT NOT NULL DEFAULT 0,
|
|
112
|
-
`file_path` VARCHAR(500) NOT NULL DEFAULT '',
|
|
113
|
-
`url` VARCHAR(1000) NOT NULL DEFAULT '',
|
|
114
|
-
`is_image` TINYINT NOT NULL DEFAULT 0,
|
|
115
|
-
`file_type` VARCHAR(20) NOT NULL DEFAULT '',
|
|
116
|
-
`file_size` BIGINT NOT NULL DEFAULT 0,
|
|
117
|
-
`file_key` VARCHAR(100) NOT NULL DEFAULT '',
|
|
118
|
-
`file_ext` VARCHAR(20) NOT NULL DEFAULT '',
|
|
119
|
-
`file_name` VARCHAR(200) NOT NULL DEFAULT '',
|
|
120
|
-
`state` TINYINT NOT NULL DEFAULT 1,
|
|
121
|
-
`created_at` BIGINT NOT NULL DEFAULT 0,
|
|
122
|
-
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
|
123
|
-
`deleted_at` BIGINT NULL DEFAULT NULL,
|
|
124
|
-
PRIMARY KEY (`id`),
|
|
125
|
-
KEY `idx_befly_file_user_id` (`user_id`),
|
|
126
|
-
KEY `idx_befly_file_is_image` (`is_image`)
|
|
127
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
128
|
-
|
|
129
|
-
CREATE TABLE IF NOT EXISTS `befly_login_log` (
|
|
130
|
-
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
131
|
-
`admin_id` BIGINT NOT NULL DEFAULT 0,
|
|
132
|
-
`username` VARCHAR(50) NOT NULL DEFAULT '',
|
|
133
|
-
`nickname` VARCHAR(50) NOT NULL DEFAULT '',
|
|
134
|
-
`ip` VARCHAR(50) NOT NULL DEFAULT '',
|
|
135
|
-
`client_type` VARCHAR(20) NOT NULL DEFAULT '',
|
|
136
|
-
`product_name` VARCHAR(100) NOT NULL DEFAULT '',
|
|
137
|
-
`product_code` VARCHAR(100) NOT NULL DEFAULT '',
|
|
138
|
-
`product_version` VARCHAR(50) NOT NULL DEFAULT '',
|
|
139
|
-
`client_version` VARCHAR(100) NOT NULL DEFAULT '',
|
|
140
|
-
`os` VARCHAR(100) NOT NULL DEFAULT '',
|
|
141
|
-
`system` VARCHAR(100) NOT NULL DEFAULT '',
|
|
142
|
-
`brand` VARCHAR(100) NOT NULL DEFAULT '',
|
|
143
|
-
`model` VARCHAR(100) NOT NULL DEFAULT '',
|
|
144
|
-
`login_time` BIGINT NOT NULL DEFAULT 0,
|
|
145
|
-
`login_result` TINYINT NOT NULL DEFAULT 0,
|
|
146
|
-
`fail_reason` VARCHAR(200) NOT NULL DEFAULT '',
|
|
147
|
-
`state` TINYINT NOT NULL DEFAULT 1,
|
|
148
|
-
`created_at` BIGINT NOT NULL DEFAULT 0,
|
|
149
|
-
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
|
150
|
-
`deleted_at` BIGINT NULL DEFAULT NULL,
|
|
151
|
-
PRIMARY KEY (`id`),
|
|
152
|
-
KEY `idx_befly_login_log_login_time` (`login_time`)
|
|
153
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
154
|
-
|
|
155
|
-
CREATE TABLE IF NOT EXISTS `befly_menu` (
|
|
156
|
-
`id` BIGINT NOT NULL,
|
|
157
|
-
`name` VARCHAR(50) NOT NULL DEFAULT '',
|
|
158
|
-
`path` VARCHAR(150) NOT NULL DEFAULT '',
|
|
159
|
-
`sort` INT NOT NULL DEFAULT 0,
|
|
160
|
-
`parent_path` VARCHAR(200) NOT NULL DEFAULT '',
|
|
161
|
-
`state` TINYINT NOT NULL DEFAULT 1,
|
|
162
|
-
`created_at` BIGINT NOT NULL DEFAULT 0,
|
|
163
|
-
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
|
164
|
-
`deleted_at` BIGINT NULL DEFAULT NULL,
|
|
165
|
-
PRIMARY KEY (`id`)
|
|
166
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
167
|
-
|
|
168
|
-
CREATE TABLE IF NOT EXISTS `befly_operate_log` (
|
|
169
|
-
`id` BIGINT NOT NULL,
|
|
170
|
-
`admin_id` BIGINT NOT NULL DEFAULT 0,
|
|
171
|
-
`username` VARCHAR(50) NOT NULL DEFAULT '',
|
|
172
|
-
`nickname` VARCHAR(50) NOT NULL DEFAULT '',
|
|
173
|
-
`ip` VARCHAR(50) NOT NULL DEFAULT '',
|
|
174
|
-
`module` VARCHAR(50) NOT NULL DEFAULT '',
|
|
175
|
-
`action` VARCHAR(50) NOT NULL DEFAULT '',
|
|
176
|
-
`method` VARCHAR(10) NOT NULL DEFAULT '',
|
|
177
|
-
`path` VARCHAR(200) NOT NULL DEFAULT '',
|
|
178
|
-
`params` TEXT NULL,
|
|
179
|
-
`result` TINYINT NOT NULL DEFAULT 0,
|
|
180
|
-
`response` TEXT NULL,
|
|
181
|
-
`duration` BIGINT NOT NULL DEFAULT 0,
|
|
182
|
-
`operate_time` BIGINT NOT NULL DEFAULT 0,
|
|
183
|
-
`remark` VARCHAR(500) NOT NULL DEFAULT '',
|
|
184
|
-
`state` TINYINT NOT NULL DEFAULT 1,
|
|
185
|
-
`created_at` BIGINT NOT NULL DEFAULT 0,
|
|
186
|
-
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
|
187
|
-
`deleted_at` BIGINT NULL DEFAULT NULL,
|
|
188
|
-
PRIMARY KEY (`id`)
|
|
189
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
190
|
-
|
|
191
|
-
CREATE TABLE IF NOT EXISTS `befly_role` (
|
|
192
|
-
`id` BIGINT NOT NULL,
|
|
193
|
-
`name` VARCHAR(50) NOT NULL DEFAULT '',
|
|
194
|
-
`code` VARCHAR(50) NOT NULL DEFAULT '',
|
|
195
|
-
`description` VARCHAR(200) NOT NULL DEFAULT '',
|
|
196
|
-
`menus` JSON NULL,
|
|
197
|
-
`apis` JSON NULL,
|
|
198
|
-
`sort` INT NOT NULL DEFAULT 0,
|
|
199
|
-
`state` TINYINT NOT NULL DEFAULT 1,
|
|
200
|
-
`created_at` BIGINT NOT NULL DEFAULT 0,
|
|
201
|
-
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
|
202
|
-
`deleted_at` BIGINT NULL DEFAULT NULL,
|
|
203
|
-
PRIMARY KEY (`id`)
|
|
204
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
205
|
-
|
|
206
|
-
CREATE TABLE IF NOT EXISTS `befly_sys_config` (
|
|
207
|
-
`id` BIGINT NOT NULL,
|
|
208
|
-
`name` VARCHAR(50) NOT NULL DEFAULT '',
|
|
209
|
-
`code` VARCHAR(100) NOT NULL DEFAULT '',
|
|
210
|
-
`value` TEXT NULL,
|
|
211
|
-
`value_type` VARCHAR(20) NOT NULL DEFAULT '',
|
|
212
|
-
`group` VARCHAR(50) NOT NULL DEFAULT '',
|
|
213
|
-
`sort` INT NOT NULL DEFAULT 0,
|
|
214
|
-
`is_system` TINYINT NOT NULL DEFAULT 0,
|
|
215
|
-
`description` VARCHAR(500) NOT NULL DEFAULT '',
|
|
216
|
-
`state` TINYINT NOT NULL DEFAULT 1,
|
|
217
|
-
`created_at` BIGINT NOT NULL DEFAULT 0,
|
|
218
|
-
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
|
219
|
-
`deleted_at` BIGINT NULL DEFAULT NULL,
|
|
220
|
-
PRIMARY KEY (`id`)
|
|
221
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
222
|
-
|
|
223
|
-
CREATE TABLE IF NOT EXISTS `befly_error_report` (
|
|
224
|
-
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
225
|
-
`report_time` BIGINT NOT NULL DEFAULT 0,
|
|
226
|
-
`first_report_time` BIGINT NOT NULL DEFAULT 0,
|
|
227
|
-
`last_report_time` BIGINT NOT NULL DEFAULT 0,
|
|
228
|
-
`bucket_time` BIGINT NOT NULL DEFAULT 0,
|
|
229
|
-
`bucket_date` INT NOT NULL DEFAULT 0,
|
|
230
|
-
`hit_count` BIGINT NOT NULL DEFAULT 1,
|
|
231
|
-
`client_type` VARCHAR(20) NOT NULL DEFAULT '',
|
|
232
|
-
`client_id` VARCHAR(120) NOT NULL DEFAULT '',
|
|
233
|
-
`member_type` VARCHAR(6) NOT NULL DEFAULT '',
|
|
234
|
-
`member` VARCHAR(200) NOT NULL DEFAULT '',
|
|
235
|
-
`user_id` BIGINT NULL DEFAULT NULL,
|
|
236
|
-
`ip` VARCHAR(50) NULL DEFAULT NULL,
|
|
237
|
-
`product_name` VARCHAR(100) NOT NULL DEFAULT '',
|
|
238
|
-
`product_code` VARCHAR(100) NOT NULL DEFAULT '',
|
|
239
|
-
`product_version` VARCHAR(100) NOT NULL DEFAULT '',
|
|
240
|
-
`page_path` VARCHAR(200) NOT NULL DEFAULT '',
|
|
241
|
-
`page_name` VARCHAR(100) NOT NULL DEFAULT '',
|
|
242
|
-
`error_type` VARCHAR(50) NOT NULL DEFAULT '',
|
|
243
|
-
`message` VARCHAR(500) NOT NULL DEFAULT '',
|
|
244
|
-
`extracted_message` VARCHAR(200) NOT NULL DEFAULT '',
|
|
245
|
-
`detail` TEXT NULL,
|
|
246
|
-
`state` TINYINT NOT NULL DEFAULT 1,
|
|
247
|
-
`created_at` BIGINT NOT NULL DEFAULT 0,
|
|
248
|
-
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
|
249
|
-
`deleted_at` BIGINT NULL DEFAULT NULL,
|
|
250
|
-
PRIMARY KEY (`id`),
|
|
251
|
-
KEY `idx_befly_error_report_time` (`report_time`),
|
|
252
|
-
KEY `idx_befly_error_report_bucket_date` (`bucket_date`),
|
|
253
|
-
UNIQUE KEY `idx_befly_error_report_unique` (`bucket_date`, `error_type`, `extracted_message`, `product_code`, `member`),
|
|
254
|
-
KEY `idx_befly_error_report_bucket_date_error_type` (`bucket_date`, `error_type`),
|
|
255
|
-
KEY `idx_befly_error_report_product_code_report_time` (`product_code`, `report_time`),
|
|
256
|
-
KEY `idx_befly_error_report_error_type_report_time` (`error_type`, `report_time`)
|
|
257
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
258
|
-
|
|
259
|
-
CREATE TABLE IF NOT EXISTS `befly_project` (
|
|
260
|
-
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
261
|
-
`code` VARCHAR(100) NOT NULL DEFAULT '',
|
|
262
|
-
`name` VARCHAR(100) NOT NULL DEFAULT '',
|
|
263
|
-
`sort` INT NOT NULL DEFAULT 0,
|
|
264
|
-
`state` TINYINT NOT NULL DEFAULT 1,
|
|
265
|
-
`created_at` BIGINT NOT NULL DEFAULT 0,
|
|
266
|
-
`updated_at` BIGINT NOT NULL DEFAULT 0,
|
|
267
|
-
`deleted_at` BIGINT NULL DEFAULT NULL,
|
|
268
|
-
PRIMARY KEY (`id`),
|
|
269
|
-
UNIQUE KEY `uk_befly_project_code` (`code`),
|
|
270
|
-
KEY `idx_befly_project_state` (`state`)
|
|
271
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
package/utils/email.js
DELETED
package/utils/fieldClear.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
// fieldClear 工具函数实现
|
|
2
|
-
// 过滤对象中指定值(如 undefined)的字段,其余字段原样保留
|
|
3
|
-
|
|
4
|
-
import { isPlainObject } from "./is.js";
|
|
5
|
-
|
|
6
|
-
export function fieldClear(data, options = {}) {
|
|
7
|
-
if (!isPlainObject(data)) {
|
|
8
|
-
return data;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const { excludeValues } = options;
|
|
12
|
-
const result = {};
|
|
13
|
-
|
|
14
|
-
for (const [key, value] of Object.entries(data)) {
|
|
15
|
-
if (excludeValues && excludeValues.length && excludeValues.includes(value)) {
|
|
16
|
-
continue;
|
|
17
|
-
}
|
|
18
|
-
result[key] = value;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
return result;
|
|
22
|
-
}
|