diff --git a/mayfly_go_web/.eslintrc.js b/mayfly_go_web/.eslintrc.js
index bad6addb..d48dcf86 100644
--- a/mayfly_go_web/.eslintrc.js
+++ b/mayfly_go_web/.eslintrc.js
@@ -1,76 +1,76 @@
module.exports = {
- root: true,
- env: {
- browser: true,
- es2021: true,
- node: true,
- },
- parser: 'vue-eslint-parser',
- parserOptions: {
- ecmaVersion: 12,
- parser: '@typescript-eslint/parser',
- sourceType: 'module',
- },
- extends: ['plugin:vue/vue3-essential', 'plugin:vue/essential', 'eslint:recommended'],
- plugins: ['vue', '@typescript-eslint'],
- overrides: [
- {
- files: ['*.ts', '*.tsx', '*.vue'],
- rules: {
- 'no-undef': 'off',
- },
- },
- ],
- rules: {
- // http://eslint.cn/docs/rules/
- // https://eslint.vuejs.org/rules/
- // https://typescript-eslint.io/rules/no-unused-vars/
- '@typescript-eslint/ban-ts-ignore': 'off',
- '@typescript-eslint/explicit-function-return-type': 'off',
- '@typescript-eslint/no-explicit-any': 'off',
- '@typescript-eslint/no-var-requires': 'off',
- '@typescript-eslint/no-empty-function': 'off',
- '@typescript-eslint/no-use-before-define': 'off',
- '@typescript-eslint/ban-ts-comment': 'off',
- '@typescript-eslint/ban-types': 'off',
- '@typescript-eslint/no-non-null-assertion': 'off',
- '@typescript-eslint/explicit-module-boundary-types': 'off',
- '@typescript-eslint/no-redeclare': 'error',
- '@typescript-eslint/no-non-null-asserted-optional-chain': 'off',
- '@typescript-eslint/no-unused-vars': [2],
- 'vue/custom-event-name-casing': 'off',
- 'vue/attributes-order': 'off',
- 'vue/one-component-per-file': 'off',
- 'vue/html-closing-bracket-newline': 'off',
- 'vue/max-attributes-per-line': 'off',
- 'vue/multiline-html-element-content-newline': 'off',
- 'vue/singleline-html-element-content-newline': 'off',
- 'vue/attribute-hyphenation': 'off',
- 'vue/html-self-closing': 'off',
- 'vue/no-multiple-template-root': 'off',
- 'vue/require-default-prop': 'off',
- 'vue/no-v-model-argument': 'off',
- 'vue/no-arrow-functions-in-watch': 'off',
- 'vue/no-template-key': 'off',
- 'vue/no-v-html': 'off',
- 'vue/comment-directive': 'off',
- 'vue/no-parsing-error': 'off',
- 'vue/no-deprecated-v-on-native-modifier': 'off',
- 'vue/multi-word-component-names': 'off',
- 'no-useless-escape': 'off',
- 'no-sparse-arrays': 'off',
- 'no-prototype-builtins': 'off',
- 'no-constant-condition': 'off',
- 'no-use-before-define': 'off',
- 'no-restricted-globals': 'off',
- 'no-restricted-syntax': 'off',
- 'generator-star-spacing': 'off',
- 'no-unreachable': 'off',
- 'no-multiple-template-root': 'off',
- 'no-unused-vars': 'error',
- 'no-v-model-argument': 'off',
- 'no-case-declarations': 'off',
- 'no-console': 'error',
- 'no-redeclare': 'off',
- },
-};
\ No newline at end of file
+ root: true,
+ env: {
+ browser: true,
+ es2021: true,
+ node: true,
+ },
+ parser: 'vue-eslint-parser',
+ parserOptions: {
+ ecmaVersion: 12,
+ parser: '@typescript-eslint/parser',
+ sourceType: 'module',
+ },
+ extends: ['plugin:vue/vue3-essential', 'plugin:vue/essential', 'eslint:recommended'],
+ plugins: ['vue', '@typescript-eslint'],
+ overrides: [
+ {
+ files: ['*.ts', '*.tsx', '*.vue'],
+ rules: {
+ 'no-undef': 'off',
+ },
+ },
+ ],
+ rules: {
+ // http://eslint.cn/docs/rules/
+ // https://eslint.vuejs.org/rules/
+ // https://typescript-eslint.io/rules/no-unused-vars/
+ '@typescript-eslint/ban-ts-ignore': 'off',
+ '@typescript-eslint/explicit-function-return-type': 'off',
+ '@typescript-eslint/no-explicit-any': 'off',
+ '@typescript-eslint/no-var-requires': 'off',
+ '@typescript-eslint/no-empty-function': 'off',
+ '@typescript-eslint/no-use-before-define': 'off',
+ '@typescript-eslint/ban-ts-comment': 'off',
+ '@typescript-eslint/ban-types': 'off',
+ '@typescript-eslint/no-non-null-assertion': 'off',
+ '@typescript-eslint/explicit-module-boundary-types': 'off',
+ '@typescript-eslint/no-redeclare': 'error',
+ '@typescript-eslint/no-non-null-asserted-optional-chain': 'off',
+ '@typescript-eslint/no-unused-vars': [2],
+ 'vue/custom-event-name-casing': 'off',
+ 'vue/attributes-order': 'off',
+ 'vue/one-component-per-file': 'off',
+ 'vue/html-closing-bracket-newline': 'off',
+ 'vue/max-attributes-per-line': 'off',
+ 'vue/multiline-html-element-content-newline': 'off',
+ 'vue/singleline-html-element-content-newline': 'off',
+ 'vue/attribute-hyphenation': 'off',
+ 'vue/html-self-closing': 'off',
+ 'vue/no-multiple-template-root': 'off',
+ 'vue/require-default-prop': 'off',
+ 'vue/no-v-model-argument': 'off',
+ 'vue/no-arrow-functions-in-watch': 'off',
+ 'vue/no-template-key': 'off',
+ 'vue/no-v-html': 'off',
+ 'vue/comment-directive': 'off',
+ 'vue/no-parsing-error': 'off',
+ 'vue/no-deprecated-v-on-native-modifier': 'off',
+ 'vue/multi-word-component-names': 'off',
+ 'no-useless-escape': 'off',
+ 'no-sparse-arrays': 'off',
+ 'no-prototype-builtins': 'off',
+ 'no-constant-condition': 'off',
+ 'no-use-before-define': 'off',
+ 'no-restricted-globals': 'off',
+ 'no-restricted-syntax': 'off',
+ 'generator-star-spacing': 'off',
+ 'no-unreachable': 'off',
+ 'no-multiple-template-root': 'off',
+ 'no-unused-vars': 'error',
+ 'no-v-model-argument': 'off',
+ 'no-case-declarations': 'off',
+ // 'no-console': 'error',
+ 'no-redeclare': 'off',
+ },
+};
diff --git a/mayfly_go_web/src/components/progress-notify/progress-notify.ts b/mayfly_go_web/src/components/progress-notify/progress-notify.ts
index 396536cb..48e93572 100644
--- a/mayfly_go_web/src/components/progress-notify/progress-notify.ts
+++ b/mayfly_go_web/src/components/progress-notify/progress-notify.ts
@@ -1,14 +1,12 @@
-export const buildProgressProps = () : any => {
+export const buildProgressProps = (): any => {
return {
progress: {
sqlFileName: {
- type: String
+ type: String,
},
executedStatements: {
- type: Number
+ type: Number,
},
},
};
-}
-
-
+};
diff --git a/mayfly_go_web/src/components/progress-notify/progress-notify.vue b/mayfly_go_web/src/components/progress-notify/progress-notify.vue
index 62d40f94..e366ae72 100644
--- a/mayfly_go_web/src/components/progress-notify/progress-notify.vue
+++ b/mayfly_go_web/src/components/progress-notify/progress-notify.vue
@@ -1,41 +1,34 @@
-
+
{{ state.elapsedTime }}
{{ progress.executedStatements }}
\ No newline at end of file
+
diff --git a/mayfly_go_web/src/views/login/component/AccountLogin.vue b/mayfly_go_web/src/views/login/component/AccountLogin.vue
index 234a71d6..f0a36f38 100644
--- a/mayfly_go_web/src/views/login/component/AccountLogin.vue
+++ b/mayfly_go_web/src/views/login/component/AccountLogin.vue
@@ -160,7 +160,7 @@ const baseInfoFormRef: any = ref(null);
const state = reactive({
accountLoginSecurity: {
- useCaptcha: true,
+ useCaptcha: false,
useOtp: false,
loginFailCount: 5,
loginFailMin: 10,
diff --git a/server/go.mod b/server/go.mod
index 5ea46c5b..341230d3 100644
--- a/server/go.mod
+++ b/server/go.mod
@@ -28,13 +28,9 @@ require (
golang.org/x/oauth2 v0.13.0
gopkg.in/yaml.v3 v3.0.1
// gorm
- gorm.io/driver/mysql v1.5.1
- gorm.io/gorm v1.25.4
-)
-
-require (
- github.com/xwb1989/sqlparser v0.0.0-20180606152119-120387863bf2
- gorm.io/driver/sqlite v1.5.1
+ gorm.io/driver/mysql v1.5.2
+ gorm.io/driver/sqlite v1.5.4
+ gorm.io/gorm v1.25.5
)
require (
@@ -61,7 +57,7 @@ require (
github.com/kr/fs v0.1.0 // indirect
github.com/leodido/go-urn v1.2.4 // indirect
github.com/mattn/go-isatty v0.0.19 // indirect
- github.com/mattn/go-sqlite3 v1.14.16 // indirect
+ github.com/mattn/go-sqlite3 v1.14.17 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/montanaflynn/stats v0.7.0 // indirect
diff --git a/server/internal/auth/api/account_login.go b/server/internal/auth/api/account_login.go
index 788d26f7..09e3008f 100644
--- a/server/internal/auth/api/account_login.go
+++ b/server/internal/auth/api/account_login.go
@@ -15,8 +15,8 @@ import (
"mayfly-go/pkg/ginx"
"mayfly-go/pkg/otp"
"mayfly-go/pkg/req"
+ "mayfly-go/pkg/utils/collx"
"mayfly-go/pkg/utils/cryptox"
- "mayfly-go/pkg/utils/jsonx"
"mayfly-go/pkg/ws"
"strconv"
"time"
@@ -43,7 +43,7 @@ func (a *AccountLogin) Login(rc *req.Ctx) {
username := loginForm.Username
clientIp := getIpAndRegion(rc)
- rc.ReqParam = jsonx.Kvs("username", username, "ip", clientIp)
+ rc.ReqParam = collx.Kvs("username", username, "ip", clientIp)
originPwd, err := cryptox.DefaultRsaDecrypt(loginForm.Password, true)
biz.ErrIsNilAppendErr(err, "解密密码错误: %s")
diff --git a/server/internal/auth/api/common.go b/server/internal/auth/api/common.go
index 6bbeb486..96f4aa75 100644
--- a/server/internal/auth/api/common.go
+++ b/server/internal/auth/api/common.go
@@ -11,6 +11,7 @@ import (
"mayfly-go/pkg/cache"
"mayfly-go/pkg/otp"
"mayfly-go/pkg/req"
+ "mayfly-go/pkg/utils/collx"
"mayfly-go/pkg/utils/jsonx"
"mayfly-go/pkg/utils/netx"
"mayfly-go/pkg/utils/stringx"
@@ -29,7 +30,7 @@ func LastLoginCheck(account *sysentity.Account, accountLoginSecurity *config.Acc
biz.IsTrue(account.IsEnable(), "该账号不可用")
username := account.Username
- res := map[string]any{
+ res := collx.M{
"name": account.Name,
"username": username,
"lastLoginTime": account.LastLoginTime,
diff --git a/server/internal/auth/api/ldap_login.go b/server/internal/auth/api/ldap_login.go
index 6f319c64..621ec1f1 100644
--- a/server/internal/auth/api/ldap_login.go
+++ b/server/internal/auth/api/ldap_login.go
@@ -13,8 +13,8 @@ import (
"mayfly-go/pkg/captcha"
"mayfly-go/pkg/ginx"
"mayfly-go/pkg/req"
+ "mayfly-go/pkg/utils/collx"
"mayfly-go/pkg/utils/cryptox"
- "mayfly-go/pkg/utils/jsonx"
"strconv"
"strings"
"time"
@@ -49,7 +49,7 @@ func (a *LdapLogin) Login(rc *req.Ctx) {
username := loginForm.Username
clientIp := getIpAndRegion(rc)
- rc.ReqParam = jsonx.Kvs("username", username, "ip", clientIp)
+ rc.ReqParam = collx.Kvs("username", username, "ip", clientIp)
originPwd, err := cryptox.DefaultRsaDecrypt(loginForm.Password, true)
biz.ErrIsNilAppendErr(err, "解密密码错误: %s")
diff --git a/server/internal/auth/api/oauth2_login.go b/server/internal/auth/api/oauth2_login.go
index 14472120..7e9f1c66 100644
--- a/server/internal/auth/api/oauth2_login.go
+++ b/server/internal/auth/api/oauth2_login.go
@@ -14,6 +14,7 @@ import (
"mayfly-go/pkg/cache"
"mayfly-go/pkg/model"
"mayfly-go/pkg/req"
+ "mayfly-go/pkg/utils/collx"
"mayfly-go/pkg/utils/jsonx"
"mayfly-go/pkg/utils/stringx"
"net/http"
@@ -98,7 +99,7 @@ func (a *Oauth2Login) OAuth2Callback(rc *req.Ctx) {
account.Id = accountId
err = a.AccountApp.GetAccount(account, "username")
biz.ErrIsNilAppendErr(err, "该账号不存在")
- rc.ReqParam = jsonx.Kvs("username", account.Username, "type", "bind")
+ rc.ReqParam = collx.Kvs("username", account.Username, "type", "bind")
err = a.Oauth2App.GetOAuthAccount(&entity.Oauth2Account{
AccountId: accountId,
@@ -118,7 +119,7 @@ func (a *Oauth2Login) OAuth2Callback(rc *req.Ctx) {
UpdateTime: &now,
})
biz.ErrIsNilAppendErr(err, "绑定用户失败: %s")
- res := map[string]any{
+ res := collx.M{
"action": "oauthBind",
"bind": true,
}
@@ -173,7 +174,7 @@ func (a *Oauth2Login) doLoginAction(rc *req.Ctx, userId string, oauth *config.Oa
biz.ErrIsNilAppendErr(err, "获取用户信息失败: %s")
clientIp := getIpAndRegion(rc)
- rc.ReqParam = jsonx.Kvs("username", account.Username, "ip", clientIp, "type", "login")
+ rc.ReqParam = collx.Kvs("username", account.Username, "ip", clientIp, "type", "login")
res := LastLoginCheck(account, config.GetAccountLoginSecurity(), clientIp)
res["action"] = "oauthLogin"
@@ -220,7 +221,7 @@ func (a *Oauth2Login) Oauth2Unbind(rc *req.Ctx) {
// 获取oauth2登录配置信息,因为有些字段是敏感字段,故单独使用接口获取
func (c *Oauth2Login) Oauth2Config(rc *req.Ctx) {
oauth2LoginConfig := config.GetOauth2Login()
- rc.ResData = map[string]any{
+ rc.ResData = collx.M{
"enable": oauth2LoginConfig.Enable,
"name": oauth2LoginConfig.Name,
}
diff --git a/server/internal/common/api/index.go b/server/internal/common/api/index.go
index 476759a4..279a59c0 100644
--- a/server/internal/common/api/index.go
+++ b/server/internal/common/api/index.go
@@ -11,6 +11,7 @@ import (
redisentity "mayfly-go/internal/redis/domain/entity"
tagapp "mayfly-go/internal/tag/application"
"mayfly-go/pkg/req"
+ "mayfly-go/pkg/utils/collx"
)
type Index struct {
@@ -36,7 +37,7 @@ func (i *Index) Count(rc *req.Ctx) {
dbNum = i.DbApp.Count(&dbentity.DbQuery{TagIds: tagIds})
redisNum = i.RedisApp.Count(&redisentity.RedisQuery{TagIds: tagIds})
}
- rc.ResData = map[string]any{
+ rc.ResData = collx.M{
"mongoNum": mongoNum,
"machineNum": machienNum,
"dbNum": dbNum,
diff --git a/server/internal/db/application/db_sql_exec.go b/server/internal/db/application/db_sql_exec.go
index 1490bb50..a5f977b3 100644
--- a/server/internal/db/application/db_sql_exec.go
+++ b/server/internal/db/application/db_sql_exec.go
@@ -3,7 +3,6 @@ package application
import (
"encoding/json"
"fmt"
- "github.com/kanzihuang/vitess/go/vt/sqlparser"
"mayfly-go/internal/db/config"
"mayfly-go/internal/db/domain/entity"
"mayfly-go/internal/db/domain/repository"
@@ -11,6 +10,8 @@ import (
"mayfly-go/pkg/model"
"strconv"
"strings"
+
+ "github.com/kanzihuang/vitess/go/vt/sqlparser"
)
type DbSqlExecReq struct {
diff --git a/server/internal/machine/api/machine.go b/server/internal/machine/api/machine.go
index 89b8d8fa..bf94621a 100644
--- a/server/internal/machine/api/machine.go
+++ b/server/internal/machine/api/machine.go
@@ -14,7 +14,7 @@ import (
"mayfly-go/pkg/ginx"
"mayfly-go/pkg/model"
"mayfly-go/pkg/req"
- "mayfly-go/pkg/utils/jsonx"
+ "mayfly-go/pkg/utils/collx"
"mayfly-go/pkg/utils/stringx"
"mayfly-go/pkg/ws"
"os"
@@ -86,7 +86,7 @@ func (m *Machine) ChangeStatus(rc *req.Ctx) {
g := rc.GinCtx
id := uint64(ginx.PathParamInt(g, "machineId"))
status := int8(ginx.PathParamInt(g, "status"))
- rc.ReqParam = jsonx.Kvs("id", id, "status", status)
+ rc.ReqParam = collx.Kvs("id", id, "status", status)
m.MachineApp.ChangeStatus(id, status)
}
diff --git a/server/internal/machine/api/machine_file.go b/server/internal/machine/api/machine_file.go
index 2dadc31f..8e0042e0 100644
--- a/server/internal/machine/api/machine_file.go
+++ b/server/internal/machine/api/machine_file.go
@@ -16,7 +16,6 @@ import (
"mayfly-go/pkg/logx"
"mayfly-go/pkg/req"
"mayfly-go/pkg/utils/collx"
- "mayfly-go/pkg/utils/jsonx"
"mayfly-go/pkg/utils/timex"
"mime/multipart"
"path/filepath"
@@ -68,7 +67,7 @@ func (m *MachineFile) CreateFile(rc *req.Ctx) {
form := ginx.BindJsonAndValid(g, new(form.MachineCreateFileForm))
path := form.Path
- attrs := jsonx.Kvs("path", path)
+ attrs := collx.Kvs("path", path)
var mi *machine.Info
var err error
if form.Type == dir {
@@ -90,7 +89,7 @@ func (m *MachineFile) ReadFileContent(rc *req.Ctx) {
readType := g.Query("type")
sftpFile, mi, err := m.MachineFileApp.ReadFile(fid, readPath)
- rc.ReqParam = jsonx.Kvs("machine", mi, "path", readPath)
+ rc.ReqParam = collx.Kvs("machine", mi, "path", readPath)
biz.ErrIsNilAppendErr(err, "打开文件失败: %s")
defer sftpFile.Close()
@@ -163,7 +162,7 @@ func (m *MachineFile) WriteFileContent(rc *req.Ctx) {
path := form.Path
mi, err := m.MachineFileApp.WriteFileContent(fid, path, []byte(form.Content))
- rc.ReqParam = jsonx.Kvs("machine", mi, "path", path)
+ rc.ReqParam = collx.Kvs("machine", mi, "path", path)
biz.ErrIsNilAppendErr(err, "打开文件失败: %s")
}
@@ -193,7 +192,7 @@ func (m *MachineFile) UploadFile(rc *req.Ctx) {
}()
mi, err := m.MachineFileApp.UploadFile(fid, path, fileheader.Filename, file)
- rc.ReqParam = jsonx.Kvs("machine", mi, "path", fmt.Sprintf("%s/%s", path, fileheader.Filename))
+ rc.ReqParam = collx.Kvs("machine", mi, "path", fmt.Sprintf("%s/%s", path, fileheader.Filename))
biz.ErrIsNilAppendErr(err, "创建文件失败: %s")
// 保存消息并发送文件上传成功通知
m.MsgApp.CreateAndSend(la, msgdto.SuccessSysMsg("文件上传成功", fmt.Sprintf("[%s]文件已成功上传至 %s[%s:%s]", fileheader.Filename, mi.Name, mi.Ip, path)))
@@ -226,7 +225,7 @@ func (m *MachineFile) UploadFolder(rc *req.Ctx) {
mcli := m.MachineFileApp.GetMachineCli(fid, basePath+"/"+folderName)
mi := mcli.GetMachine()
sftpCli := mcli.GetSftpCli()
- rc.ReqParam = jsonx.Kvs("machine", mi, "path", fmt.Sprintf("%s/%s", basePath, folderName))
+ rc.ReqParam = collx.Kvs("machine", mi, "path", fmt.Sprintf("%s/%s", basePath, folderName))
folderFiles := make([]FolderFile, len(paths))
// 先创建目录,并将其包装为folderFile结构
@@ -297,7 +296,7 @@ func (m *MachineFile) RemoveFile(rc *req.Ctx) {
ginx.BindJsonAndValid(g, rmForm)
mi, err := m.MachineFileApp.RemoveFile(fid, rmForm.Path...)
- rc.ReqParam = jsonx.Kvs("machine", mi, "path", rmForm.Path)
+ rc.ReqParam = collx.Kvs("machine", mi, "path", rmForm.Path)
biz.ErrIsNilAppendErr(err, "删除文件失败: %s")
}
@@ -309,7 +308,7 @@ func (m *MachineFile) CopyFile(rc *req.Ctx) {
ginx.BindJsonAndValid(g, cpForm)
mi, err := m.MachineFileApp.Copy(fid, cpForm.ToPath, cpForm.Path...)
biz.ErrIsNilAppendErr(err, "文件拷贝失败: %s")
- rc.ReqParam = jsonx.Kvs("machine", mi, "cp", cpForm)
+ rc.ReqParam = collx.Kvs("machine", mi, "cp", cpForm)
}
func (m *MachineFile) MvFile(rc *req.Ctx) {
@@ -319,7 +318,7 @@ func (m *MachineFile) MvFile(rc *req.Ctx) {
cpForm := new(form.MachineFileOpForm)
ginx.BindJsonAndValid(g, cpForm)
mi, err := m.MachineFileApp.Mv(fid, cpForm.ToPath, cpForm.Path...)
- rc.ReqParam = jsonx.Kvs("machine", mi, "mv", cpForm)
+ rc.ReqParam = collx.Kvs("machine", mi, "mv", cpForm)
biz.ErrIsNilAppendErr(err, "文件移动失败: %s")
}
@@ -330,7 +329,7 @@ func (m *MachineFile) Rename(rc *req.Ctx) {
rename := new(form.MachineFileRename)
ginx.BindJsonAndValid(g, rename)
mi, err := m.MachineFileApp.Rename(fid, rename.Oldname, rename.Newname)
- rc.ReqParam = jsonx.Kvs("machine", mi, "rename", rename)
+ rc.ReqParam = collx.Kvs("machine", mi, "rename", rename)
biz.ErrIsNilAppendErr(err, "文件重命名失败: %s")
}
diff --git a/server/internal/machine/api/machine_script.go b/server/internal/machine/api/machine_script.go
index b527c8bc..3e86c805 100644
--- a/server/internal/machine/api/machine_script.go
+++ b/server/internal/machine/api/machine_script.go
@@ -9,6 +9,7 @@ import (
"mayfly-go/pkg/biz"
"mayfly-go/pkg/ginx"
"mayfly-go/pkg/req"
+ "mayfly-go/pkg/utils/collx"
"mayfly-go/pkg/utils/jsonx"
"mayfly-go/pkg/utils/stringx"
"strconv"
@@ -70,7 +71,7 @@ func (m *MachineScript) RunMachineScript(rc *req.Ctx) {
res, err := cli.Run(script)
// 记录请求参数
- rc.ReqParam = jsonx.Kvs("machine", cli.GetMachine(), "scriptId", scriptId, "name", ms.Name)
+ rc.ReqParam = collx.Kvs("machine", cli.GetMachine(), "scriptId", scriptId, "name", ms.Name)
if res == "" {
biz.ErrIsNilAppendErr(err, "执行命令失败:%s")
}
diff --git a/server/internal/mongo/api/mongo.go b/server/internal/mongo/api/mongo.go
index 7e0c00c4..df845fe9 100644
--- a/server/internal/mongo/api/mongo.go
+++ b/server/internal/mongo/api/mongo.go
@@ -10,7 +10,7 @@ import (
"mayfly-go/pkg/ginx"
"mayfly-go/pkg/model"
"mayfly-go/pkg/req"
- "mayfly-go/pkg/utils/jsonx"
+ "mayfly-go/pkg/utils/collx"
"regexp"
"strconv"
"strings"
@@ -93,7 +93,7 @@ func (m *Mongo) RunCommand(rc *req.Ctx) {
ginx.BindJsonAndValid(rc.GinCtx, commandForm)
inst := m.MongoApp.GetMongoInst(m.GetMongoId(rc.GinCtx))
- rc.ReqParam = jsonx.Kvs("mongo", inst.Info, "cmd", commandForm)
+ rc.ReqParam = collx.Kvs("mongo", inst.Info, "cmd", commandForm)
// 顺序执行
commands := bson.D{}
@@ -156,7 +156,7 @@ func (m *Mongo) UpdateByIdCommand(rc *req.Ctx) {
ginx.BindJsonAndValid(g, commandForm)
inst := m.MongoApp.GetMongoInst(m.GetMongoId(g))
- rc.ReqParam = jsonx.Kvs("mongo", inst.Info, "cmd", commandForm)
+ rc.ReqParam = collx.Kvs("mongo", inst.Info, "cmd", commandForm)
// 解析docId文档id,如果为string类型则使用ObjectId解析,解析失败则为普通字符串
docId := commandForm.DocId
@@ -180,7 +180,7 @@ func (m *Mongo) DeleteByIdCommand(rc *req.Ctx) {
ginx.BindJsonAndValid(g, commandForm)
inst := m.MongoApp.GetMongoInst(m.GetMongoId(g))
- rc.ReqParam = jsonx.Kvs("mongo", inst.Info, "cmd", commandForm)
+ rc.ReqParam = collx.Kvs("mongo", inst.Info, "cmd", commandForm)
// 解析docId文档id,如果为string类型则使用ObjectId解析,解析失败则为普通字符串
docId := commandForm.DocId
@@ -203,7 +203,7 @@ func (m *Mongo) InsertOneCommand(rc *req.Ctx) {
ginx.BindJsonAndValid(g, commandForm)
inst := m.MongoApp.GetMongoInst(m.GetMongoId(g))
- rc.ReqParam = jsonx.Kvs("mongo", inst.Info, "cmd", commandForm)
+ rc.ReqParam = collx.Kvs("mongo", inst.Info, "cmd", commandForm)
res, err := inst.Cli.Database(commandForm.Database).Collection(commandForm.Collection).InsertOne(context.TODO(), commandForm.Doc)
biz.ErrIsNilAppendErr(err, "命令执行失败: %s")
diff --git a/server/internal/redis/api/hash.go b/server/internal/redis/api/hash.go
index f3bbec02..e79f9e62 100644
--- a/server/internal/redis/api/hash.go
+++ b/server/internal/redis/api/hash.go
@@ -6,7 +6,7 @@ import (
"mayfly-go/pkg/biz"
"mayfly-go/pkg/ginx"
"mayfly-go/pkg/req"
- "mayfly-go/pkg/utils/jsonx"
+ "mayfly-go/pkg/utils/collx"
"time"
)
@@ -24,7 +24,7 @@ func (r *Redis) Hscan(rc *req.Ctx) {
keySize, err := cmdable.HLen(contextTodo, key).Result()
biz.ErrIsNilAppendErr(err, "hlen err: %s")
- rc.ResData = map[string]any{
+ rc.ResData = collx.M{
"keys": keys,
"cursor": nextCursor,
"keySize": keySize,
@@ -35,7 +35,7 @@ func (r *Redis) Hdel(rc *req.Ctx) {
ri, key := r.checkKeyAndGetRedisIns(rc)
field := rc.GinCtx.Query("field")
- rc.ReqParam = jsonx.Kvs("redis", ri.Info, "key", key, "field", field)
+ rc.ReqParam = collx.Kvs("redis", ri.Info, "key", key, "field", field)
delRes, err := ri.GetCmdable().HDel(context.TODO(), key, field).Result()
biz.ErrIsNilAppendErr(err, "hdel err: %s")
rc.ResData = delRes
@@ -57,7 +57,7 @@ func (r *Redis) Hset(rc *req.Ctx) {
hv := hashValue.Value[0]
ri := r.getRedisIns(rc)
- rc.ReqParam = jsonx.Kvs("redis", ri.Info, "hash", hv)
+ rc.ReqParam = collx.Kvs("redis", ri.Info, "hash", hv)
res, err := ri.GetCmdable().HSet(context.TODO(), hashValue.Key, hv["field"].(string), hv["value"]).Result()
biz.ErrIsNilAppendErr(err, "hset失败: %s")
@@ -70,7 +70,7 @@ func (r *Redis) SetHashValue(rc *req.Ctx) {
ginx.BindJsonAndValid(g, hashValue)
ri := r.getRedisIns(rc)
- rc.ReqParam = jsonx.Kvs("redis", ri.Info, "hash", hashValue)
+ rc.ReqParam = collx.Kvs("redis", ri.Info, "hash", hashValue)
cmd := ri.GetCmdable()
key := hashValue.Key
diff --git a/server/internal/redis/api/key.go b/server/internal/redis/api/key.go
index e922dcbe..525dca72 100644
--- a/server/internal/redis/api/key.go
+++ b/server/internal/redis/api/key.go
@@ -8,7 +8,7 @@ import (
"mayfly-go/pkg/biz"
"mayfly-go/pkg/ginx"
"mayfly-go/pkg/req"
- "mayfly-go/pkg/utils/jsonx"
+ "mayfly-go/pkg/utils/collx"
"strings"
"sync"
"time"
@@ -132,7 +132,7 @@ func (r *Redis) TtlKey(rc *req.Ctx) {
func (r *Redis) DeleteKey(rc *req.Ctx) {
ri, key := r.checkKeyAndGetRedisIns(rc)
- rc.ReqParam = jsonx.Kvs("redis", ri.Info, "key", key)
+ rc.ReqParam = collx.Kvs("redis", ri.Info, "key", key)
ri.GetCmdable().Del(context.Background(), key)
}
@@ -141,7 +141,7 @@ func (r *Redis) RenameKey(rc *req.Ctx) {
ginx.BindJsonAndValid(rc.GinCtx, form)
ri := r.getRedisIns(rc)
- rc.ReqParam = jsonx.Kvs("redis", ri.Info, "rename", form)
+ rc.ReqParam = collx.Kvs("redis", ri.Info, "rename", form)
ri.GetCmdable().Rename(context.Background(), form.Key, form.NewKey)
}
@@ -150,14 +150,14 @@ func (r *Redis) ExpireKey(rc *req.Ctx) {
ginx.BindJsonAndValid(rc.GinCtx, form)
ri := r.getRedisIns(rc)
- rc.ReqParam = jsonx.Kvs("redis", ri.Info, "expire", form)
+ rc.ReqParam = collx.Kvs("redis", ri.Info, "expire", form)
ri.GetCmdable().Expire(context.Background(), form.Key, time.Duration(form.Seconds)*time.Second)
}
// 移除过期时间
func (r *Redis) PersistKey(rc *req.Ctx) {
ri, key := r.checkKeyAndGetRedisIns(rc)
- rc.ReqParam = jsonx.Kvs("redis", ri.Info, "key", key)
+ rc.ReqParam = collx.Kvs("redis", ri.Info, "key", key)
ri.GetCmdable().Persist(context.Background(), key)
}
diff --git a/server/internal/redis/api/list.go b/server/internal/redis/api/list.go
index 68af35da..5e5f2064 100644
--- a/server/internal/redis/api/list.go
+++ b/server/internal/redis/api/list.go
@@ -6,6 +6,7 @@ import (
"mayfly-go/pkg/biz"
"mayfly-go/pkg/ginx"
"mayfly-go/pkg/req"
+ "mayfly-go/pkg/utils/collx"
)
func (r *Redis) GetListValue(rc *req.Ctx) {
@@ -22,7 +23,7 @@ func (r *Redis) GetListValue(rc *req.Ctx) {
res, err := cmdable.LRange(ctx, key, int64(start), int64(stop)).Result()
biz.ErrIsNilAppendErr(err, "获取list值失败: %s")
- rc.ResData = map[string]any{
+ rc.ResData = collx.M{
"len": len,
"list": res,
}
diff --git a/server/internal/redis/api/redis.go b/server/internal/redis/api/redis.go
index d524d6e4..49f5f44a 100644
--- a/server/internal/redis/api/redis.go
+++ b/server/internal/redis/api/redis.go
@@ -11,6 +11,7 @@ import (
"mayfly-go/pkg/ginx"
"mayfly-go/pkg/model"
"mayfly-go/pkg/req"
+ "mayfly-go/pkg/utils/collx"
"mayfly-go/pkg/utils/cryptox"
"mayfly-go/pkg/utils/stringx"
"strconv"
@@ -196,7 +197,7 @@ func (r *Redis) ClusterInfo(rc *req.Ctx) {
}
nodesRes = append(nodesRes, node)
}
- rc.ResData = map[string]any{
+ rc.ResData = collx.M{
"clusterInfo": info,
"clusterNodes": nodesRes,
}
diff --git a/server/internal/redis/api/set.go b/server/internal/redis/api/set.go
index b646c17b..0824a5e4 100644
--- a/server/internal/redis/api/set.go
+++ b/server/internal/redis/api/set.go
@@ -6,6 +6,7 @@ import (
"mayfly-go/pkg/biz"
"mayfly-go/pkg/ginx"
"mayfly-go/pkg/req"
+ "mayfly-go/pkg/utils/collx"
"time"
)
@@ -49,7 +50,7 @@ func (r *Redis) Sscan(rc *req.Ctx) {
cmd := r.getRedisIns(rc).GetCmdable()
keys, cursor, err := cmd.SScan(context.TODO(), scan.Key, scan.Cursor, scan.Match, scan.Count).Result()
biz.ErrIsNilAppendErr(err, "sscan失败: %s")
- rc.ResData = map[string]any{
+ rc.ResData = collx.M{
"keys": keys,
"cursor": cursor,
}
diff --git a/server/internal/redis/api/string.go b/server/internal/redis/api/string.go
index 4ca22785..5445a722 100644
--- a/server/internal/redis/api/string.go
+++ b/server/internal/redis/api/string.go
@@ -6,7 +6,7 @@ import (
"mayfly-go/pkg/biz"
"mayfly-go/pkg/ginx"
"mayfly-go/pkg/req"
- "mayfly-go/pkg/utils/jsonx"
+ "mayfly-go/pkg/utils/collx"
"time"
)
@@ -24,7 +24,7 @@ func (r *Redis) SetStringValue(rc *req.Ctx) {
ri := r.getRedisIns(rc)
cmd := ri.GetCmdable()
- rc.ReqParam = jsonx.Kvs("redis", ri.Info, "string", keyValue)
+ rc.ReqParam = collx.Kvs("redis", ri.Info, "string", keyValue)
str, err := cmd.Set(context.TODO(), keyValue.Key, keyValue.Value, time.Second*time.Duration(keyValue.Timed)).Result()
biz.ErrIsNilAppendErr(err, "保存字符串值失败: %s")
diff --git a/server/internal/redis/api/zset.go b/server/internal/redis/api/zset.go
index 17f0c1a3..3183c5e5 100644
--- a/server/internal/redis/api/zset.go
+++ b/server/internal/redis/api/zset.go
@@ -6,6 +6,7 @@ import (
"mayfly-go/pkg/biz"
"mayfly-go/pkg/ginx"
"mayfly-go/pkg/req"
+ "mayfly-go/pkg/utils/collx"
"github.com/redis/go-redis/v9"
)
@@ -28,7 +29,7 @@ func (r *Redis) ZScan(rc *req.Ctx) {
keys, cursor, err := ri.GetCmdable().ZScan(context.TODO(), key, cursor, match, int64(count)).Result()
biz.ErrIsNilAppendErr(err, "sscan失败: %s")
- rc.ResData = map[string]any{
+ rc.ResData = collx.M{
"keys": keys,
"cursor": cursor,
}
diff --git a/server/internal/sys/api/account.go b/server/internal/sys/api/account.go
index 04b68cf4..4e0f36c8 100644
--- a/server/internal/sys/api/account.go
+++ b/server/internal/sys/api/account.go
@@ -53,7 +53,7 @@ func (a *Account) GetPermissions(rc *req.Ctx) {
}
// 保存该账号的权限codes
req.SavePermissionCodes(account.Id, permissions)
- rc.ResData = map[string]any{
+ rc.ResData = collx.M{
"menus": menus.ToTrees(0),
"permissions": permissions,
}
diff --git a/server/internal/sys/api/captcha.go b/server/internal/sys/api/captcha.go
index bc142d4c..f9848ebb 100644
--- a/server/internal/sys/api/captcha.go
+++ b/server/internal/sys/api/captcha.go
@@ -3,9 +3,10 @@ package api
import (
"mayfly-go/pkg/captcha"
"mayfly-go/pkg/req"
+ "mayfly-go/pkg/utils/collx"
)
func GenerateCaptcha(rc *req.Ctx) {
id, image := captcha.Generate()
- rc.ResData = map[string]any{"base64Captcha": image, "cid": id}
+ rc.ResData = collx.M{"base64Captcha": image, "cid": id}
}
diff --git a/server/pkg/httpclient/httpclient.go b/server/pkg/httpclient/httpclient.go
index 53c196ac..9a73f58b 100644
--- a/server/pkg/httpclient/httpclient.go
+++ b/server/pkg/httpclient/httpclient.go
@@ -7,6 +7,8 @@ import (
"fmt"
"io"
"mayfly-go/pkg/logx"
+ "mayfly-go/pkg/utils/anyx"
+ "mayfly-go/pkg/utils/collx"
"mayfly-go/pkg/utils/stringx"
"mime/multipart"
"net/http"
@@ -56,7 +58,7 @@ func (r *RequestWrapper) Timeout(timeout int) *RequestWrapper {
return r
}
-func (r *RequestWrapper) GetByQuery(queryMap map[string]any) *ResponseWrapper {
+func (r *RequestWrapper) GetByQuery(queryMap collx.M) *ResponseWrapper {
var params string
for k, v := range queryMap {
if params != "" {
@@ -104,7 +106,7 @@ func (r *RequestWrapper) PostForm(params string) *ResponseWrapper {
return sendRequest(r)
}
-func (r *RequestWrapper) PostMulipart(files []MultipartFile, reqParams map[string]string) *ResponseWrapper {
+func (r *RequestWrapper) PostMulipart(files []MultipartFile, reqParams collx.M) *ResponseWrapper {
buf := &bytes.Buffer{}
// 文件写入 buf
writer := multipart.NewWriter(buf)
@@ -130,7 +132,7 @@ func (r *RequestWrapper) PostMulipart(files []MultipartFile, reqParams map[strin
}
// 如果有其他参数,则写入body
for k, v := range reqParams {
- if err := writer.WriteField(k, v); err != nil {
+ if err := writer.WriteField(k, anyx.ConvString(v)); err != nil {
return &ResponseWrapper{err: err}
}
}
diff --git a/server/pkg/httpclient/httpclient_test.go b/server/pkg/httpclient/httpclient_test.go
index f6a166c3..616aec1a 100644
--- a/server/pkg/httpclient/httpclient_test.go
+++ b/server/pkg/httpclient/httpclient_test.go
@@ -2,6 +2,7 @@ package httpclient
import (
"fmt"
+ "mayfly-go/pkg/utils/collx"
"testing"
)
@@ -26,7 +27,7 @@ func TestGetBodyToMap(t *testing.T) {
func TestGetQueryBodyToMap(t *testing.T) {
res, err := NewRequest("http://go.mayfly.run/api/syslogs").
Header("Authorization", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2OTUzOTQ5NTIsImlkIjoxLCJ1c2VybmFtZSI6ImFkbWluIn0.pGrczVZqk5nlId-FZPkjW_O5Sw3-2yjgzACp_j4JEXY").
- GetByQuery(map[string]any{"pageNum": 1, "pageSize": 10}).
+ GetByQuery(collx.M{"pageNum": 1, "pageSize": 10}).
BodyToMap()
fmt.Println(err)
fmt.Println(res["msg"])
diff --git a/server/pkg/sqlparser/sqlparser_test.go b/server/pkg/sqlparser/sqlparser_test.go
index 1f2b65fd..168e611f 100644
--- a/server/pkg/sqlparser/sqlparser_test.go
+++ b/server/pkg/sqlparser/sqlparser_test.go
@@ -1,11 +1,11 @@
package sqlparser
import (
- "github.com/kanzihuang/vitess/go/vt/sqlparser"
- "github.com/stretchr/testify/require"
- sqlparser_xwb1989 "github.com/xwb1989/sqlparser"
"strings"
"testing"
+
+ "github.com/kanzihuang/vitess/go/vt/sqlparser"
+ "github.com/stretchr/testify/require"
)
func Test_ParseNext_WithCurrentDate(t *testing.T) {
@@ -45,22 +45,22 @@ func Test_ParseNext_WithCurrentDate(t *testing.T) {
require.Equal(t, test.want, sqlparser.String(tree))
})
}
- for _, test := range tests {
- t.Run(test.name, func(t *testing.T) {
- token := sqlparser_xwb1989.NewTokenizer(strings.NewReader(test.input))
- tree, err := sqlparser_xwb1989.ParseNext(token)
- if len(test.err) > 0 {
- require.Error(t, err)
- require.Contains(t, err.Error(), test.err)
- return
- }
- require.NoError(t, err)
- if len(test.want) == 0 {
- test.want = test.input
- }
- require.Equal(t, test.wantXwb1989, sqlparser_xwb1989.String(tree))
- })
- }
+ // for _, test := range tests {
+ // t.Run(test.name, func(t *testing.T) {
+ // token := sqlparser_xwb1989.NewTokenizer(strings.NewReader(test.input))
+ // tree, err := sqlparser_xwb1989.ParseNext(token)
+ // if len(test.err) > 0 {
+ // require.Error(t, err)
+ // require.Contains(t, err.Error(), test.err)
+ // return
+ // }
+ // require.NoError(t, err)
+ // if len(test.want) == 0 {
+ // test.want = test.input
+ // }
+ // require.Equal(t, test.wantXwb1989, sqlparser_xwb1989.String(tree))
+ // })
+ // }
}
func Test_SplitSqls(t *testing.T) {
diff --git a/server/pkg/utils/collx/map.go b/server/pkg/utils/collx/map.go
index 0d5e8115..2ed4e65f 100644
--- a/server/pkg/utils/collx/map.go
+++ b/server/pkg/utils/collx/map.go
@@ -1,44 +1,24 @@
package collx
-import (
- "reflect"
- "strconv"
-)
+import "mayfly-go/pkg/utils/stringx"
-func GetString4Map(m map[string]any, key string) string {
- return m[key].(string)
-}
+// M is a shortcut for map[string]any
+type M map[string]any
-func GetInt4Map(m map[string]any, key string) int {
- i := m[key]
- iKind := reflect.TypeOf(i).Kind()
- if iKind == reflect.Int {
- return i.(int)
+// 将偶数个元素转为对应的M (map[string]any)
+//
+// 偶数索引为key,奇数为value
+func Kvs(elements ...any) M {
+ myMap := make(map[string]any)
+
+ for i := 0; i < len(elements); i += 2 {
+ key := stringx.AnyToStr(elements[i])
+ if i+1 < len(elements) {
+ value := elements[i+1]
+ myMap[key] = value
+ } else {
+ myMap[key] = nil
+ }
}
- if iKind == reflect.String {
- i, _ := strconv.Atoi(i.(string))
- return i
- }
- return 0
-}
-
-// map构造器
-type mapBuilder struct {
- m map[string]any
-}
-
-func MapBuilder(key string, value any) *mapBuilder {
- mb := new(mapBuilder)
- mb.m = make(map[string]any, 4)
- mb.m[key] = value
- return mb
-}
-
-func (mb *mapBuilder) Put(key string, value any) *mapBuilder {
- mb.m[key] = value
- return mb
-}
-
-func (mb *mapBuilder) ToMap() map[string]any {
- return mb.m
+ return myMap
}
diff --git a/server/pkg/utils/jsonx/jsonx.go b/server/pkg/utils/jsonx/jsonx.go
index c0ccbb01..1d408048 100644
--- a/server/pkg/utils/jsonx/jsonx.go
+++ b/server/pkg/utils/jsonx/jsonx.go
@@ -3,7 +3,6 @@ package jsonx
import (
"encoding/json"
"mayfly-go/pkg/logx"
- "mayfly-go/pkg/utils/stringx"
"strings"
"github.com/buger/jsonparser"
@@ -34,31 +33,6 @@ func ToStr(val any) string {
}
}
-// 将偶数个元素转为对应的map,并转为json
-//
-// 偶数索引为key,奇数为value
-func AnysToStr(elements ...any) string {
- return ToStr(Kvs(elements...))
-}
-
-// 将偶数个元素转为对应的map[string]any
-//
-// 偶数索引为json key,奇数为value
-func Kvs(elements ...any) map[string]any {
- myMap := make(map[string]any)
-
- for i := 0; i < len(elements); i += 2 {
- key := stringx.AnyToStr(elements[i])
- if i+1 < len(elements) {
- value := elements[i+1]
- myMap[key] = value
- } else {
- myMap[key] = nil
- }
- }
- return myMap
-}
-
// 根据json字节数组获取对应字段路径的string类型值
//
// @param fieldPath字段路径。如user.username等
diff --git a/server/pkg/utils/structx/structx.go b/server/pkg/utils/structx/structx.go
index 6e517a27..e1692307 100644
--- a/server/pkg/utils/structx/structx.go
+++ b/server/pkg/utils/structx/structx.go
@@ -5,6 +5,7 @@ import (
"encoding/json"
"errors"
"fmt"
+ "mayfly-go/pkg/utils/collx"
"reflect"
"strconv"
"strings"
@@ -324,7 +325,7 @@ func getInnerStructMaps(m map[string]any) map[string]map[string]any {
prefix := k[0:lastIndex]
m2 := key2map[prefix]
if m2 == nil {
- key2map[prefix] = map[string]any{k[lastIndex+1:]: v}
+ key2map[prefix] = collx.M{k[lastIndex+1:]: v}
} else {
m2[k[lastIndex+1:]] = v
}
@@ -634,25 +635,3 @@ func Case2Camel(name string) string {
name = strings.Title(name)
return strings.Replace(name, " ", "", -1)
}
-
-func IsBlank(value any) bool {
- if value == nil {
- return true
- }
- rValue := reflect.ValueOf(value)
- switch rValue.Kind() {
- case reflect.String:
- return rValue.Len() == 0
- case reflect.Bool:
- return !rValue.Bool()
- case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
- return rValue.Int() == 0
- case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
- return rValue.Uint() == 0
- case reflect.Float32, reflect.Float64:
- return rValue.Float() == 0
- case reflect.Interface, reflect.Ptr:
- return rValue.IsNil()
- }
- return reflect.DeepEqual(rValue.Interface(), reflect.Zero(rValue.Type()).Interface())
-}
diff --git a/server/pkg/utils/structx/structx_test.go b/server/pkg/utils/structx/structx_test.go
index 16ad3045..a1431cd1 100644
--- a/server/pkg/utils/structx/structx_test.go
+++ b/server/pkg/utils/structx/structx_test.go
@@ -2,6 +2,7 @@ package structx
import (
"fmt"
+ "mayfly-go/pkg/utils/collx"
"mayfly-go/pkg/utils/stringx"
"reflect"
"strings"
@@ -160,7 +161,7 @@ func getPrefixKeyMap(m map[string]any) map[string]map[string]any {
prefix := k[0:lastIndex]
m2 := key2map[prefix]
if m2 == nil {
- key2map[prefix] = map[string]any{k[lastIndex+1:]: v}
+ key2map[prefix] = collx.M{k[lastIndex+1:]: v}
} else {
m2[k[lastIndex+1:]] = v
}