From e56788af3e4d08ac946ab498dd4b91ad0a82cd2b Mon Sep 17 00:00:00 2001 From: "meilin.huang" <954537473@qq.com> Date: Sun, 8 Dec 2024 13:04:23 +0800 Subject: [PATCH] refactor: dbm --- frontend/package.json | 16 +- frontend/src/common/openApi.ts | 2 +- frontend/src/common/sysmsgs.ts | 47 ++ frontend/src/common/syssocket.ts | 18 +- .../progress-notify/progress-notify.vue | 2 +- frontend/src/i18n/en/db.ts | 2 +- frontend/src/i18n/zh-cn/db.ts | 2 +- frontend/src/main.ts | 2 + frontend/src/views/ops/db/DbTransferFile.vue | 13 +- frontend/src/views/ops/db/InstanceList.vue | 2 +- frontend/src/views/ops/db/SyncTaskEdit.vue | 12 +- .../db/component/sqleditor/DbSqlEditor.vue | 45 +- .../ops/db/component/table/ColumnFormItem.vue | 46 +- .../ops/db/component/table/DbTableData.vue | 48 +- .../ops/db/component/table/DbTableDataOp.vue | 2 +- .../ops/db/component/table/DbTableOp.vue | 4 +- .../views/ops/db/dialect/postgres_dialect.ts | 3 +- frontend/src/views/ops/db/enums.ts | 2 +- server/go.mod | 8 +- server/internal/auth/api/account_login.go | 4 +- server/internal/{sys => auth}/api/captcha.go | 2 +- server/internal/auth/api/common.go | 2 +- server/internal/auth/api/ldap_login.go | 2 +- .../auth/infrastructure/persistence/oauth2.go | 2 +- .../auth}/pkg/captcha/captcha.go | 0 server/{ => internal/auth}/pkg/otp/otp.go | 0 server/internal/auth/router/account.go | 37 ++ .../internal/{sys => auth}/router/captcha.go | 4 +- server/internal/auth/router/ldap.go | 25 + server/internal/auth/router/oauth2.go | 37 ++ server/internal/auth/router/router.go | 60 +- server/internal/db/api/db.go | 52 +- server/internal/db/api/db_transfer.go | 83 +-- server/internal/db/application/db.go | 119 ++-- .../internal/db/application/db_data_sync.go | 118 ++-- server/internal/db/application/db_sql_exec.go | 150 +++-- server/internal/db/application/db_transfer.go | 315 +++------- server/internal/db/application/dto/dto.go | 8 +- .../internal/db/application/dto/sql_exec.go | 31 + server/internal/db/dbm/dbi/column.go | 594 ++++++++++++++++++ server/internal/db/dbm/dbi/conn.go | 52 +- server/internal/db/dbm/dbi/db_info.go | 15 +- server/internal/db/dbm/dbi/dialect.go | 196 +----- server/internal/db/dbm/dbi/meta.go | 55 +- server/internal/db/dbm/dbi/metadata.go | 119 +--- .../db/dbm/dbi/metasql/mysql_meta.sql | 1 + server/internal/db/dbm/dbi/quoter.go | 190 ++++++ server/internal/db/dbm/dbi/quoter_test.go | 106 ++++ server/internal/db/dbm/dbi/stmt.go | 89 +++ server/internal/db/dbm/dbi/transfer.go | 154 +++++ server/internal/db/dbm/dbi/utils.go | 9 + server/internal/db/dbm/dbm.go | 2 +- server/internal/db/dbm/dm/column.go | 106 ++++ server/internal/db/dbm/dm/dialect.go | 220 +------ server/internal/db/dbm/dm/helper.go | 278 -------- server/internal/db/dbm/dm/meta.go | 21 +- server/internal/db/dbm/dm/metadata.go | 39 +- server/internal/db/dbm/dm/sqlgen.go | 195 ++++++ server/internal/db/dbm/dm/transfer.go | 97 +++ server/internal/db/dbm/mssql/column.go | 50 ++ server/internal/db/dbm/mssql/dialect.go | 174 +---- server/internal/db/dbm/mssql/helper.go | 203 ------ server/internal/db/dbm/mssql/meta.go | 49 +- server/internal/db/dbm/mssql/metadata.go | 39 +- server/internal/db/dbm/mssql/sqlgen.go | 146 +++++ server/internal/db/dbm/mssql/transfer.go | 97 +++ server/internal/db/dbm/mysql/column.go | 48 ++ server/internal/db/dbm/mysql/dialect.go | 186 +----- server/internal/db/dbm/mysql/helper.go | 217 ------- server/internal/db/dbm/mysql/meta.go | 26 +- server/internal/db/dbm/mysql/metadata.go | 40 +- server/internal/db/dbm/mysql/program.go | 4 +- server/internal/db/dbm/mysql/sqlgen.go | 147 +++++ server/internal/db/dbm/mysql/transfer.go | 108 ++++ server/internal/db/dbm/oracle/column.go | 45 ++ server/internal/db/dbm/oracle/dialect.go | 42 +- server/internal/db/dbm/oracle/helper.go | 158 ----- server/internal/db/dbm/oracle/meta.go | 38 +- server/internal/db/dbm/oracle/metadata.go | 38 +- server/internal/db/dbm/oracle/metadata11.go | 9 +- server/internal/db/dbm/oracle/sqlgen.go | 226 +++++++ server/internal/db/dbm/oracle/transfer.go | 97 +++ server/internal/db/dbm/postgres/column.go | 31 + server/internal/db/dbm/postgres/dialect.go | 282 +-------- server/internal/db/dbm/postgres/helper.go | 198 +----- server/internal/db/dbm/postgres/meta.go | 29 +- server/internal/db/dbm/postgres/metadata.go | 50 +- server/internal/db/dbm/postgres/sqlgen.go | 263 ++++++++ server/internal/db/dbm/postgres/transfer.go | 97 +++ server/internal/db/dbm/sqlite/column.go | 14 + server/internal/db/dbm/sqlite/dialect.go | 139 +--- server/internal/db/dbm/sqlite/helper.go | 170 ----- server/internal/db/dbm/sqlite/meta.go | 20 +- server/internal/db/dbm/sqlite/metadata.go | 11 +- server/internal/db/dbm/sqlite/sqlgen.go | 123 ++++ server/internal/db/dbm/sqlite/transfer.go | 97 +++ server/internal/db/domain/entity/db_job.go | 2 +- server/internal/db/imsg/en.go | 2 +- server/internal/db/imsg/zh_cn.go | 2 +- .../db/infrastructure/persistence/db.go | 2 +- .../infrastructure/persistence/db_backup.go | 1 - .../infrastructure/persistence/db_binlog.go | 4 +- .../persistence/db_binlog_history.go | 4 +- .../persistence/db_data_sync.go | 4 +- .../infrastructure/persistence/db_restore.go | 4 +- .../persistence/db_restore_history.go | 4 +- .../db/infrastructure/persistence/db_sql.go | 2 +- .../infrastructure/persistence/db_sql_exec.go | 2 +- .../infrastructure/persistence/db_transfer.go | 2 +- .../persistence/db_transfer_file.go | 2 +- .../db/infrastructure/persistence/instance.go | 2 +- .../file/infrastructure/persistence/file.go | 2 +- .../infrastructure/persistence/procdef.go | 2 +- .../infrastructure/persistence/procinst.go | 4 +- .../infrastructure/persistence/machine.go | 2 +- .../persistence/machine_cmd_conf.go | 2 +- .../persistence/machine_cronjob.go | 2 +- .../persistence/machine_cronjob_exec.go | 2 +- .../persistence/machine_file.go | 2 +- .../persistence/machine_script.go | 2 +- .../persistence/machine_term_op.go | 2 +- .../mongo/infrastructure/persistence/mongo.go | 2 +- .../internal/msg/application/dto/sys_msg.go | 4 - .../msg/infrastructure/persistence/msg.go | 2 +- .../infrastructure/persistence/redis_repo.go | 2 +- .../sys/infrastructure/persistence/account.go | 2 +- .../persistence/account_role.go | 2 +- .../sys/infrastructure/persistence/config.go | 2 +- .../infrastructure/persistence/resource.go | 4 +- .../sys/infrastructure/persistence/role.go | 2 +- .../persistence/role_resource.go | 2 +- .../sys/infrastructure/persistence/syslog.go | 2 +- server/internal/sys/router/router.go | 1 - .../persistence/resource_auth_cert.go | 2 +- .../persistence/resource_op_log.go | 2 +- .../infrastructure/persistence/tag_tree.go | 2 +- .../persistence/tag_tree_relate.go | 2 +- .../tag/infrastructure/persistence/team.go | 2 +- .../infrastructure/persistence/team_member.go | 2 +- server/migrations/init.go | 1 + server/pkg/base/app.go | 32 +- server/pkg/base/ctx.go | 29 +- server/pkg/base/repo.go | 38 +- server/pkg/base/sql.go | 111 ---- server/pkg/base/sql_test.go | 28 - server/pkg/enumx/enumx.go | 2 +- server/pkg/gormx/gormx.go | 2 +- server/pkg/utils/collx/array.go | 2 +- server/pkg/utils/jsonx/jsonx.go | 5 +- server/pkg/utils/stringx/stringx.go | 39 +- server/pkg/utils/stringx/stringx_test.go | 17 +- server/pkg/utils/timex/timex.go | 6 + 152 files changed, 4273 insertions(+), 3715 deletions(-) create mode 100644 frontend/src/common/sysmsgs.ts rename server/internal/{sys => auth}/api/captcha.go (88%) rename server/{ => internal/auth}/pkg/captcha/captcha.go (100%) rename server/{ => internal/auth}/pkg/otp/otp.go (100%) create mode 100644 server/internal/auth/router/account.go rename server/internal/{sys => auth}/router/captcha.go (70%) create mode 100644 server/internal/auth/router/ldap.go create mode 100644 server/internal/auth/router/oauth2.go create mode 100644 server/internal/db/application/dto/sql_exec.go create mode 100644 server/internal/db/dbm/dbi/column.go create mode 100644 server/internal/db/dbm/dbi/quoter.go create mode 100644 server/internal/db/dbm/dbi/quoter_test.go create mode 100644 server/internal/db/dbm/dbi/stmt.go create mode 100644 server/internal/db/dbm/dbi/transfer.go create mode 100644 server/internal/db/dbm/dbi/utils.go create mode 100644 server/internal/db/dbm/dm/column.go create mode 100644 server/internal/db/dbm/dm/sqlgen.go create mode 100644 server/internal/db/dbm/dm/transfer.go create mode 100644 server/internal/db/dbm/mssql/column.go create mode 100644 server/internal/db/dbm/mssql/sqlgen.go create mode 100644 server/internal/db/dbm/mssql/transfer.go create mode 100644 server/internal/db/dbm/mysql/column.go create mode 100644 server/internal/db/dbm/mysql/sqlgen.go create mode 100644 server/internal/db/dbm/mysql/transfer.go create mode 100644 server/internal/db/dbm/oracle/column.go create mode 100644 server/internal/db/dbm/oracle/sqlgen.go create mode 100644 server/internal/db/dbm/oracle/transfer.go create mode 100644 server/internal/db/dbm/postgres/column.go create mode 100644 server/internal/db/dbm/postgres/sqlgen.go create mode 100644 server/internal/db/dbm/postgres/transfer.go create mode 100644 server/internal/db/dbm/sqlite/column.go create mode 100644 server/internal/db/dbm/sqlite/sqlgen.go create mode 100644 server/internal/db/dbm/sqlite/transfer.go delete mode 100644 server/pkg/base/sql.go delete mode 100644 server/pkg/base/sql_test.go diff --git a/frontend/package.json b/frontend/package.json index 874ecfe5..3d23e514 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "@element-plus/icons-vue": "^2.3.1", - "@vueuse/core": "^11.3.0", + "@vueuse/core": "^12.0.0", "asciinema-player": "^3.8.1", "axios": "^1.6.2", "clipboard": "^2.0.11", @@ -19,7 +19,7 @@ "crypto-js": "^4.2.0", "dayjs": "^1.11.13", "echarts": "^5.5.1", - "element-plus": "^2.8.8", + "element-plus": "^2.9.0", "js-base64": "^3.7.7", "jsencrypt": "^3.3.2", "lodash": "^4.17.21", @@ -28,16 +28,16 @@ "monaco-sql-languages": "^0.12.2", "monaco-themes": "^0.4.4", "nprogress": "^0.2.0", - "pinia": "^2.2.7", - "qrcode.vue": "^3.5.1", + "pinia": "^2.3.0", + "qrcode.vue": "^3.6.0", "screenfull": "^6.0.2", - "sortablejs": "^1.15.3", + "sortablejs": "^1.15.6", "splitpanes": "^3.1.5", "sql-formatter": "^15.4.5", "trzsz": "^1.1.5", "uuid": "^9.0.1", "vue": "^3.5.13", - "vue-i18n": "^10.0.4", + "vue-i18n": "^10.0.5", "vue-router": "^4.5.0", "xterm": "^5.3.0", "xterm-addon-fit": "^0.8.0", @@ -59,9 +59,9 @@ "eslint": "^8.35.0", "eslint-plugin-vue": "^9.31.0", "prettier": "^3.2.5", - "sass": "^1.81.0", + "sass": "^1.82.0", "typescript": "^5.7.2", - "vite": "^6.0.1", + "vite": "^6.0.3", "vue-eslint-parser": "^9.4.3" }, "browserslist": [ diff --git a/frontend/src/common/openApi.ts b/frontend/src/common/openApi.ts index fc6322e8..eb5a116c 100644 --- a/frontend/src/common/openApi.ts +++ b/frontend/src/common/openApi.ts @@ -7,7 +7,7 @@ export default { getPublicKey: () => request.get('/common/public-key'), getConfigValue: (params: any) => request.get('/sys/configs/value', params), getServerConf: () => request.get('/sys/configs/server'), - oauth2LoginConfig: () => request.get('/auth/oauth2-config'), + oauth2LoginConfig: () => request.get('/auth/oauth2/config'), changePwd: (param: any) => request.post('/sys/accounts/change-pwd', param), captcha: () => request.get('/sys/captcha'), logout: () => request.post('/auth/accounts/logout'), diff --git a/frontend/src/common/sysmsgs.ts b/frontend/src/common/sysmsgs.ts new file mode 100644 index 00000000..009b81b6 --- /dev/null +++ b/frontend/src/common/sysmsgs.ts @@ -0,0 +1,47 @@ +import { buildProgressProps } from '@/components/progress-notify/progress-notify'; +import syssocket from './syssocket'; +import { h, reactive } from 'vue'; +import { ElNotification } from 'element-plus'; +import ProgressNotify from '@/components/progress-notify/progress-notify.vue'; + +export function initSysMsgs() { + registerDbSqlExecProgress(); +} + +const sqlExecNotifyMap: Map = new Map(); + +function registerDbSqlExecProgress() { + syssocket.registerMsgHandler('execSqlFileProgress', function (message: any) { + const content = JSON.parse(message.msg); + const id = content.id; + let progress = sqlExecNotifyMap.get(id); + if (content.terminated) { + if (progress != undefined) { + progress.notification?.close(); + sqlExecNotifyMap.delete(id); + progress = undefined; + } + return; + } + + if (progress == undefined) { + progress = { + props: reactive(buildProgressProps()), + notification: undefined, + }; + } + + progress.props.progress.title = content.title; + progress.props.progress.executedStatements = content.executedStatements; + if (!sqlExecNotifyMap.has(id)) { + progress.notification = ElNotification({ + duration: 0, + title: message.title, + message: h(ProgressNotify, progress.props), + type: syssocket.getMsgType(message.type), + showClose: false, + }); + sqlExecNotifyMap.set(id, progress); + } + }); +} diff --git a/frontend/src/common/syssocket.ts b/frontend/src/common/syssocket.ts index fc17468c..e7b6148c 100644 --- a/frontend/src/common/syssocket.ts +++ b/frontend/src/common/syssocket.ts @@ -1,9 +1,9 @@ import Config from './config'; -import {ElNotification} from 'element-plus'; import SocketBuilder from './SocketBuilder'; -import {getToken} from '@/common/utils/storage'; +import { getToken } from '@/common/utils/storage'; -import {joinClientParams} from './request'; +import { joinClientParams } from './request'; +import { ElNotification } from 'element-plus'; class SysSocket { /** @@ -23,7 +23,6 @@ class SysSocket { 0: 'error', 1: 'success', 2: 'info', - 22: 'info', }; /** @@ -57,21 +56,16 @@ class SysSocket { return; } + // 默认通知处理 const type = this.getMsgType(message.type); - let msg = message.msg - let duration = 0 - if (message.type == 22) { - let obj = JSON.parse(msg); - msg = `文件:${obj['title']} 执行成功: ${obj['executedStatements']} 条` - duration = 2000 - } + let msg = message.msg; + let duration = 0; ElNotification({ duration: duration, title: message.title, message: msg, type: type, }); - console.log(message) }) .open((event: any) => console.log(event)) .close(() => { diff --git a/frontend/src/components/progress-notify/progress-notify.vue b/frontend/src/components/progress-notify/progress-notify.vue index a0dcf230..09527e6b 100644 --- a/frontend/src/components/progress-notify/progress-notify.vue +++ b/frontend/src/components/progress-notify/progress-notify.vue @@ -1,5 +1,5 @@