From a2f4c0024663f0097a390cf4a58906d72a2c7a64 Mon Sep 17 00:00:00 2001 From: zhangwenjian Date: Sat, 18 Apr 2020 10:01:09 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=93=E6=9E=84=E8=B0=83=E6=95=B4=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0cmd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apis/log/loginLog.go | 29 +++--- apis/log/operlog.go | 25 +++-- apis/monitor/server.go | 2 +- apis/system/captcha.go | 8 +- apis/system/config.go | 41 ++++---- apis/system/dept.go | 53 +++++------ apis/system/dict/dictData.go | 39 ++++---- apis/system/dict/dictType.go | 41 ++++---- apis/system/info.go | 15 ++- apis/system/menu.go | 47 +++++----- apis/system/post.go | 37 ++++---- apis/system/role.go | 49 +++++----- apis/system/rolemenu.go | 2 +- apis/system/sysuser.go | 55 ++++++----- apis/tools/dbcolumns.go | 12 +-- apis/tools/dbtables.go | 14 +-- apis/tools/gen.go | 13 ++- apis/tools/systables.go | 31 +++--- cmd/api/server.go | 96 +++++++++++++++++++ cmd/cobra.go | 34 +++++++ cmd/migrate/server.go | 71 ++++++++++++++ config/config.go | 47 ---------- config/policy.csv | 75 --------------- config/settings.yml | 13 +-- database/mysql.go | 78 ++++++++------- go.mod | 3 +- go.sum | 11 ++- handler/auth.go | 12 +-- handler/goadmin.go | 10 ++ handler/sd/check.go | 2 +- main.go | 120 +++++++++++------------- middleware/auth.go | 4 +- middleware/demo.go | 6 +- middleware/logger.go | 44 +++++---- middleware/permission.go | 6 +- models/config.go | 4 +- models/datascope.go | 4 +- models/dept.go | 8 +- models/dictData.go | 4 +- models/dictType.go | 4 +- models/gorm/gorm.go | 4 +- models/initdb.go | 4 +- models/login.go | 8 +- models/menu.go | 8 +- models/post.go | 4 +- models/role.go | 4 +- models/rolemenu.go | 4 +- models/sysuser.go | 15 ++- models/tools/dbcolumns.go | 6 +- models/tools/dbtables.go | 6 +- pkg/casbin/mycasbin.go | 6 +- pkg/jwtauth/jwtauth.go | 6 +- router/router.go | 1 + {pkg => tools}/app/model.go | 0 {pkg => tools}/app/msg/message.go | 0 {pkg => tools}/app/return.go | 0 {pkg => tools}/captcha/captcha.go | 0 {config => tools/config}/application.go | 10 +- tools/config/config.go | 76 +++++++++++++++ {config => tools/config}/database.go | 4 +- {config => tools/config}/jwt.go | 0 tools/config/log.go | 15 +++ tools/env.go | 13 +++ {pkg/utils => tools}/float64.go | 2 +- {pkg/utils => tools}/int.go | 2 +- {pkg/utils => tools}/int64.go | 2 +- {pkg/utils => tools}/ip.go | 2 +- tools/logger.go | 56 +++++++++++ {pkg/utils => tools}/string.go | 2 +- {pkg/utils => tools}/url.go | 2 +- {pkg/utils => tools}/user.go | 2 +- {pkg => tools}/utils.go | 2 +- 72 files changed, 838 insertions(+), 597 deletions(-) create mode 100644 cmd/api/server.go create mode 100644 cmd/cobra.go create mode 100644 cmd/migrate/server.go delete mode 100644 config/config.go delete mode 100644 config/policy.csv create mode 100644 handler/goadmin.go rename {pkg => tools}/app/model.go (100%) rename {pkg => tools}/app/msg/message.go (100%) rename {pkg => tools}/app/return.go (100%) rename {pkg => tools}/captcha/captcha.go (100%) rename {config => tools/config}/application.go (77%) create mode 100644 tools/config/config.go rename {config => tools/config}/database.go (88%) rename {config => tools/config}/jwt.go (100%) create mode 100644 tools/config/log.go create mode 100644 tools/env.go rename {pkg/utils => tools}/float64.go (88%) rename {pkg/utils => tools}/int.go (84%) rename {pkg/utils => tools}/int64.go (86%) rename {pkg/utils => tools}/ip.go (97%) create mode 100644 tools/logger.go rename {pkg/utils => tools}/string.go (98%) rename {pkg/utils => tools}/url.go (96%) rename {pkg/utils => tools}/user.go (99%) rename {pkg => tools}/utils.go (98%) diff --git a/apis/log/loginLog.go b/apis/log/loginLog.go index a8d4446e..42e49e1d 100644 --- a/apis/log/loginLog.go +++ b/apis/log/loginLog.go @@ -4,9 +4,8 @@ import ( "github.com/gin-gonic/gin" "github.com/gin-gonic/gin/binding" "go-admin/models" - "go-admin/pkg" - "go-admin/pkg/app" - "go-admin/pkg/utils" + "go-admin/tools" + "go-admin/tools/app" "net/http" ) @@ -29,19 +28,19 @@ func GetLoginLogList(c *gin.Context) { size := c.Request.FormValue("pageSize") if size != "" { - pageSize = pkg.StrToInt(err, size) + pageSize = tools.StrToInt(err, size) } index := c.Request.FormValue("pageIndex") if index != "" { - pageIndex = pkg.StrToInt(err, index) + pageIndex = tools.StrToInt(err, index) } data.Username = c.Request.FormValue("username") data.Status = c.Request.FormValue("status") data.Ipaddr = c.Request.FormValue("ipaddr") result, count, err := data.GetPage(pageSize, pageIndex) - pkg.HasError(err, "", -1) + tools.HasError(err, "", -1) var mp = make(map[string]interface{}, 3) mp["list"] = result @@ -63,9 +62,9 @@ func GetLoginLogList(c *gin.Context) { // @Security func GetLoginLog(c *gin.Context) { var LoginLog models.LoginLog - LoginLog.InfoId, _ = utils.StringToInt(c.Param("infoId")) + LoginLog.InfoId, _ = tools.StringToInt(c.Param("infoId")) result, err := LoginLog.Get() - pkg.HasError(err, "抱歉未找到相关信息", -1) + tools.HasError(err, "抱歉未找到相关信息", -1) var res app.Response res.Data = result @@ -85,9 +84,9 @@ func GetLoginLog(c *gin.Context) { func InsertLoginLog(c *gin.Context) { var data models.LoginLog err := c.BindWith(&data, binding.JSON) - pkg.HasError(err, "", 500) + tools.HasError(err, "", 500) result, err := data.Create() - pkg.HasError(err, "", -1) + tools.HasError(err, "", -1) var res app.Response res.Data = result c.JSON(http.StatusOK, res.ReturnOK()) @@ -106,9 +105,9 @@ func InsertLoginLog(c *gin.Context) { func UpdateLoginLog(c *gin.Context) { var data models.LoginLog err := c.BindWith(&data, binding.JSON) - pkg.HasError(err, "", -1) + tools.HasError(err, "", -1) result, err := data.Update(data.InfoId) - pkg.HasError(err, "", -1) + tools.HasError(err, "", -1) var res app.Response res.Data = result c.JSON(http.StatusOK, res.ReturnOK()) @@ -123,10 +122,10 @@ func UpdateLoginLog(c *gin.Context) { // @Router /api/v1/loginlog/{infoId} [delete] func DeleteLoginLog(c *gin.Context) { var data models.LoginLog - data.UpdateBy = utils.GetUserIdStr(c) - IDS := utils.IdsStrToIdsIntGroup("infoId", c) + data.UpdateBy = tools.GetUserIdStr(c) + IDS := tools.IdsStrToIdsIntGroup("infoId", c) _, err := data.BatchDelete(IDS) - pkg.HasError(err, "修改失败", 500) + tools.HasError(err, "修改失败", 500) var res app.Response res.Msg = "删除成功" c.JSON(http.StatusOK, res.ReturnOK()) diff --git a/apis/log/operlog.go b/apis/log/operlog.go index 052df5e0..55dbd3f4 100644 --- a/apis/log/operlog.go +++ b/apis/log/operlog.go @@ -4,9 +4,8 @@ import ( "github.com/gin-gonic/gin" "github.com/gin-gonic/gin/binding" "go-admin/models" - "go-admin/pkg" - "go-admin/pkg/app" - "go-admin/pkg/utils" + "go-admin/tools" + "go-admin/tools/app" "net/http" ) @@ -29,19 +28,19 @@ func GetOperLogList(c *gin.Context) { size := c.Request.FormValue("pageSize") if size != "" { - pageSize = pkg.StrToInt(err, size) + pageSize = tools.StrToInt(err, size) } index := c.Request.FormValue("pageIndex") if index != "" { - pageIndex = pkg.StrToInt(err, index) + pageIndex = tools.StrToInt(err, index) } data.OperName = c.Request.FormValue("operName") data.Status = c.Request.FormValue("status") data.OperIp = c.Request.FormValue("operIp") result, count, err := data.GetPage(pageSize, pageIndex) - pkg.HasError(err, "", -1) + tools.HasError(err, "", -1) var mp = make(map[string]interface{}, 3) mp["list"] = result @@ -64,9 +63,9 @@ func GetOperLogList(c *gin.Context) { // @Security func GetOperLog(c *gin.Context) { var OperLog models.SysOperLog - OperLog.OperId, _ = utils.StringToInt(c.Param("operId")) + OperLog.OperId, _ = tools.StringToInt(c.Param("operId")) result, err := OperLog.Get() - pkg.HasError(err, "抱歉未找到相关信息", -1) + tools.HasError(err, "抱歉未找到相关信息", -1) var res app.Response res.Data = result c.JSON(http.StatusOK, res.ReturnOK()) @@ -85,9 +84,9 @@ func GetOperLog(c *gin.Context) { func InsertOperLog(c *gin.Context) { var data models.SysOperLog err := c.BindWith(&data, binding.JSON) - pkg.HasError(err, "", 500) + tools.HasError(err, "", 500) result, err := data.Create() - pkg.HasError(err, "", -1) + tools.HasError(err, "", -1) var res app.Response res.Data = result c.JSON(http.StatusOK, res.ReturnOK()) @@ -102,10 +101,10 @@ func InsertOperLog(c *gin.Context) { // @Router /api/v1/operlog/{operId} [delete] func DeleteOperLog(c *gin.Context) { var data models.SysOperLog - data.UpdateBy = utils.GetUserIdStr(c) - IDS := utils.IdsStrToIdsIntGroup("operId", c) + data.UpdateBy = tools.GetUserIdStr(c) + IDS := tools.IdsStrToIdsIntGroup("operId", c) _, err := data.BatchDelete(IDS) - pkg.HasError(err, "删除失败", 500) + tools.HasError(err, "删除失败", 500) var res app.Response res.Msg = "删除成功" c.JSON(http.StatusOK, res.ReturnOK()) diff --git a/apis/monitor/server.go b/apis/monitor/server.go index d54d9d14..778498f5 100644 --- a/apis/monitor/server.go +++ b/apis/monitor/server.go @@ -5,7 +5,7 @@ import ( "github.com/shirou/gopsutil/cpu" "github.com/shirou/gopsutil/disk" "github.com/shirou/gopsutil/mem" - "go-admin/pkg/app" + "go-admin/tools/app" "runtime" ) diff --git a/apis/system/captcha.go b/apis/system/captcha.go index dc5364b9..9c2d3fe0 100644 --- a/apis/system/captcha.go +++ b/apis/system/captcha.go @@ -2,14 +2,14 @@ package system import ( "github.com/gin-gonic/gin" - "go-admin/pkg" - "go-admin/pkg/app" - "go-admin/pkg/captcha" + "go-admin/tools" + "go-admin/tools/app" + "go-admin/tools/captcha" ) func GenerateCaptchaHandler(c *gin.Context) { id, b64s, err := captcha.DriverDigitFunc() - pkg.HasError(err, "验证码获取失败", 500) + tools.HasError(err, "验证码获取失败", 500) app.Custum(c, gin.H{ "code": 200, "data": b64s, diff --git a/apis/system/config.go b/apis/system/config.go index f7e69cb0..1f7538fd 100644 --- a/apis/system/config.go +++ b/apis/system/config.go @@ -4,10 +4,9 @@ import ( "github.com/gin-gonic/gin" "github.com/gin-gonic/gin/binding" "go-admin/models" - "go-admin/pkg" - "go-admin/pkg/app" - "go-admin/pkg/app/msg" - "go-admin/pkg/utils" + "go-admin/tools" + "go-admin/tools/app" + "go-admin/tools/app/msg" "net/http" ) @@ -29,19 +28,19 @@ func GetConfigList(c *gin.Context) { var pageIndex = 1 if size := c.Request.FormValue("pageSize"); size != "" { - pageSize = pkg.StrToInt(err, size) + pageSize = tools.StrToInt(err, size) } if index := c.Request.FormValue("pageIndex"); index != "" { - pageIndex = pkg.StrToInt(err, index) + pageIndex = tools.StrToInt(err, index) } data.ConfigKey = c.Request.FormValue("configKey") data.ConfigName = c.Request.FormValue("configName") data.ConfigType = c.Request.FormValue("configType") - data.DataScope = utils.GetUserIdStr(c) + data.DataScope = tools.GetUserIdStr(c) result, count, err := data.GetPage(pageSize, pageIndex) - pkg.HasError(err, "", -1) + tools.HasError(err, "", -1) var mp = make(map[string]interface{}, 3) mp["list"] = result @@ -64,9 +63,9 @@ func GetConfigList(c *gin.Context) { // @Security func GetConfig(c *gin.Context) { var Config models.SysConfig - Config.ConfigId, _ = utils.StringToInt(c.Param("configId")) + Config.ConfigId, _ = tools.StringToInt(c.Param("configId")) result, err := Config.Get() - pkg.HasError(err, "抱歉未找到相关信息", -1) + tools.HasError(err, "抱歉未找到相关信息", -1) var res app.Response res.Data = result @@ -85,7 +84,7 @@ func GetConfigByConfigKey(c *gin.Context) { var Config models.SysConfig Config.ConfigKey = c.Param("configKey") result, err := Config.Get() - pkg.HasError(err, "抱歉未找到相关信息", -1) + tools.HasError(err, "抱歉未找到相关信息", -1) app.OK(c, result,result.ConfigValue) } @@ -103,10 +102,10 @@ func GetConfigByConfigKey(c *gin.Context) { func InsertConfig(c *gin.Context) { var data models.SysConfig err := c.BindWith(&data, binding.JSON) - data.CreateBy = utils.GetUserIdStr(c) - pkg.HasError(err, "", 500) + data.CreateBy = tools.GetUserIdStr(c) + tools.HasError(err, "", 500) result, err := data.Create() - pkg.HasError(err, "", -1) + tools.HasError(err, "", -1) app.OK(c, result,"") } @@ -124,10 +123,10 @@ func InsertConfig(c *gin.Context) { func UpdateConfig(c *gin.Context) { var data models.SysConfig err := c.BindWith(&data, binding.JSON) - pkg.HasError(err, "数据解析失败", -1) - data.UpdateBy = utils.GetUserIdStr(c) + tools.HasError(err, "数据解析失败", -1) + data.UpdateBy = tools.GetUserIdStr(c) result, err := data.Update(data.ConfigId) - pkg.HasError(err, "", -1) + tools.HasError(err, "", -1) app.OK(c, result,"") } @@ -140,10 +139,10 @@ func UpdateConfig(c *gin.Context) { // @Router /api/v1/config/{configId} [delete] func DeleteConfig(c *gin.Context) { var data models.SysConfig - id, err := utils.StringToInt(c.Param("configId")) - data.UpdateBy = utils.GetUserIdStr(c) + id, err := tools.StringToInt(c.Param("configId")) + data.UpdateBy = tools.GetUserIdStr(c) data.ConfigId = id _, err = data.Delete() - pkg.HasError(err, "修改失败", 500) - app.OK(c, nil,msg.DeletedSuccess) + tools.HasError(err, "修改失败", 500) + app.OK(c, nil, msg.DeletedSuccess) } diff --git a/apis/system/dept.go b/apis/system/dept.go index a123f5cd..dca8cac3 100644 --- a/apis/system/dept.go +++ b/apis/system/dept.go @@ -4,10 +4,9 @@ import ( "github.com/gin-gonic/gin" "github.com/gin-gonic/gin/binding" "go-admin/models" - "go-admin/pkg" - "go-admin/pkg/app" - "go-admin/pkg/app/msg" - "go-admin/pkg/utils" + "go-admin/tools" + "go-admin/tools/app" + "go-admin/tools/app/msg" ) // @Summary 分页部门列表数据 @@ -23,10 +22,10 @@ func GetDeptList(c *gin.Context) { var Dept models.Dept Dept.DeptName = c.Request.FormValue("deptName") Dept.Status = c.Request.FormValue("status") - Dept.DeptId, _ = utils.StringToInt(c.Request.FormValue("deptId")) - Dept.DataScope = utils.GetUserIdStr(c) + Dept.DeptId, _ = tools.StringToInt(c.Request.FormValue("deptId")) + Dept.DataScope = tools.GetUserIdStr(c) result, err := Dept.SetDept(true) - pkg.HasError(err, "抱歉未找到相关信息", -1) + tools.HasError(err, "抱歉未找到相关信息", -1) app.OK(c,result,"") } @@ -34,9 +33,9 @@ func GetDeptTree(c *gin.Context) { var Dept models.Dept Dept.DeptName = c.Request.FormValue("deptName") Dept.Status= c.Request.FormValue("status") - Dept.DeptId, _ = utils.StringToInt(c.Request.FormValue("deptId")) + Dept.DeptId, _ = tools.StringToInt(c.Request.FormValue("deptId")) result, err := Dept.SetDept(false) - pkg.HasError(err, "抱歉未找到相关信息", -1) + tools.HasError(err, "抱歉未找到相关信息", -1) app.OK(c,result,"") } @@ -50,11 +49,11 @@ func GetDeptTree(c *gin.Context) { // @Security func GetDept(c *gin.Context) { var Dept models.Dept - Dept.DeptId, _ = utils.StringToInt(c.Param("deptId")) - Dept.DataScope = utils.GetUserIdStr(c) + Dept.DeptId, _ = tools.StringToInt(c.Param("deptId")) + Dept.DataScope = tools.GetUserIdStr(c) result, err := Dept.Get() - pkg.HasError(err, msg.NotFound, 404) - app.OK(c,result,msg.GetSuccess) + tools.HasError(err, msg.NotFound, 404) + app.OK(c,result, msg.GetSuccess) } // @Summary 添加部门 @@ -70,11 +69,11 @@ func GetDept(c *gin.Context) { func InsertDept(c *gin.Context) { var data models.Dept err := c.BindWith(&data, binding.JSON) - pkg.HasError(err, "", 500) - data.CreateBy = utils.GetUserIdStr(c) + tools.HasError(err, "", 500) + data.CreateBy = tools.GetUserIdStr(c) result, err := data.Create() - pkg.HasError(err, "", -1) - app.OK(c,result,msg.CreatedSuccess) + tools.HasError(err, "", -1) + app.OK(c,result, msg.CreatedSuccess) } // @Summary 修改部门 @@ -91,11 +90,11 @@ func InsertDept(c *gin.Context) { func UpdateDept(c *gin.Context) { var data models.Dept err := c.BindWith(&data, binding.JSON) - pkg.HasError(err, "", -1) - data.UpdateBy = utils.GetUserIdStr(c) + tools.HasError(err, "", -1) + data.UpdateBy = tools.GetUserIdStr(c) result, err := data.Update(data.DeptId) - pkg.HasError(err, "", -1) - app.OK(c,result,msg.UpdatedSuccess) + tools.HasError(err, "", -1) + app.OK(c,result, msg.UpdatedSuccess) } // @Summary 删除部门 @@ -107,23 +106,23 @@ func UpdateDept(c *gin.Context) { // @Router /api/v1/dept/{id} [delete] func DeleteDept(c *gin.Context) { var data models.Dept - id, err := utils.StringToInt(c.Param("id")) + id, err := tools.StringToInt(c.Param("id")) _, err = data.Delete(id) - pkg.HasError(err, "删除失败", 500) - app.OK(c,"",msg.DeletedSuccess) + tools.HasError(err, "删除失败", 500) + app.OK(c,"", msg.DeletedSuccess) } func GetDeptTreeRoleselect(c *gin.Context) { var Dept models.Dept var SysRole models.SysRole - id, err := utils.StringToInt(c.Param("roleId")) + id, err := tools.StringToInt(c.Param("roleId")) SysRole.RoleId = id result, err := Dept.SetDeptLable() - pkg.HasError(err, msg.NotFound, -1) + tools.HasError(err, msg.NotFound, -1) menuIds := make([]int, 0) if id != 0 { menuIds, err = SysRole.GetRoleDeptId() - pkg.HasError(err, "抱歉未找到相关信息", -1) + tools.HasError(err, "抱歉未找到相关信息", -1) } app.Custum(c,gin.H{ "code": 200, diff --git a/apis/system/dict/dictData.go b/apis/system/dict/dictData.go index f5d94b3f..6abf2f2a 100644 --- a/apis/system/dict/dictData.go +++ b/apis/system/dict/dictData.go @@ -4,9 +4,8 @@ import ( "github.com/gin-gonic/gin" "github.com/gin-gonic/gin/binding" "go-admin/models" - "go-admin/pkg" - "go-admin/pkg/app" - "go-admin/pkg/utils" + "go-admin/tools" + "go-admin/tools/app" "net/http" ) @@ -28,21 +27,21 @@ func GetDictDataList(c *gin.Context) { var pageIndex = 1 if size := c.Request.FormValue("pageSize"); size != "" { - pageSize = pkg.StrToInt(err, size) + pageSize = tools.StrToInt(err, size) } if index := c.Request.FormValue("pageIndex"); index != "" { - pageIndex = pkg.StrToInt(err, index) + pageIndex = tools.StrToInt(err, index) } data.DictLabel = c.Request.FormValue("dictLabel") data.Status = c.Request.FormValue("status") data.DictType = c.Request.FormValue("dictType") id := c.Request.FormValue("dictCode") - data.DictCode, _ = utils.StringToInt(id) - data.DataScope = utils.GetUserIdStr(c) + data.DictCode, _ = tools.StringToInt(id) + data.DataScope = tools.GetUserIdStr(c) result, count, err := data.GetPage(pageSize, pageIndex) - pkg.HasError(err, "", -1) + tools.HasError(err, "", -1) var mp = make(map[string]interface{}, 3) mp["list"] = result @@ -66,9 +65,9 @@ func GetDictDataList(c *gin.Context) { func GetDictData(c *gin.Context) { var DictData models.DictData DictData.DictLabel = c.Request.FormValue("dictLabel") - DictData.DictCode, _ = utils.StringToInt(c.Param("dictCode")) + DictData.DictCode, _ = tools.StringToInt(c.Param("dictCode")) result, err := DictData.GetByCode() - pkg.HasError(err, "抱歉未找到相关信息", -1) + tools.HasError(err, "抱歉未找到相关信息", -1) var res app.Response res.Data = result c.JSON(http.StatusOK, res.ReturnOK()) @@ -85,7 +84,7 @@ func GetDictDataByDictType(c *gin.Context) { var DictData models.DictData DictData.DictType = c.Param("dictType") result, err := DictData.Get() - pkg.HasError(err, "抱歉未找到相关信息", -1) + tools.HasError(err, "抱歉未找到相关信息", -1) var res app.Response res.Data = result @@ -105,10 +104,10 @@ func GetDictDataByDictType(c *gin.Context) { func InsertDictData(c *gin.Context) { var data models.DictData err := c.BindWith(&data, binding.JSON) - data.CreateBy = utils.GetUserIdStr(c) - pkg.HasError(err, "", 500) + data.CreateBy = tools.GetUserIdStr(c) + tools.HasError(err, "", 500) result, err := data.Create() - pkg.HasError(err, "", -1) + tools.HasError(err, "", -1) var res app.Response res.Data = result c.JSON(http.StatusOK, res.ReturnOK()) @@ -127,10 +126,10 @@ func InsertDictData(c *gin.Context) { func UpdateDictData(c *gin.Context) { var data models.DictData err := c.BindWith(&data, binding.JSON) - data.UpdateBy = utils.GetUserIdStr(c) - pkg.HasError(err, "", -1) + data.UpdateBy = tools.GetUserIdStr(c) + tools.HasError(err, "", -1) result, err := data.Update(data.DictCode) - pkg.HasError(err, "", -1) + tools.HasError(err, "", -1) var res app.Response res.Data = result c.JSON(http.StatusOK, res.ReturnOK()) @@ -145,10 +144,10 @@ func UpdateDictData(c *gin.Context) { // @Router /api/v1/dict/data/{dictCode} [delete] func DeleteDictData(c *gin.Context) { var data models.DictData - id, err := utils.StringToInt(c.Param("dictCode")) - data.UpdateBy = utils.GetUserIdStr(c) + id, err := tools.StringToInt(c.Param("dictCode")) + data.UpdateBy = tools.GetUserIdStr(c) _, err = data.Delete(id) - pkg.HasError(err, "修改失败", 500) + tools.HasError(err, "修改失败", 500) var res app.Response res.Msg = "删除成功" diff --git a/apis/system/dict/dictType.go b/apis/system/dict/dictType.go index 9e7744b1..a3dc63f2 100644 --- a/apis/system/dict/dictType.go +++ b/apis/system/dict/dictType.go @@ -4,9 +4,8 @@ import ( "github.com/gin-gonic/gin" "github.com/gin-gonic/gin/binding" "go-admin/models" - "go-admin/pkg" - "go-admin/pkg/app" - "go-admin/pkg/utils" + "go-admin/tools" + "go-admin/tools/app" "net/http" ) @@ -28,20 +27,20 @@ func GetDictTypeList(c *gin.Context) { var pageIndex = 1 if size := c.Request.FormValue("pageSize"); size != "" { - pageSize = pkg.StrToInt(err, size) + pageSize = tools.StrToInt(err, size) } if index := c.Request.FormValue("pageIndex"); index != "" { - pageIndex = pkg.StrToInt(err, index) + pageIndex = tools.StrToInt(err, index) } data.DictName = c.Request.FormValue("dictName") id := c.Request.FormValue("dictId") - data.DictId, _ = utils.StringToInt(id) + data.DictId, _ = tools.StringToInt(id) data.DictType = c.Request.FormValue("dictType") - data.DataScope = utils.GetUserIdStr(c) + data.DataScope = tools.GetUserIdStr(c) result, count, err := data.GetPage(pageSize, pageIndex) - pkg.HasError(err, "", -1) + tools.HasError(err, "", -1) var mp = make(map[string]interface{}, 3) mp["list"] = result @@ -64,9 +63,9 @@ func GetDictTypeList(c *gin.Context) { func GetDictType(c *gin.Context) { var DictType models.DictType DictType.DictName = c.Request.FormValue("dictName") - DictType.DictId, _ = utils.StringToInt(c.Param("dictId")) + DictType.DictId, _ = tools.StringToInt(c.Param("dictId")) result, err := DictType.Get() - pkg.HasError(err, "抱歉未找到相关信息", -1) + tools.HasError(err, "抱歉未找到相关信息", -1) var res app.Response res.Data = result c.JSON(http.StatusOK, res.ReturnOK()) @@ -76,9 +75,9 @@ func GetDictType(c *gin.Context) { func GetDictTypeOptionSelect(c *gin.Context) { var DictType models.DictType DictType.DictName = c.Request.FormValue("dictName") - DictType.DictId, _ = utils.StringToInt(c.Param("dictId")) + DictType.DictId, _ = tools.StringToInt(c.Param("dictId")) result, err := DictType.GetList() - pkg.HasError(err, "抱歉未找到相关信息", -1) + tools.HasError(err, "抱歉未找到相关信息", -1) var res app.Response res.Data = result c.JSON(http.StatusOK, res.ReturnOK()) @@ -97,10 +96,10 @@ func GetDictTypeOptionSelect(c *gin.Context) { func InsertDictType(c *gin.Context) { var data models.DictType err := c.BindWith(&data, binding.JSON) - data.CreateBy = utils.GetUserIdStr(c) - pkg.HasError(err, "", 500) + data.CreateBy = tools.GetUserIdStr(c) + tools.HasError(err, "", 500) result, err := data.Create() - pkg.HasError(err, "", -1) + tools.HasError(err, "", -1) var res app.Response res.Data = result c.JSON(http.StatusOK, res.ReturnOK()) @@ -119,10 +118,10 @@ func InsertDictType(c *gin.Context) { func UpdateDictType(c *gin.Context) { var data models.DictType err := c.BindWith(&data, binding.JSON) - data.UpdateBy = utils.GetUserIdStr(c) - pkg.HasError(err, "", -1) + data.UpdateBy = tools.GetUserIdStr(c) + tools.HasError(err, "", -1) result, err := data.Update(data.DictId) - pkg.HasError(err, "", -1) + tools.HasError(err, "", -1) var res app.Response res.Data = result c.JSON(http.StatusOK, res.ReturnOK()) @@ -137,10 +136,10 @@ func UpdateDictType(c *gin.Context) { // @Router /api/v1/dict/type/{dictId} [delete] func DeleteDictType(c *gin.Context) { var data models.DictType - id, err := utils.StringToInt(c.Param("dictId")) - data.UpdateBy = utils.GetUserIdStr(c) + id, err := tools.StringToInt(c.Param("dictId")) + data.UpdateBy = tools.GetUserIdStr(c) _, err = data.Delete(id) - pkg.HasError(err, "修改失败", 500) + tools.HasError(err, "修改失败", 500) c.JSON(http.StatusOK, gin.H{ "code": 200, diff --git a/apis/system/info.go b/apis/system/info.go index 51377a8b..482e6727 100644 --- a/apis/system/info.go +++ b/apis/system/info.go @@ -3,24 +3,23 @@ package system import ( "github.com/gin-gonic/gin" "go-admin/models" - "go-admin/pkg" - "go-admin/pkg/app" - "go-admin/pkg/utils" + "go-admin/tools" + "go-admin/tools/app" ) func GetInfo(c *gin.Context) { var roles = make([]string, 1) - roles[0] = utils.GetRoleName(c) + roles[0] = tools.GetRoleName(c) var permissions = make([]string, 1) permissions[0] = "*:*:*" RoleMenu := models.RoleMenu{} - RoleMenu.RoleId = utils.GetRoleId(c) + RoleMenu.RoleId = tools.GetRoleId(c) var mp = make(map[string]interface{}) mp["roles"] = roles - if utils.GetRoleName(c) == "admin" || utils.GetRoleName(c) == "系统管理员" { + if tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员" { mp["permissions"] = permissions } else { list, _ := RoleMenu.GetPermis() @@ -28,9 +27,9 @@ func GetInfo(c *gin.Context) { } sysuser := models.SysUser{} - sysuser.UserId = utils.GetUserId(c) + sysuser.UserId = tools.GetUserId(c) user, err := sysuser.Get() - pkg.HasError(err, "", 500) + tools.HasError(err, "", 500) mp["introduction"] = " am a super administrator" diff --git a/apis/system/menu.go b/apis/system/menu.go index ea2f1938..12428870 100644 --- a/apis/system/menu.go +++ b/apis/system/menu.go @@ -4,9 +4,8 @@ import ( "github.com/gin-gonic/gin" "github.com/gin-gonic/gin/binding" "go-admin/models" - "go-admin/pkg" - "go-admin/pkg/app" - "go-admin/pkg/utils" + "go-admin/tools" + "go-admin/tools/app" ) // @Summary Menu列表数据 @@ -20,9 +19,9 @@ import ( func GetMenuList(c *gin.Context) { var Menu models.Menu Menu.MenuName = c.Request.FormValue("menuName") - Menu.DataScope = utils.GetUserIdStr(c) + Menu.DataScope = tools.GetUserIdStr(c) result, err := Menu.SetMenu() - pkg.HasError(err, "抱歉未找到相关信息", -1) + tools.HasError(err, "抱歉未找到相关信息", -1) app.OK(c,result,"") } @@ -37,24 +36,24 @@ func GetMenuList(c *gin.Context) { // @Security Bearer func GetMenu(c *gin.Context) { var data models.Menu - id, err := utils.StringToInt(c.Param("id")) + id, err := tools.StringToInt(c.Param("id")) data.MenuId = id result, err := data.GetByMenuId() - pkg.HasError(err, "抱歉未找到相关信息", -1) + tools.HasError(err, "抱歉未找到相关信息", -1) app.OK(c,result,"") } func GetMenuTreeRoleselect(c *gin.Context) { var Menu models.Menu var SysRole models.SysRole - id, err := utils.StringToInt(c.Param("roleId")) + id, err := tools.StringToInt(c.Param("roleId")) SysRole.RoleId = id result, err := Menu.SetMenuLable() - pkg.HasError(err, "抱歉未找到相关信息", -1) + tools.HasError(err, "抱歉未找到相关信息", -1) menuIds := make([]int, 0) if id != 0 { menuIds, err = SysRole.GetRoleMeunId() - pkg.HasError(err, "抱歉未找到相关信息", -1) + tools.HasError(err, "抱歉未找到相关信息", -1) } app.Custum(c,gin.H{ "code": 200, @@ -75,7 +74,7 @@ func GetMenuTreeRoleselect(c *gin.Context) { func GetMenuTreeelect(c *gin.Context) { var data models.Menu result, err := data.SetMenuLable() - pkg.HasError(err, "抱歉未找到相关信息", -1) + tools.HasError(err, "抱歉未找到相关信息", -1) app.OK(c,result,"") } @@ -97,10 +96,10 @@ func GetMenuTreeelect(c *gin.Context) { func InsertMenu(c *gin.Context) { var data models.Menu err := c.BindWith(&data, binding.JSON) - pkg.HasError(err, "抱歉未找到相关信息", -1) - data.CreateBy = utils.GetUserIdStr(c) + tools.HasError(err, "抱歉未找到相关信息", -1) + data.CreateBy = tools.GetUserIdStr(c) result, err := data.Create() - pkg.HasError(err, "抱歉未找到相关信息", -1) + tools.HasError(err, "抱歉未找到相关信息", -1) app.OK(c,result,"") } @@ -118,10 +117,10 @@ func InsertMenu(c *gin.Context) { func UpdateMenu(c *gin.Context) { var data models.Menu err2 := c.BindWith(&data, binding.JSON) - data.UpdateBy = utils.GetUserIdStr(c) - pkg.HasError(err2, "修改失败", -1) + data.UpdateBy = tools.GetUserIdStr(c) + tools.HasError(err2, "修改失败", -1) _, err := data.Update(data.MenuId) - pkg.HasError(err, "", 501) + tools.HasError(err, "", 501) app.OK(c,"","修改成功") } @@ -135,10 +134,10 @@ func UpdateMenu(c *gin.Context) { // @Router /api/v1/menu/{id} [delete] func DeleteMenu(c *gin.Context) { var data models.Menu - id, err := utils.StringToInt(c.Param("id")) - data.UpdateBy = utils.GetUserIdStr(c) + id, err := tools.StringToInt(c.Param("id")) + data.UpdateBy = tools.GetUserIdStr(c) _, err = data.Delete(id) - pkg.HasError(err, "删除失败", 500) + tools.HasError(err, "删除失败", 500) app.OK(c,"","删除成功") } @@ -152,8 +151,8 @@ func DeleteMenu(c *gin.Context) { // @Security Bearer func GetMenuRole(c *gin.Context) { var Menu models.Menu - result, err := Menu.SetMenuRole(utils.GetRoleName(c)) - pkg.HasError(err, "获取失败", 500) + result, err := Menu.SetMenuRole(tools.GetRoleName(c)) + tools.HasError(err, "获取失败", 500) app.OK(c,result,"") } @@ -168,8 +167,8 @@ func GetMenuRole(c *gin.Context) { func GetMenuIDS(c *gin.Context) { var data models.RoleMenu data.RoleName = c.GetString("role") - data.UpdateBy = utils.GetUserIdStr(c) + data.UpdateBy = tools.GetUserIdStr(c) result, err := data.GetIDS() - pkg.HasError(err, "获取失败", 500) + tools.HasError(err, "获取失败", 500) app.OK(c,result,"") } diff --git a/apis/system/post.go b/apis/system/post.go index cf084664..7cf16d13 100644 --- a/apis/system/post.go +++ b/apis/system/post.go @@ -3,9 +3,8 @@ package system import ( "github.com/gin-gonic/gin" "go-admin/models" - "go-admin/pkg" - "go-admin/pkg/app" - "go-admin/pkg/utils" + "go-admin/tools" + "go-admin/tools/app" ) // @Summary 职位列表数据 @@ -24,21 +23,21 @@ func GetPostList(c *gin.Context) { var pageIndex = 1 if size := c.Request.FormValue("pageSize"); size != "" { - pageSize = pkg.StrToInt(err, size) + pageSize = tools.StrToInt(err, size) } if index := c.Request.FormValue("pageIndex"); index != "" { - pageIndex = pkg.StrToInt(err, index) + pageIndex = tools.StrToInt(err, index) } data.PostName = c.Request.FormValue("postName") id := c.Request.FormValue("postId") - data.PostId, _ = utils.StringToInt(id) + data.PostId, _ = tools.StringToInt(id) data.PostName = c.Request.FormValue("postName") - data.DataScope = utils.GetUserIdStr(c) + data.DataScope = tools.GetUserIdStr(c) result, count, err := data.GetPage(pageSize, pageIndex) - pkg.HasError(err, "", -1) + tools.HasError(err, "", -1) app.PageOK(c, result, count, pageIndex, pageSize, "") } @@ -51,9 +50,9 @@ func GetPostList(c *gin.Context) { // @Security func GetPost(c *gin.Context) { var Post models.Post - Post.PostId, _ = utils.StringToInt(c.Param("postId")) + Post.PostId, _ = tools.StringToInt(c.Param("postId")) result, err := Post.Get() - pkg.HasError(err, "抱歉未找到相关信息", -1) + tools.HasError(err, "抱歉未找到相关信息", -1) app.OK(c,result,"") } @@ -70,10 +69,10 @@ func GetPost(c *gin.Context) { func InsertPost(c *gin.Context) { var data models.Post err := c.Bind(&data) - data.CreateBy = utils.GetUserIdStr(c) - pkg.HasError(err, "", 500) + data.CreateBy = tools.GetUserIdStr(c) + tools.HasError(err, "", 500) result, err := data.Create() - pkg.HasError(err, "", -1) + tools.HasError(err, "", -1) app.OK(c,result,"") } @@ -91,10 +90,10 @@ func UpdatePost(c *gin.Context) { var data models.Post err := c.Bind(&data) - data.UpdateBy = utils.GetUserIdStr(c) - pkg.HasError(err, "", -1) + data.UpdateBy = tools.GetUserIdStr(c) + tools.HasError(err, "", -1) result, err := data.Update(data.PostId) - pkg.HasError(err, "", -1) + tools.HasError(err, "", -1) app.OK(c,result,"修改成功") } @@ -107,9 +106,9 @@ func UpdatePost(c *gin.Context) { // @Router /api/v1/post/{postId} [delete] func DeletePost(c *gin.Context) { var data models.Post - id, err := utils.StringToInt(c.Param("postId")) - data.UpdateBy = utils.GetUserIdStr(c) + id, err := tools.StringToInt(c.Param("postId")) + data.UpdateBy = tools.GetUserIdStr(c) _, err = data.Delete(id) - pkg.HasError(err, "删除失败", 500) + tools.HasError(err, "删除失败", 500) app.OK(c,"","删除成功") } diff --git a/apis/system/role.go b/apis/system/role.go index 5e9fe37e..7e0c5a79 100644 --- a/apis/system/role.go +++ b/apis/system/role.go @@ -4,9 +4,8 @@ import ( "github.com/gin-gonic/gin" "github.com/gin-gonic/gin/binding" "go-admin/models" - "go-admin/pkg" - "go-admin/pkg/app" - "go-admin/pkg/utils" + "go-admin/tools" + "go-admin/tools/app" ) // @Summary 角色列表数据 @@ -27,19 +26,19 @@ func GetRoleList(c *gin.Context) { var pageIndex = 1 if size := c.Request.FormValue("pageSize"); size != "" { - pageSize = pkg.StrToInt(err, size) + pageSize = tools.StrToInt(err, size) } if index := c.Request.FormValue("pageIndex"); index != "" { - pageIndex = pkg.StrToInt(err, index) + pageIndex = tools.StrToInt(err, index) } data.RoleKey = c.Request.FormValue("roleKey") data.RoleName = c.Request.FormValue("roleName") data.Status = c.Request.FormValue("status") - data.DataScope = utils.GetUserIdStr(c) + data.DataScope = tools.GetUserIdStr(c) result, count, err := data.GetPage(pageSize, pageIndex) - pkg.HasError(err, "", -1) + tools.HasError(err, "", -1) app.PageOK(c, result, count, pageIndex, pageSize, "") } @@ -54,11 +53,11 @@ func GetRoleList(c *gin.Context) { // @Security Bearer func GetRole(c *gin.Context) { var Role models.SysRole - Role.RoleId, _ = utils.StringToInt(c.Param("roleId")) + Role.RoleId, _ = tools.StringToInt(c.Param("roleId")) result, err := Role.Get() menuIds := make([]int, 0) menuIds, err = Role.GetRoleMeunId() - pkg.HasError(err, "抱歉未找到相关信息", -1) + tools.HasError(err, "抱歉未找到相关信息", -1) result.MenuIds = menuIds app.OK(c, result, "") @@ -75,15 +74,15 @@ func GetRole(c *gin.Context) { // @Router /api/v1/role [post] func InsertRole(c *gin.Context) { var data models.SysRole - data.CreateBy = utils.GetUserIdStr(c) + data.CreateBy = tools.GetUserIdStr(c) err := c.BindWith(&data, binding.JSON) - pkg.HasError(err, "", 500) + tools.HasError(err, "", 500) id, err := data.Insert() data.RoleId = id - pkg.HasError(err, "", -1) + tools.HasError(err, "", -1) var t models.RoleMenu _, err = t.Insert(id, data.MenuIds) - pkg.HasError(err, "", -1) + tools.HasError(err, "", -1) app.OK(c, data, "添加成功") } @@ -98,32 +97,32 @@ func InsertRole(c *gin.Context) { // @Router /api/v1/role [put] func UpdateRole(c *gin.Context) { var data models.SysRole - data.UpdateBy = utils.GetUserIdStr(c) + data.UpdateBy = tools.GetUserIdStr(c) err := c.Bind(&data) - pkg.HasError(err, "数据解析失败", -1) + tools.HasError(err, "数据解析失败", -1) result, err := data.Update(data.RoleId) var t models.RoleMenu _, err = t.DeleteRoleMenu(data.RoleId) - pkg.HasError(err, "添加失败1", -1) + tools.HasError(err, "添加失败1", -1) _, err2 := t.Insert(data.RoleId, data.MenuIds) - pkg.HasError(err2, "添加失败2", -1) + tools.HasError(err2, "添加失败2", -1) app.OK(c, result, "修改成功") } func UpdateRoleDataScope(c *gin.Context) { var data models.SysRole - data.UpdateBy = utils.GetUserIdStr(c) + data.UpdateBy = tools.GetUserIdStr(c) err := c.Bind(&data) - pkg.HasError(err, "数据解析失败", -1) + tools.HasError(err, "数据解析失败", -1) result, err := data.Update(data.RoleId) var t models.SysRoleDept _, err = t.DeleteRoleDept(data.RoleId) - pkg.HasError(err, "添加失败1", -1) + tools.HasError(err, "添加失败1", -1) if data.DataScope == "2" { _, err2 := t.Insert(data.RoleId, data.DeptIds) - pkg.HasError(err2, "添加失败2", -1) + tools.HasError(err2, "添加失败2", -1) } app.OK(c, result, "修改成功") } @@ -137,13 +136,13 @@ func UpdateRoleDataScope(c *gin.Context) { // @Router /api/v1/role/{roleId} [delete] func DeleteRole(c *gin.Context) { var Role models.SysRole - Role.UpdateBy = utils.GetUserIdStr(c) + Role.UpdateBy = tools.GetUserIdStr(c) - IDS := utils.IdsStrToIdsIntGroup("roleId", c) + IDS := tools.IdsStrToIdsIntGroup("roleId", c) _, err := Role.BatchDelete(IDS) - pkg.HasError(err, "删除失败1", -1) + tools.HasError(err, "删除失败1", -1) var t models.RoleMenu _, err = t.BatchDeleteRoleMenu(IDS) - pkg.HasError(err, "删除失败1", -1) + tools.HasError(err, "删除失败1", -1) app.OK(c, "", "删除成功") } diff --git a/apis/system/rolemenu.go b/apis/system/rolemenu.go index 1a4e06ff..ca96fc8b 100644 --- a/apis/system/rolemenu.go +++ b/apis/system/rolemenu.go @@ -4,7 +4,7 @@ import ( "fmt" "github.com/gin-gonic/gin" "go-admin/models" - "go-admin/pkg/app" + "go-admin/tools/app" "net/http" ) diff --git a/apis/system/sysuser.go b/apis/system/sysuser.go index d18590ab..d4886f68 100644 --- a/apis/system/sysuser.go +++ b/apis/system/sysuser.go @@ -5,9 +5,8 @@ import ( "github.com/gin-gonic/gin/binding" "github.com/google/uuid" "go-admin/models" - "go-admin/pkg" - "go-admin/pkg/app" - "go-admin/pkg/utils" + "go-admin/tools" + "go-admin/tools/app" "log" ) @@ -27,25 +26,25 @@ func GetSysUserList(c *gin.Context) { size := c.Request.FormValue("pageSize") if size != "" { - pageSize = pkg.StrToInt(err, size) + pageSize = tools.StrToInt(err, size) } index := c.Request.FormValue("pageIndex") if index != "" { - pageIndex = pkg.StrToInt(err, index) + pageIndex = tools.StrToInt(err, index) } data.Username = c.Request.FormValue("userName") postId := c.Request.FormValue("postId") - data.PostId, _ = utils.StringToInt(postId) + data.PostId, _ = tools.StringToInt(postId) deptId := c.Request.FormValue("deptId") - data.DeptId, _ = utils.StringToInt(deptId) + data.DeptId, _ = tools.StringToInt(deptId) - data.DataScope = utils.GetUserIdStr(c) + data.DataScope = tools.GetUserIdStr(c) result, count, err := data.GetPage(pageSize, pageIndex) - pkg.HasError(err, "", -1) + tools.HasError(err, "", -1) app.PageOK(c, result, count, pageIndex, pageSize, "") } @@ -59,9 +58,9 @@ func GetSysUserList(c *gin.Context) { // @Security func GetSysUser(c *gin.Context) { var SysUser models.SysUser - SysUser.UserId, _ = utils.StringToInt(c.Param("userId")) + SysUser.UserId, _ = tools.StringToInt(c.Param("userId")) result, err := SysUser.Get() - pkg.HasError(err, "抱歉未找到相关信息", -1) + tools.HasError(err, "抱歉未找到相关信息", -1) var SysRole models.SysRole var Post models.Post roles, err := SysRole.GetList() @@ -90,10 +89,10 @@ func GetSysUser(c *gin.Context) { // @Security func GetSysUserProfile(c *gin.Context) { var SysUser models.SysUser - userId := utils.GetUserIdStr(c) - SysUser.UserId, _ = utils.StringToInt(userId) + userId := tools.GetUserIdStr(c) + SysUser.UserId, _ = tools.StringToInt(userId) result, err := SysUser.Get() - pkg.HasError(err, "抱歉未找到相关信息", -1) + tools.HasError(err, "抱歉未找到相关信息", -1) var SysRole models.SysRole var Post models.Post var Dept models.Dept @@ -133,7 +132,7 @@ func GetSysUserInit(c *gin.Context) { var Post models.Post roles, err := SysRole.GetList() posts, err := Post.GetList() - pkg.HasError(err, "抱歉未找到相关信息", -1) + tools.HasError(err, "抱歉未找到相关信息", -1) mp := make(map[string]interface{}, 2) mp["roles"] = roles mp["posts"] = posts @@ -152,11 +151,11 @@ func GetSysUserInit(c *gin.Context) { func InsertSysUser(c *gin.Context) { var sysuser models.SysUser err := c.BindWith(&sysuser, binding.JSON) - pkg.HasError(err, "非法数据格式", 500) + tools.HasError(err, "非法数据格式", 500) - sysuser.CreateBy = utils.GetUserIdStr(c) + sysuser.CreateBy = tools.GetUserIdStr(c) id, err := sysuser.Insert() - pkg.HasError(err, "添加失败", 500) + tools.HasError(err, "添加失败", 500) app.OK(c, id, "添加成功") } @@ -172,10 +171,10 @@ func InsertSysUser(c *gin.Context) { func UpdateSysUser(c *gin.Context) { var data models.SysUser err := c.BindWith(&data, binding.JSON) - pkg.HasError(err, "数据解析失败", -1) - data.UpdateBy = utils.GetUserIdStr(c) + tools.HasError(err, "数据解析失败", -1) + data.UpdateBy = tools.GetUserIdStr(c) result, err := data.Update(data.UserId) - pkg.HasError(err, "修改失败", 500) + tools.HasError(err, "修改失败", 500) app.OK(c, result, "修改成功") } @@ -188,10 +187,10 @@ func UpdateSysUser(c *gin.Context) { // @Router /api/v1/sysuser/{userId} [delete] func DeleteSysUser(c *gin.Context) { var data models.SysUser - data.UpdateBy = utils.GetUserIdStr(c) - IDS := utils.IdsStrToIdsIntGroup("userId", c) + data.UpdateBy = tools.GetUserIdStr(c) + IDS := tools.IdsStrToIdsIntGroup("userId", c) result, err := data.BatchDelete(IDS) - pkg.HasError(err, "删除失败", 500) + tools.HasError(err, "删除失败", 500) app.OK(c, result, "删除成功") } @@ -214,9 +213,9 @@ func InsetSysUserAvatar(c *gin.Context) { _ = c.SaveUploadedFile(file, filPath) } sysuser := models.SysUser{} - sysuser.UserId = utils.GetUserId(c) + sysuser.UserId = tools.GetUserId(c) sysuser.Avatar = "/" + filPath - sysuser.UpdateBy = utils.GetUserIdStr(c) + sysuser.UpdateBy = tools.GetUserIdStr(c) sysuser.Update(sysuser.UserId) app.OK(c, filPath, "修改成功") } @@ -224,9 +223,9 @@ func InsetSysUserAvatar(c *gin.Context) { func SysUserUpdatePwd(c *gin.Context) { var pwd models.SysUserPwd err := c.Bind(&pwd) - pkg.HasError(err, "数据解析失败", 500) + tools.HasError(err, "数据解析失败", 500) sysuser := models.SysUser{} - sysuser.UserId = utils.GetUserId(c) + sysuser.UserId = tools.GetUserId(c) sysuser.SetPwd(pwd) app.OK(c, "", "密码修改成功") } diff --git a/apis/tools/dbcolumns.go b/apis/tools/dbcolumns.go index 05d1cc76..61bd842b 100644 --- a/apis/tools/dbcolumns.go +++ b/apis/tools/dbcolumns.go @@ -3,8 +3,8 @@ package tools import ( "github.com/gin-gonic/gin" "go-admin/models/tools" - "go-admin/pkg" - "go-admin/pkg/app" + tools2 "go-admin/tools" + "go-admin/tools/app" "net/http" ) @@ -23,17 +23,17 @@ func GetDBColumnList(c *gin.Context) { var pageIndex = 1 if size := c.Request.FormValue("pageSize"); size != "" { - pageSize = pkg.StrToInt(err, size) + pageSize = tools2.StrToInt(err, size) } if index := c.Request.FormValue("pageIndex"); index != "" { - pageIndex = pkg.StrToInt(err, index) + pageIndex = tools2.StrToInt(err, index) } data.TableName = c.Request.FormValue("tableName") - pkg.Assert(data.TableName=="","table name cannot be empty!",500) + tools2.Assert(data.TableName=="","table name cannot be empty!",500) result, count, err := data.GetPage(pageSize, pageIndex) - pkg.HasError(err, "", -1) + tools2.HasError(err, "", -1) var mp = make(map[string]interface{}, 3) mp["list"] = result diff --git a/apis/tools/dbtables.go b/apis/tools/dbtables.go index a1688b50..6e51f39c 100644 --- a/apis/tools/dbtables.go +++ b/apis/tools/dbtables.go @@ -2,10 +2,10 @@ package tools import ( "github.com/gin-gonic/gin" - "go-admin/config" "go-admin/models/tools" - "go-admin/pkg" - "go-admin/pkg/app" + tools2 "go-admin/tools" + "go-admin/tools/app" + config2 "go-admin/tools/config" "net/http" ) @@ -23,23 +23,23 @@ func GetDBTableList(c *gin.Context) { var err error var pageSize = 10 var pageIndex = 1 - if config.DatabaseConfig.Dbtype=="sqlite3"{ + if config2.DatabaseConfig.Dbtype=="sqlite3"{ res.Msg="对不起,sqlite3 暂不支持代码生成!" c.JSON(http.StatusOK, res.ReturnError(500)) return } if size := c.Request.FormValue("pageSize"); size != "" { - pageSize = pkg.StrToInt(err, size) + pageSize = tools2.StrToInt(err, size) } if index := c.Request.FormValue("pageIndex"); index != "" { - pageIndex = pkg.StrToInt(err, index) + pageIndex = tools2.StrToInt(err, index) } data.TableName = c.Request.FormValue("tableName") result, count, err := data.GetPage(pageSize, pageIndex) - pkg.HasError(err, "", -1) + tools2.HasError(err, "", -1) var mp = make(map[string]interface{}, 3) mp["list"] = result diff --git a/apis/tools/gen.go b/apis/tools/gen.go index 7adc57d7..318f1d52 100644 --- a/apis/tools/gen.go +++ b/apis/tools/gen.go @@ -4,22 +4,21 @@ import ( "bytes" "github.com/gin-gonic/gin" "go-admin/models/tools" - "go-admin/pkg" - "go-admin/pkg/app" - "go-admin/pkg/utils" + tools2 "go-admin/tools" + "go-admin/tools/app" "net/http" "text/template" ) func Preview(c *gin.Context) { table := tools.SysTables{} - id, err := utils.StringToInt(c.Param("tableId")) - pkg.HasError(err, "", -1) + id, err := tools2.StringToInt(c.Param("tableId")) + tools2.HasError(err, "", -1) table.TableId = id t1, err := template.ParseFiles("template/model.go.template") - pkg.HasError(err, "", -1) + tools2.HasError(err, "", -1) t2, err := template.ParseFiles("template/api.go.template") - pkg.HasError(err, "", -1) + tools2.HasError(err, "", -1) tab, _ := table.Get() var b1 bytes.Buffer err = t1.Execute(&b1, tab) diff --git a/apis/tools/systables.go b/apis/tools/systables.go index 0cef225e..5c8b7c9a 100644 --- a/apis/tools/systables.go +++ b/apis/tools/systables.go @@ -3,9 +3,8 @@ package tools import ( "github.com/gin-gonic/gin" "go-admin/models/tools" - "go-admin/pkg" - "go-admin/pkg/app" - "go-admin/pkg/utils" + tools2 "go-admin/tools" + "go-admin/tools/app" "net/http" "strings" ) @@ -25,16 +24,16 @@ func GetSysTableList(c *gin.Context) { var pageIndex = 1 if size := c.Request.FormValue("pageSize"); size != "" { - pageSize = pkg.StrToInt(err, size) + pageSize = tools2.StrToInt(err, size) } if index := c.Request.FormValue("pageIndex"); index != "" { - pageIndex = pkg.StrToInt(err, index) + pageIndex = tools2.StrToInt(err, index) } data.TableName = c.Request.FormValue("tableName") result, count, err := data.GetPage(pageSize, pageIndex) - pkg.HasError(err, "", -1) + tools2.HasError(err, "", -1) var mp = make(map[string]interface{}, 3) mp["list"] = result @@ -57,9 +56,9 @@ func GetSysTableList(c *gin.Context) { // @Security func GetSysTables(c *gin.Context) { var data tools.SysTables - data.TableId, _ = utils.StringToInt(c.Param("tableId")) + data.TableId, _ = tools2.StringToInt(c.Param("tableId")) result, err := data.Get() - pkg.HasError(err, "抱歉未找到相关信息", -1) + tools2.HasError(err, "抱歉未找到相关信息", -1) var res app.Response res.Data = result @@ -85,7 +84,7 @@ func InsertSysTable(c *gin.Context) { var dbTable tools.DBTables var dbColumn tools.DBColumns data.TableName = c.Request.FormValue("tables") - data.CreateBy = utils.GetUserIdStr(c) + data.CreateBy = tools2.GetUserIdStr(c) dbTable.TableName = data.TableName dbtable, err := dbTable.Get() @@ -103,7 +102,7 @@ func InsertSysTable(c *gin.Context) { data.Crud = true dbcolumn, err := dbColumn.GetList() - data.CreateBy = utils.GetUserIdStr(c) + data.CreateBy = tools2.GetUserIdStr(c) data.TableComment = dbtable.TableComment if dbtable.TableComment == "" { data.TableComment = data.ClassName @@ -163,7 +162,7 @@ func InsertSysTable(c *gin.Context) { } result, err := data.Create() - pkg.HasError(err, "", -1) + tools2.HasError(err, "", -1) var res app.Response res.Data = result @@ -185,10 +184,10 @@ func InsertSysTable(c *gin.Context) { func UpdateSysTable(c *gin.Context) { var data tools.SysTables err := c.Bind(&data) - pkg.HasError(err, "数据解析失败", -1) - data.UpdateBy = utils.GetUserIdStr(c) + tools2.HasError(err, "数据解析失败", -1) + data.UpdateBy = tools2.GetUserIdStr(c) result, err := data.Update() - pkg.HasError(err, "", -1) + tools2.HasError(err, "", -1) var res app.Response res.Data = result @@ -205,10 +204,10 @@ func UpdateSysTable(c *gin.Context) { // @Router /api/v1/sys/tables/info/{tableId} [delete] func DeleteSysTables(c *gin.Context) { var data tools.SysTables - id, err := utils.StringToInt(c.Param("tableId")) + id, err := tools2.StringToInt(c.Param("tableId")) data.TableId = id _, err = data.Delete() - pkg.HasError(err, "删除失败", 500) + tools2.HasError(err, "删除失败", 500) var res app.Response res.Msg = "删除成功" c.JSON(http.StatusOK, res.ReturnOK()) diff --git a/cmd/api/server.go b/cmd/api/server.go new file mode 100644 index 00000000..55880667 --- /dev/null +++ b/cmd/api/server.go @@ -0,0 +1,96 @@ +package api + +import ( + "context" + "fmt" + "github.com/gin-gonic/gin" + "github.com/spf13/cobra" + "github.com/spf13/viper" + "go-admin/database" + "go-admin/router" + "go-admin/tools" + config2 "go-admin/tools/config" + "log" + "net/http" + "os" + "os/signal" + "time" +) + +var ( + config string + port string + mode string + //auto tls + //StartCmd : set up restful api server + StartCmd = &cobra.Command{ + Use: "server", + Short: "Start API server", + Example: "go-admin server config/settings.yml", + PreRun: func(cmd *cobra.Command, args []string) { + usage() + setup() + }, + RunE: func(cmd *cobra.Command, args []string) error { + return run() + }, + } +) + +func init() { + StartCmd.PersistentFlags().StringVarP(&config, "config", "c", "config/settings.yml", "Start server with provided configuration file") + StartCmd.PersistentFlags().StringVarP(&port, "port", "p", "8000", "Tcp port server listening on") + StartCmd.PersistentFlags().StringVarP(&mode, "mode", "m", "dev", "server mode ; eg:dev,test,prod") +} + +func usage() { + usageStr := `starting api server` + fmt.Printf("%s\n", usageStr) +} + +func setup() { + + //1. 读取配置 + config2.ConfigSetup(config) + //2. 设置日志 + tools.InitLogger() + //3. 初始化数据库链接 + database.Setup() + //4. 设置gin mode + if viper.GetString("settings.application.mode") == string(tools.ModeProd) { + gin.SetMode(gin.ReleaseMode) + } +} + +func run() error { + r := router.InitRouter() + + defer database.Eloquent.Close() + + srv := &http.Server{ + Addr: config2.ApplicationConfig.Host + ":" + config2.ApplicationConfig.Port, + Handler: r, + } + + go func() { + // 服务连接 + if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { + log.Fatalf("listen: %s\n", err) + } + }() + log.Println("Server Run ", config2.ApplicationConfig.Host+":"+config2.ApplicationConfig.Port) + log.Println("Enter Control + C Shutdown Server") + // 等待中断信号以优雅地关闭服务器(设置 5 秒的超时时间) + quit := make(chan os.Signal) + signal.Notify(quit, os.Interrupt) + <-quit + log.Println("Shutdown Server ...") + + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + if err := srv.Shutdown(ctx); err != nil { + log.Fatal("Server Shutdown:", err) + } + log.Println("Server exiting") + return nil +} diff --git a/cmd/cobra.go b/cmd/cobra.go new file mode 100644 index 00000000..2973eb21 --- /dev/null +++ b/cmd/cobra.go @@ -0,0 +1,34 @@ +package cmd + +import ( + "github.com/spf13/cobra" + "go-admin/cmd/api" + "go-admin/cmd/migrate" + "log" + "os" +) + +var rootCmd = &cobra.Command{ + Use: "go-admin", + Short: "-v", + SilenceUsage: true, + DisableAutoGenTag: true, + Long: `go-admin`, + PersistentPreRunE: func(*cobra.Command, []string) error { return nil }, + Run: func(cmd *cobra.Command, args []string) { + usageStr := `go-admin 0.0.1` + log.Printf("%s\n", usageStr) + }, +} + +func init() { + rootCmd.AddCommand(api.StartCmd) + rootCmd.AddCommand(migrate.StartCmd) +} + +//Execute : apply commands +func Execute() { + if err := rootCmd.Execute(); err != nil { + os.Exit(-1) + } +} \ No newline at end of file diff --git a/cmd/migrate/server.go b/cmd/migrate/server.go new file mode 100644 index 00000000..f011e4b6 --- /dev/null +++ b/cmd/migrate/server.go @@ -0,0 +1,71 @@ +package migrate + +import ( + "fmt" + orm "go-admin/database" + "go-admin/models" + "go-admin/models/gorm" + tools2 "go-admin/models/tools" + "go-admin/tools" + config2 "go-admin/tools/config" + + "github.com/spf13/cobra" +) + +var ( + config string + mode string + StartCmd = &cobra.Command{ + Use: "migrate", + Short: "Migrate about gdb operator", + Run: func(cmd *cobra.Command, args []string) { + run() + }, + } +) + +func init() { + StartCmd.PersistentFlags().StringVarP(&config, "config", "c", "config/app.yml", "Start server with provided configuration file") + StartCmd.PersistentFlags().StringVarP(&mode, "mode", "m", "dev", "server mode ; eg:dev,test,prod") +} + +func run() { + usage := `start migrate` + fmt.Println(usage) + //1. 读取配置 + config2.ConfigSetup(config) + //2. 设置日志 + tools.InitLogger() + //3. 初始化数据库链接 + //dao.Setup() + //4. 数据库迁移 + gorm.AutoMigrate(orm.Eloquent) + //db := gdb.GetDB() + //db.AutoMigrate(migrateModel()...) + usage = `finish` + fmt.Println(usage) +} + +func migrateModel() error { + if config2.DatabaseConfig.Dbtype == "mysql" { + orm.Eloquent = orm.Eloquent.Set("gorm:table_options", "ENGINE=InnoDB CHARSET=utf8mb4") + } + orm.Eloquent.SingularTable(true) + return orm.Eloquent.AutoMigrate( + new(models.CasbinRule), + new(tools2.SysTables), + new(tools2.SysColumns), + new(models.Dept), + new(models.Menu), + new(models.LoginLog), + new(models.SysOperLog), + new(models.RoleMenu), + new(models.SysRoleDept), + new(models.SysUser), + new(models.SysRole), + new(models.Post), + new(models.DictData), + new(models.SysConfig), + new(models.DictType), + ).Error +} diff --git a/config/config.go b/config/config.go deleted file mode 100644 index e608053a..00000000 --- a/config/config.go +++ /dev/null @@ -1,47 +0,0 @@ -package config - -import ( - "github.com/spf13/viper" - "log" -) - -var cfgDatabase *viper.Viper -var cfgApplication *viper.Viper -var cfgJwt *viper.Viper - -func init() { - viper.SetConfigName("settings") - viper.AddConfigPath("./config") - err := viper.ReadInConfig() - if err != nil { - log.Println(err) - } - - cfgDatabase = viper.Sub("settings.database") - if cfgDatabase == nil { - panic("config not found settings.database") - } - DatabaseConfig = InitDatabase(cfgDatabase) - - cfgApplication = viper.Sub("settings.application") - if cfgApplication == nil { - panic("config not found settings.application") - } - ApplicationConfig = InitApplication(cfgApplication) - - cfgJwt = viper.Sub("settings.jwt") - if cfgJwt == nil { - panic("config not found settings.jwt") - } - JwtConfig = InitJwt(cfgJwt) -} - -func SetApplicationIsInit() { - SetConfig("./config","settings.application.isInit", false) -} - -func SetConfig(configPath string,key string,value interface{}){ - viper.AddConfigPath(configPath) - viper.Set(key, value) - viper.WriteConfig() -} diff --git a/config/policy.csv b/config/policy.csv deleted file mode 100644 index fe74717e..00000000 --- a/config/policy.csv +++ /dev/null @@ -1,75 +0,0 @@ -p, admin, /api/v1/menulist, GET -p, admin, /api/v1/menu, POST -p, admin, /api/v1/dict/databytype/, GET -p, admin, /api/v1/menu/, PUT -p, admin, /api/v1/menu/, DELETE -p, admin, /api/v1/sysUserList, GET -p, admin, /api/v1/sysUser/:id, GET -p, admin, /api/v1/sysUser/, GET -p, admin, /api/v1/sysUser, POST -p, admin, /api/v1/sysUser, PUT -p, admin, /api/v1/sysUser/:id, DELETE -p, admin, /api/v1/user/profile, GET -p, admin, /api/v1/rolelist, GET -p, admin, /api/v1/role/:id, GET -p, admin, /api/v1/role, POST -p, admin, /api/v1/role, PUT -p, admin, /api/v1/role/:id, DELETE -p, admin, /api/v1/configList, GET -p, admin, /api/v1/config/:id, GET -p, admin, /api/v1/configKey/:id, GET -p, admin, /api/v1/config, POST -p, admin, /api/v1/config/, PUT -p, admin, /api/v1/config/:id, DELETE -p, admin, /api/v1/menurole, GET -p, admin, /api/v1/roleMenuTreeselect/:id, GET -p, admin, /api/v1/menuTreeselect, GET -p, admin, /api/v1/rolemenu, GET -p, admin, /api/v1/rolemenu, POST -p, admin, /api/v1/rolemenu/:id, DELETE -p, admin, /api/v1/doctor, GET -p, admin, /api/v1/doctor, POST -p, admin, /api/v1/doctor/:id, PUT -p, admin, /api/v1/doctor/:id, DELETE -p, admin, /api/v1/doctor/pic/, POST -p, admin, /api/v1/deptList, GET -p, admin, /api/v1/dept/:id, GET -p, admin, /api/v1/dept, POST -p, admin, /api/v1/dept, PUT -p, admin, /api/v1/dept/:id, DELETE -p, admin, /api/v1/dict/datalist, GET -p, admin, /api/v1/dict/data/:id, GET -p, admin, /api/v1/dict/databytype/:id, GET -p, admin, /api/v1/dict/data, POST -p, admin, /api/v1/dict/data/, PUT -p, admin, /api/v1/dict/data/:id, DELETE -p, admin, /api/v1/dict/typelist, GET -p, admin, /api/v1/dict/type/:id, GET -p, admin, /api/v1/dict/type, POST -p, admin, /api/v1/dict/type, PUT -p, admin, /api/v1/dict/type/:id, DELETE -p, admin, /api/v1/postlist, GET -p, admin, /api/v1/post/:id, GET -p, admin, /api/v1/post, POST -p, admin, /api/v1/post, PUT -p, admin, /api/v1/post/:id, DELETE -p, admin, /api/v1/calendar, GET -p, admin, /api/v1/calendar, POST -p, admin, /api/v1/calendar/:id, PUT -p, admin, /api/v1/calendar/:id, DELETE -p, admin, /api/v1/member, GET -p, admin, /api/v1/member, POST -p, admin, /api/v1/member/:id, PUT -p, admin, /api/v1/member/:id, DELETE -p, admin, /api/v1/orders, GET -p, admin, /api/v1/orders/:id, GET -p, admin, /api/v1/orders, POST -p, admin, /api/v1/orders/:id, PUT -p, admin, /api/v1/orders/:id, DELETE -p, admin, /api/v1/menu/:id, GET -p, admin, /api/v1/menu/:id, PUT -p, admin, /api/v1/menuids, GET -p, admin, /api/v1/loginloglist, GET -p, admin, /api/v1/loginlog/:id, DELETE -p, admin, /api/v1/operloglist, GET -p, admin, /api/v1/getinfo, GET \ No newline at end of file diff --git a/config/settings.yml b/config/settings.yml index b34b377d..4487df11 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -1,21 +1,22 @@ settings: application: - env: dev - envmsg: "谢谢您的参与,但为了大家更好的体验,所以本次提交就算了吧!\U0001F600\U0001F600\U0001F600" + mode: dev # dev开发环境 test测试环境 prod线上环境 + demomsg: "谢谢您的参与,但为了大家更好的体验,所以本次提交就算了吧!\U0001F600\U0001F600\U0001F600" host: 0.0.0.0 isinit: false - logpath: temp/logs/log.txt name: testApp port: 8000 readtimeout: 1 writertimeout: 2 + log: + dir: temp/logs jwt: secret: go-admin timeout: 3600 database: - database: goadmin - dbtype: mysql # sqlite3 - host: 127.0.0.1 # sqlite3.db + name: goadmindb + dbtype: mysql + host: 127.0.0.1 password: 123456 port: 3306 username: root diff --git a/database/mysql.go b/database/mysql.go index 24394d40..23f31a21 100644 --- a/database/mysql.go +++ b/database/mysql.go @@ -2,71 +2,81 @@ package database import ( "bytes" - "fmt" _ "github.com/go-sql-driver/mysql" //加载mysql "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/sqlite" - config2 "go-admin/config" + "go-admin/tools/config" "log" "strconv" ) var Eloquent *gorm.DB -func init() { +var ( + DbType string + Host string + Port int + Name string + Username string + Password string +) - dbType := config2.DatabaseConfig.Dbtype - host := config2.DatabaseConfig.Host - port := config2.DatabaseConfig.Port - database := config2.DatabaseConfig.Database - username := config2.DatabaseConfig.Username - password := config2.DatabaseConfig.Password +func Setup() { - if dbType != "mysql" && dbType != "sqlite3" { - fmt.Println("db type unknow") + DbType = config.DatabaseConfig.Dbtype + Host = config.DatabaseConfig.Host + Port = config.DatabaseConfig.Port + Name = config.DatabaseConfig.Name + Username = config.DatabaseConfig.Username + Password = config.DatabaseConfig.Password + + if DbType != "mysql" && DbType != "sqlite3" { + log.Println("db type unknow") } var err error - var conn bytes.Buffer - conn.WriteString(username) - conn.WriteString(":") - conn.WriteString(password) - conn.WriteString("@tcp(") - conn.WriteString(host) - conn.WriteString(":") - conn.WriteString(strconv.Itoa(port)) - conn.WriteString(")") - conn.WriteString("/") - conn.WriteString(database) - conn.WriteString("?charset=utf8&parseTime=True&loc=Local&timeout=1000ms") + conn := GetMysqlConnect() - log.Println(conn.String()) + log.Println(conn) var db Database - if dbType == "mysql" { + if DbType == "mysql" { db = new(Mysql) + Eloquent, err = db.Open(DbType, conn) - Eloquent, err = db.Open(dbType, conn.String()) - - } else if dbType == "sqlite3" { + } else if DbType == "sqlite3" { db = new(SqlLite) - Eloquent, err = db.Open(dbType, host) + Eloquent, err = db.Open(DbType, Host) } else { panic("db type unknow") } - - Eloquent.LogMode(true) if err != nil { - log.Fatalln("%s connect error %v",dbType, err) - } else { - log.Println("%s connect success!",dbType) + log.Fatalln("%s connect error %v", DbType, err) } + log.Println("%s connect success!", DbType) if Eloquent.Error != nil { log.Fatalln("database error %v", Eloquent.Error) } + Eloquent.LogMode(true) +} + +func GetMysqlConnect() string { + var conn bytes.Buffer + conn.WriteString(Username) + conn.WriteString(":") + conn.WriteString(Password) + conn.WriteString("@tcp(") + conn.WriteString(Host) + conn.WriteString(":") + conn.WriteString(strconv.Itoa(Port)) + conn.WriteString(")") + conn.WriteString("/") + conn.WriteString(Name) + conn.WriteString("?charset=utf8&parseTime=True&loc=Local&timeout=1000ms") + return conn.String() } type Database interface { diff --git a/go.mod b/go.mod index 4af0d03c..007f442c 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,6 @@ require ( github.com/go-ole/go-ole v1.2.4 // indirect github.com/go-openapi/spec v0.19.7 // indirect github.com/go-openapi/swag v0.19.8 // indirect - github.com/go-redis/redis v6.15.7+incompatible github.com/go-sql-driver/mysql v1.4.1 github.com/golang/protobuf v1.3.2 // indirect github.com/google/uuid v1.1.1 @@ -21,12 +20,14 @@ require ( github.com/json-iterator/go v1.1.8 // indirect github.com/mailru/easyjson v0.7.1 // indirect github.com/mattn/go-isatty v0.0.10 // indirect + github.com/mitchellh/go-homedir v1.1.0 github.com/mojocn/base64Captcha v1.3.1 github.com/mssola/user_agent v0.5.1 github.com/robfig/cron/v3 v3.0.0 github.com/satori/go.uuid v1.2.0 github.com/shirou/gopsutil v2.20.3+incompatible github.com/sirupsen/logrus v1.2.0 + github.com/spf13/cobra v1.0.0 github.com/spf13/viper v1.6.2 github.com/swaggo/gin-swagger v1.2.0 github.com/swaggo/swag v1.6.5 diff --git a/go.sum b/go.sum index 803f097d..1fecdc3d 100644 --- a/go.sum +++ b/go.sum @@ -41,6 +41,7 @@ github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -101,8 +102,6 @@ github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tF github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.8 h1:vfK6jLhs7OI4tAXkvkooviaE1JEPcw3mutyegLHHjmk= github.com/go-openapi/swag v0.19.8/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY= -github.com/go-redis/redis v6.15.7+incompatible h1:3skhDh95XQMpnqeqNftPkQD9jL9e5e36z/1SUm6dy1U= -github.com/go-redis/redis v6.15.7+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= @@ -145,6 +144,8 @@ github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/jinzhu/gorm v1.9.10 h1:HvrsqdhCW78xpJF67g1hMxS6eCToo9PZH4LDB8WKPac= github.com/jinzhu/gorm v1.9.10/go.mod h1:Kh6hTsSGffh4ui079FHrR5Gg+5D0hgihqDcsDN2BBJY= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= @@ -175,6 +176,7 @@ github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4= github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329 h1:2gxZ0XQIU/5z3Z3bUBu+FXuk2pFbkN6tcwi/pjyaDic= @@ -194,6 +196,8 @@ github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcME github.com/mattn/go-sqlite3 v1.10.0 h1:jbhqpg7tQe4SupckyijYiy0mJJ/pRyHvXf7JdWK860o= github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -257,10 +261,13 @@ github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8= +github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.6.2 h1:7aKfF+e8/k68gda3LOjo5RxiUqddoFxVq4BKBPrxk5E= github.com/spf13/viper v1.6.2/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= diff --git a/handler/auth.go b/handler/auth.go index b5804ca6..ade8f7a8 100644 --- a/handler/auth.go +++ b/handler/auth.go @@ -6,7 +6,7 @@ import ( "github.com/mssola/user_agent" "go-admin/models" jwt "go-admin/pkg/jwtauth" - "go-admin/pkg/utils" + "go-admin/tools" "log" "net/http" ) @@ -57,9 +57,9 @@ func Authenticator(c *gin.Context) (interface{}, error) { ua := user_agent.New(c.Request.UserAgent()) loginlog.Ipaddr = c.ClientIP() - location := utils.GetLocation(c.ClientIP()) + location := tools.GetLocation(c.ClientIP()) loginlog.LoginLocation = location - loginlog.LoginTime = utils.GetCurrntTime() + loginlog.LoginTime = tools.GetCurrntTime() loginlog.Status = "0" loginlog.Remark = c.Request.UserAgent() browserName, browserVersion := ua.Browser() @@ -110,16 +110,16 @@ func LogOut(c *gin.Context) { var loginlog models.LoginLog ua := user_agent.New(c.Request.UserAgent()) loginlog.Ipaddr = c.ClientIP() - location := utils.GetLocation(c.ClientIP()) + location := tools.GetLocation(c.ClientIP()) loginlog.LoginLocation = location - loginlog.LoginTime = utils.GetCurrntTime() + loginlog.LoginTime = tools.GetCurrntTime() loginlog.Status = "0" loginlog.Remark = c.Request.UserAgent() browserName, browserVersion := ua.Browser() loginlog.Browser = browserName + " " + browserVersion loginlog.Os = ua.OS() loginlog.Platform = ua.Platform() - loginlog.Username = utils.GetUserName(c) + loginlog.Username = tools.GetUserName(c) loginlog.Msg = "退出成功" loginlog.Create() c.JSON(http.StatusOK, gin.H{ diff --git a/handler/goadmin.go b/handler/goadmin.go new file mode 100644 index 00000000..f2c830e7 --- /dev/null +++ b/handler/goadmin.go @@ -0,0 +1,10 @@ +package handler + +import ( + "github.com/gin-gonic/gin" + "go-admin/tools/app" +) + +func HelloGoAdmin(c *gin.Context) { + app.OK(c,"欢迎使用go-admin 中后台脚手架","") +} \ No newline at end of file diff --git a/handler/sd/check.go b/handler/sd/check.go index 705228f1..9554b504 100644 --- a/handler/sd/check.go +++ b/handler/sd/check.go @@ -7,7 +7,7 @@ import ( "github.com/shirou/gopsutil/disk" "github.com/shirou/gopsutil/load" "github.com/shirou/gopsutil/mem" - "go-admin/pkg/app" + "go-admin/tools/app" "net/http" "runtime" "time" diff --git a/main.go b/main.go index 1f0bb574..b6bc81e7 100644 --- a/main.go +++ b/main.go @@ -1,18 +1,7 @@ package main import ( - "context" - "github.com/gin-gonic/gin" - "go-admin/config" - orm "go-admin/database" - "go-admin/models" - "go-admin/models/gorm" - "go-admin/router" - "log" - "net/http" - "os" - "os/signal" - "time" + "go-admin/cmd" ) // @title go-admin API @@ -26,58 +15,59 @@ import ( // @in header // @name Authorization +//func main() { +// configName := "settings" +// +// +// config.InitConfig(configName) +// +// gin.SetMode(gin.DebugMode) +// log.Println(config.DatabaseConfig.Port) +// +// err := gorm.AutoMigrate(orm.Eloquent) +// if err != nil { +// log.Fatalln("数据库初始化失败 err: %v", err) +// } +// +// if config.ApplicationConfig.IsInit { +// if err := models.InitDb(); err != nil { +// log.Fatal("数据库基础数据初始化失败!") +// } else { +// config.SetApplicationIsInit() +// } +// } +// +// r := router.InitRouter() +// +// defer orm.Eloquent.Close() +// +// srv := &http.Server{ +// Addr: config.ApplicationConfig.Host + ":" + config.ApplicationConfig.Port, +// Handler: r, +// } +// +// go func() { +// // 服务连接 +// if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { +// log.Fatalf("listen: %s\n", err) +// } +// }() +// log.Println("Server Run ", config.ApplicationConfig.Host+":"+config.ApplicationConfig.Port) +// log.Println("Enter Control + C Shutdown Server") +// // 等待中断信号以优雅地关闭服务器(设置 5 秒的超时时间) +// quit := make(chan os.Signal) +// signal.Notify(quit, os.Interrupt) +// <-quit +// log.Println("Shutdown Server ...") +// +// ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) +// defer cancel() +// if err := srv.Shutdown(ctx); err != nil { +// log.Fatal("Server Shutdown:", err) +// } +// log.Println("Server exiting") +//} + func main() { - - if config.ApplicationConfig.Env == "dev" { - log.SetFlags(log.Lshortfile | log.LstdFlags) - } else { - gin.SetMode(gin.ReleaseMode) - } - log.Println(config.DatabaseConfig.Port) - - err := gorm.AutoMigrate(orm.Eloquent) - if err != nil { - log.Fatalln("数据库初始化失败 err: %v", err) - } - - if config.ApplicationConfig.IsInit { - if err := models.InitDb(); err != nil { - log.Fatal("数据库基础数据初始化失败!") - } else { - config.SetApplicationIsInit() - } - } - - r := router.InitRouter() - - defer orm.Eloquent.Close() - //if err := r.Run(config.ApplicationConfig.Host + ":" + config.ApplicationConfig.Port); err != nil { - // log.Fatal(err) - //} - - srv := &http.Server{ - Addr: config.ApplicationConfig.Host + ":" + config.ApplicationConfig.Port, - Handler: r, - } - - go func() { - // 服务连接 - if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { - log.Fatalf("listen: %s\n", err) - } - }() - log.Println("Server Run ", config.ApplicationConfig.Host+":"+config.ApplicationConfig.Port) - log.Println("Enter Control + C Shutdown Server") - // 等待中断信号以优雅地关闭服务器(设置 5 秒的超时时间) - quit := make(chan os.Signal) - signal.Notify(quit, os.Interrupt) - <-quit - log.Println("Shutdown Server ...") - - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) - defer cancel() - if err := srv.Shutdown(ctx); err != nil { - log.Fatal("Server Shutdown:", err) - } - log.Println("Server exiting") + cmd.Execute() } diff --git a/middleware/auth.go b/middleware/auth.go index aa7fc029..a7944fc9 100644 --- a/middleware/auth.go +++ b/middleware/auth.go @@ -1,9 +1,9 @@ package middleware import ( - config2 "go-admin/config" "go-admin/handler" jwt "go-admin/pkg/jwtauth" + "go-admin/tools/config" "time" ) @@ -13,7 +13,7 @@ func AuthInit() (*jwt.GinJWTMiddleware, error) { Key: []byte("secret key"), Timeout: time.Hour, MaxRefresh: time.Hour, - IdentityKey: config2.ApplicationConfig.JwtSecret, + IdentityKey: config.ApplicationConfig.JwtSecret, PayloadFunc: handler.PayloadFunc, IdentityHandler: handler.IdentityHandler, Authenticator: handler.Authenticator, diff --git a/middleware/demo.go b/middleware/demo.go index 0448f725..00954dcd 100644 --- a/middleware/demo.go +++ b/middleware/demo.go @@ -2,20 +2,20 @@ package middleware import ( "github.com/gin-gonic/gin" - "go-admin/config" + config2 "go-admin/tools/config" "net/http" ) func DemoEvn() gin.HandlerFunc { return func(c *gin.Context) { - if config.ApplicationConfig.Env == "demo" { + if config2.ApplicationConfig.Mode == "demo" { method := c.Request.Method if method == "GET" || method == "OPTIONS" || c.Request.RequestURI == "/login" || c.Request.RequestURI == "/api/v1/logout" { c.Next() } else { c.JSON(http.StatusOK, gin.H{ "code": 500, - "msg": config.ApplicationConfig.EnvMsg, + "msg": config2.ApplicationConfig.DemoMsg, }) c.Abort() return diff --git a/middleware/logger.go b/middleware/logger.go index f0c1ba20..b47a5a49 100644 --- a/middleware/logger.go +++ b/middleware/logger.go @@ -4,10 +4,8 @@ import ( "fmt" "github.com/gin-gonic/gin" "github.com/sirupsen/logrus" - "go-admin/config" "go-admin/models" - "go-admin/pkg/utils" - "os" + "go-admin/tools" "strings" "time" ) @@ -18,20 +16,20 @@ var logger = logrus.New() // 日志记录到文件 func LoggerToFile() gin.HandlerFunc { - //写入文件 - src, err := os.OpenFile(config.ApplicationConfig.LogPath, os.O_APPEND|os.O_WRONLY, os.ModeAppend) - if err != nil { - fmt.Println("err", err) - } - - //设置输出 - logger.Out = src - - //设置日志级别 - logger.SetLevel(logrus.DebugLevel) - - //设置日志格式 - logger.SetFormatter(&logrus.TextFormatter{}) + ////写入文件 + //src, err := os.OpenFile(config2.LogConfig.Dir+"/", os.O_APPEND|os.O_WRONLY, os.ModeAppend) + //if err != nil { + // fmt.Println("err", err) + //} + // + ////设置输出 + //logger.Out = src + // + ////设置日志级别 + //logger.SetLevel(logrus.DebugLevel) + // + ////设置日志格式 + //logger.SetFormatter(&logrus.TextFormatter{}) return func(c *gin.Context) { // 开始时间 @@ -84,9 +82,9 @@ func LoggerToFile() gin.HandlerFunc { menuList, _ := menu.Get() sysOperLog := models.SysOperLog{} sysOperLog.OperIp = clientIP - sysOperLog.OperLocation = utils.GetLocation(clientIP) - sysOperLog.Status = utils.IntToString(statusCode) - sysOperLog.OperName = utils.GetUserName(c) + sysOperLog.OperLocation = tools.GetLocation(clientIP) + sysOperLog.Status = tools.IntToString(statusCode) + sysOperLog.OperName = tools.GetUserName(c) sysOperLog.RequestMethod = c.Request.Method sysOperLog.OperUrl = reqUri if reqUri == "/login" { @@ -112,9 +110,9 @@ func LoggerToFile() gin.HandlerFunc { sysOperLog.Title = menuList[0].Title } b, _ := c.Get("body") - sysOperLog.OperParam, _ = utils.StructToJsonStr(b) - sysOperLog.CreateBy = utils.GetUserName(c) - sysOperLog.OperTime = utils.GetCurrntTime() + sysOperLog.OperParam, _ = tools.StructToJsonStr(b) + sysOperLog.CreateBy = tools.GetUserName(c) + sysOperLog.OperTime = tools.GetCurrntTime() sysOperLog.LatencyTime = (latencyTime).String() sysOperLog.UserAgent = c.Request.UserAgent() if c.Err() == nil { diff --git a/middleware/permission.go b/middleware/permission.go index e8094550..c1c9fbac 100644 --- a/middleware/permission.go +++ b/middleware/permission.go @@ -2,10 +2,10 @@ package middleware import ( "github.com/gin-gonic/gin" - "go-admin/pkg" mycasbin "go-admin/pkg/casbin" "go-admin/pkg/jwtauth" _ "go-admin/pkg/jwtauth" + "go-admin/tools" "log" "net/http" ) @@ -16,12 +16,12 @@ func AuthCheckRole() gin.HandlerFunc { data, _ := c.Get("JWT_PAYLOAD") v := data.(jwtauth.MapClaims) e, err := mycasbin.Casbin() - pkg.HasError(err,"",500) + tools.HasError(err,"",500) //检查权限 res, err := e.Enforce(v["rolekey"], c.Request.URL.Path, c.Request.Method) log.Println("----------------", v["rolekey"], c.Request.URL.Path, c.Request.Method) - pkg.HasError(err,"",500) + tools.HasError(err,"",500) if res { c.Next() diff --git a/models/config.go b/models/config.go index 68c42ab2..a8124448 100644 --- a/models/config.go +++ b/models/config.go @@ -2,7 +2,7 @@ package models import ( orm "go-admin/database" - "go-admin/pkg/utils" + "go-admin/tools" ) type SysConfig struct { @@ -71,7 +71,7 @@ func (e *SysConfig) GetPage(pageSize int, pageIndex int) ([]SysConfig, int, erro // 数据权限控制 dataPermission := new(DataPermission) - dataPermission.UserId, _ = utils.StringToInt(e.DataScope) + dataPermission.UserId, _ = tools.StringToInt(e.DataScope) table = dataPermission.GetDataScope("sys_config", table) var count int diff --git a/models/datascope.go b/models/datascope.go index 2202e119..6bc0da64 100644 --- a/models/datascope.go +++ b/models/datascope.go @@ -2,7 +2,7 @@ package models import ( "github.com/jinzhu/gorm" - "go-admin/pkg/utils" + "go-admin/tools" ) type DataPermission struct { @@ -27,7 +27,7 @@ func (e *DataPermission) GetDataScope(tbname string, table *gorm.DB) *gorm.DB { table = table.Where(tbname+".create_by in (SELECT user_id from sys_user where dept_id = ? )", user.DeptId) } if role.DataScope == "4" { - table = table.Where(tbname+".create_by in (SELECT user_id from sys_user where sys_user.dept_id in(select dept_id from sys_dept where dept_path like ? ))", "%"+utils.IntToString(user.DeptId)+"%") + table = table.Where(tbname+".create_by in (SELECT user_id from sys_user where sys_user.dept_id in(select dept_id from sys_dept where dept_path like ? ))", "%"+tools.IntToString(user.DeptId)+"%") } if role.DataScope == "5" || role.DataScope == "" { table = table.Where(tbname+".create_by = ?", e.UserId) diff --git a/models/dept.go b/models/dept.go index a7d4e7f7..b7cb20c8 100644 --- a/models/dept.go +++ b/models/dept.go @@ -2,7 +2,7 @@ package models import ( orm "go-admin/database" - "go-admin/pkg/utils" + "go-admin/tools" ) type Dept struct { @@ -40,7 +40,7 @@ func (e *Dept) Create() (Dept, error) { err := result.Error return doc, err } - deptPath := "/" + utils.IntToString(e.DeptId) + deptPath := "/" + tools.IntToString(e.DeptId) if int(e.ParentId) != 0 { var deptP Dept orm.Eloquent.Table(e.TableName()).Where("dept_id = ?", e.ParentId).First(&deptP) @@ -115,7 +115,7 @@ func (e *Dept) GetPage(bl bool) ([]Dept, error) { if bl { // 数据权限控制 dataPermission := new(DataPermission) - dataPermission.UserId, _ = utils.StringToInt(e.DataScope) + dataPermission.UserId, _ = tools.StringToInt(e.DataScope) table = dataPermission.GetDataScope("sys_dept", table) } @@ -173,7 +173,7 @@ func (e *Dept) Update(id int) (update Dept, err error) { return } - deptPath := "/" + utils.IntToString(e.DeptId) + deptPath := "/" + tools.IntToString(e.DeptId) if int(e.ParentId) != 0 { var deptP Dept orm.Eloquent.Table(e.TableName()).Where("dept_id = ?", e.ParentId).First(&deptP) diff --git a/models/dictData.go b/models/dictData.go index 9bae03fe..16b8be4d 100644 --- a/models/dictData.go +++ b/models/dictData.go @@ -2,7 +2,7 @@ package models import ( orm "go-admin/database" - "go-admin/pkg/utils" + "go-admin/tools" ) type DictData struct { @@ -98,7 +98,7 @@ func (e *DictData) GetPage(pageSize int, pageIndex int) ([]DictData, int, error) // 数据权限控制 dataPermission := new(DataPermission) - dataPermission.UserId, _ = utils.StringToInt(e.DataScope) + dataPermission.UserId, _ = tools.StringToInt(e.DataScope) table = dataPermission.GetDataScope("sys_dict_data", table) var count int diff --git a/models/dictType.go b/models/dictType.go index 3f72c762..7235fa06 100644 --- a/models/dictType.go +++ b/models/dictType.go @@ -2,7 +2,7 @@ package models import ( orm "go-admin/database" - "go-admin/pkg/utils" + "go-admin/tools" ) type DictType struct { @@ -86,7 +86,7 @@ func (e *DictType) GetPage(pageSize int, pageIndex int) ([]DictType, int, error) // 数据权限控制 dataPermission := new(DataPermission) - dataPermission.UserId, _ = utils.StringToInt(e.DataScope) + dataPermission.UserId, _ = tools.StringToInt(e.DataScope) table = dataPermission.GetDataScope("sys_dict_type", table) var count int diff --git a/models/gorm/gorm.go b/models/gorm/gorm.go index c9210176..d0b3da39 100644 --- a/models/gorm/gorm.go +++ b/models/gorm/gorm.go @@ -2,13 +2,13 @@ package gorm import ( "github.com/jinzhu/gorm" - "go-admin/config" "go-admin/models" "go-admin/models/tools" + config2 "go-admin/tools/config" ) func AutoMigrate(db *gorm.DB) error { - if config.DatabaseConfig.Dbtype == "mysql" { + if config2.DatabaseConfig.Dbtype == "mysql" { db = db.Set("gorm:table_options", "ENGINE=InnoDB CHARSET=utf8mb4") } db.SingularTable(true) diff --git a/models/initdb.go b/models/initdb.go index d144b0e2..d17f10e6 100644 --- a/models/initdb.go +++ b/models/initdb.go @@ -2,15 +2,15 @@ package models import ( "fmt" - "go-admin/config" orm "go-admin/database" + config2 "go-admin/tools/config" "io/ioutil" "strings" ) func InitDb() error { filePath := "config/db.sql" - if config.DatabaseConfig.Dbtype == "sqlite3" { + if config2.DatabaseConfig.Dbtype == "sqlite3" { fmt.Println("sqlite3数据库无需初始化!") return nil } diff --git a/models/login.go b/models/login.go index 9c207cfa..75860b74 100644 --- a/models/login.go +++ b/models/login.go @@ -2,7 +2,7 @@ package models import ( orm "go-admin/database" - "go-admin/pkg" + "go-admin/tools" "log" "strings" ) @@ -19,15 +19,15 @@ func (u *Login) GetUser() (user SysUser, role SysRole, e error) { e = orm.Eloquent.Table("sys_user").Where("username = ? ", u.Username).Find(&user).Error if e != nil { if strings.Contains(e.Error(), "record not found") { - pkg.HasError(e, "账号或密码错误(代码204)", 500) + tools.HasError(e, "账号或密码错误(代码204)", 500) } log.Print(e) return } - _, e = pkg.CompareHashAndPassword(user.Password, u.Password) + _, e = tools.CompareHashAndPassword(user.Password, u.Password) if e != nil { if strings.Contains(e.Error(), "hashedPassword is not the hash of the given password") { - pkg.HasError(e, "账号或密码错误(代码201)", 500) + tools.HasError(e, "账号或密码错误(代码201)", 500) } log.Print(e) return diff --git a/models/menu.go b/models/menu.go index ef9ea875..f6a2430f 100644 --- a/models/menu.go +++ b/models/menu.go @@ -3,7 +3,7 @@ package models import ( "errors" orm "go-admin/database" - "go-admin/pkg/utils" + "go-admin/tools" ) type Menu struct { @@ -254,7 +254,7 @@ func (e *Menu) GetPage() (Menus []Menu, err error) { // 数据权限控制 dataPermission := new(DataPermission) - dataPermission.UserId, _ = utils.StringToInt(e.DataScope) + dataPermission.UserId, _ = tools.StringToInt(e.DataScope) table = dataPermission.GetDataScope("sys_menu", table) if err = table.Order("sort").Find(&Menus).Error; err != nil { @@ -285,9 +285,9 @@ func InitPaths(menu *Menu) (err error) { err = errors.New("父级paths异常,请尝试对当前节点父级菜单进行更新操作!") return } - menu.Paths = parentMenu.Paths + "/" + utils.IntToString(menu.MenuId) + menu.Paths = parentMenu.Paths + "/" + tools.IntToString(menu.MenuId) } else { - menu.Paths = "/0/" + utils.IntToString(menu.MenuId) + menu.Paths = "/0/" + tools.IntToString(menu.MenuId) } orm.Eloquent.Table("sys_menu").Where("menu_id = ?", menu.MenuId).Update("paths", menu.Paths) return diff --git a/models/post.go b/models/post.go index 63dbb876..68fa276a 100644 --- a/models/post.go +++ b/models/post.go @@ -2,7 +2,7 @@ package models import ( orm "go-admin/database" - "go-admin/pkg/utils" + "go-admin/tools" ) type Post struct { @@ -96,7 +96,7 @@ func (e *Post) GetPage(pageSize int, pageIndex int) ([]Post, int, error) { // 数据权限控制 dataPermission := new(DataPermission) - dataPermission.UserId, _ = utils.StringToInt(e.DataScope) + dataPermission.UserId, _ = tools.StringToInt(e.DataScope) table = dataPermission.GetDataScope("sys_post", table) var count int diff --git a/models/role.go b/models/role.go index 2c5b232c..9860fe9d 100644 --- a/models/role.go +++ b/models/role.go @@ -2,7 +2,7 @@ package models import ( orm "go-admin/database" - "go-admin/pkg/utils" + "go-admin/tools" ) type SysRole struct { @@ -50,7 +50,7 @@ func (e *SysRole) GetPage(pageSize int, pageIndex int) ([]SysRole, int, error) { // 数据权限控制 dataPermission := new(DataPermission) - dataPermission.UserId, _ = utils.StringToInt(e.DataScope) + dataPermission.UserId, _ = tools.StringToInt(e.DataScope) table = dataPermission.GetDataScope("sys_role", table) var count int diff --git a/models/rolemenu.go b/models/rolemenu.go index 36bb5321..66fb4e9d 100644 --- a/models/rolemenu.go +++ b/models/rolemenu.go @@ -3,7 +3,7 @@ package models import ( "fmt" orm "go-admin/database" - "go-admin/pkg/utils" + "go-admin/tools" ) type RoleMenu struct { @@ -134,7 +134,7 @@ func (rm *RoleMenu) Insert(roleId int, menuId []int) (bool, error) { } func (rm *RoleMenu) Delete(RoleId string, MenuID string) (bool, error) { - rm.RoleId, _ = utils.StringToInt(RoleId) + rm.RoleId, _ = tools.StringToInt(RoleId) table := orm.Eloquent.Table("sys_role_menu").Where("role_id = ?", RoleId) if MenuID != "" { table = table.Where("menu_id = ?", MenuID) diff --git a/models/sysuser.go b/models/sysuser.go index fc851b61..c98e88e3 100644 --- a/models/sysuser.go +++ b/models/sysuser.go @@ -5,10 +5,10 @@ import ( orm "go-admin/database" "go-admin/pkg" "go-admin/pkg/utils" + "go-admin/tools" + "golang.org/x/crypto/bcrypt" "log" "strings" - - "golang.org/x/crypto/bcrypt" ) // User @@ -128,7 +128,6 @@ func (e *SysUser) Get() (SysUserView SysUserView, err error) { func (e *SysUser) GetPage(pageSize int, pageIndex int) ([]SysUserPage, int, error) { var doc []SysUserPage - table := orm.Eloquent.Select("sys_user.*,sys_dept.dept_name").Table(e.TableName()) table = table.Joins("left join sys_dept on sys_dept.dept_id = sys_user.dept_id") if e.Username != "" { @@ -136,12 +135,12 @@ func (e *SysUser) GetPage(pageSize int, pageIndex int) ([]SysUserPage, int, erro } if e.DeptId != 0 { - table = table.Where("sys_user.dept_id in (select dept_id from sys_dept where dept_path like ? )", "%"+utils.IntToString(e.DeptId)+"%") + table = table.Where("sys_user.dept_id in (select dept_id from sys_dept where dept_path like ? )", "%"+tools.IntToString(e.DeptId)+"%") } // 数据权限控制 dataPermission := new(DataPermission) - dataPermission.UserId, _ = utils.StringToInt(e.DataScope) + dataPermission.UserId, _ = tools.StringToInt(e.DataScope) table = dataPermission.GetDataScope("sys_user", table) var count int @@ -221,16 +220,16 @@ func (e *SysUser) BatchDelete(id []int) (Result bool, err error) { func (e *SysUser) SetPwd(pwd SysUserPwd) (Result bool, err error) { user, _ := e.Get() - _, err = pkg.CompareHashAndPassword(user.Password, pwd.OldPassword) + _, err = tools.CompareHashAndPassword(user.Password, pwd.OldPassword) if err != nil { if strings.Contains(err.Error(), "hashedPassword is not the hash of the given password") { - pkg.HasError(err, "密码错误(代码202)", 500) + tools.HasError(err, "密码错误(代码202)", 500) } log.Print(err) return } e.Password = pwd.NewPassword _, err = e.Update(e.UserId) - pkg.HasError(err, "更新密码失败(代码202)", 500) + tools.HasError(err, "更新密码失败(代码202)", 500) return } diff --git a/models/tools/dbcolumns.go b/models/tools/dbcolumns.go index e5f8cf29..aae9f50d 100644 --- a/models/tools/dbcolumns.go +++ b/models/tools/dbcolumns.go @@ -2,8 +2,8 @@ package tools import ( "errors" - "go-admin/config" orm "go-admin/database" + config2 "go-admin/tools/config" ) type DBColumns struct { @@ -25,7 +25,7 @@ func (e *DBColumns) GetPage(pageSize int, pageIndex int) ([]DBColumns, int, erro var doc []DBColumns table := orm.Eloquent.Select("*").Table("information_schema.`COLUMNS`") - table = table.Where("table_schema= ? ", config.DatabaseConfig.Database) + table = table.Where("table_schema= ? ", config2.DatabaseConfig.Name) if e.TableName != "" { return nil, 0, errors.New("table name cannot be empty!") @@ -46,7 +46,7 @@ func (e *DBColumns) GetList() ([]DBColumns, error) { var doc []DBColumns table := orm.Eloquent.Select("*").Table("information_schema.columns") - table = table.Where("table_schema= ? ", config.DatabaseConfig.Database) + table = table.Where("table_schema= ? ", config2.DatabaseConfig.Name) if e.TableName == "" { return nil, errors.New("table name cannot be empty!") diff --git a/models/tools/dbtables.go b/models/tools/dbtables.go index 46df8675..08229f32 100644 --- a/models/tools/dbtables.go +++ b/models/tools/dbtables.go @@ -2,8 +2,8 @@ package tools import ( "errors" - "go-admin/config" orm "go-admin/database" + config2 "go-admin/tools/config" ) type DBTables struct { @@ -20,7 +20,7 @@ func (e *DBTables) GetPage(pageSize int, pageIndex int) ([]DBTables, int, error) var doc []DBTables table := orm.Eloquent.Select("*").Table("information_schema.tables") - table = table.Where("table_schema= ? ", config.DatabaseConfig.Database) + table = table.Where("table_schema= ? ", config2.DatabaseConfig.Name) if e.TableName != "" { table = table.Where("TABLE_NAME = ?", e.TableName) @@ -39,7 +39,7 @@ func (e *DBTables) Get() (DBTables, error) { var doc DBTables table := orm.Eloquent.Select("*").Table("information_schema.tables") - table = table.Where("table_schema= ? ", config.DatabaseConfig.Database) + table = table.Where("table_schema= ? ", config2.DatabaseConfig.Name) if e.TableName == "" { return doc, errors.New("table name cannot be empty!") } diff --git a/pkg/casbin/mycasbin.go b/pkg/casbin/mycasbin.go index 9b3b491a..11aef3ff 100644 --- a/pkg/casbin/mycasbin.go +++ b/pkg/casbin/mycasbin.go @@ -6,14 +6,14 @@ import ( gormadapter "github.com/casbin/gorm-adapter/v2" "github.com/go-kit/kit/endpoint" _ "github.com/go-sql-driver/mysql" - "go-admin/config" - "go-admin/pkg/utils" + "go-admin/database" + "go-admin/tools/config" ) var Em endpoint.Middleware func Casbin() (*casbin.Enforcer, error) { - conn := config.DatabaseConfig.Username + ":" + config.DatabaseConfig.Password + "@tcp(" + config.DatabaseConfig.Host + ":" + utils.IntToString(config.DatabaseConfig.Port) + ")/" + config.DatabaseConfig.Database + conn := database.GetMysqlConnect() if config.DatabaseConfig.Dbtype == "sqlite3" { conn = config.DatabaseConfig.Host } diff --git a/pkg/jwtauth/jwtauth.go b/pkg/jwtauth/jwtauth.go index b38a7997..16ed6264 100644 --- a/pkg/jwtauth/jwtauth.go +++ b/pkg/jwtauth/jwtauth.go @@ -5,7 +5,7 @@ import ( "errors" "github.com/dgrijalva/jwt-go" "github.com/gin-gonic/gin" - "go-admin/config" + config2 "go-admin/tools/config" "io/ioutil" "net/http" "strings" @@ -283,9 +283,9 @@ func (mw *GinJWTMiddleware) MiddlewareInit() error { } mw.Timeout = time.Hour - if config.JwtConfig.Timeout != 0 { + if config2.JwtConfig.Timeout != 0 { // TODO: token过期时长 - mw.Timeout = time.Duration(config.JwtConfig.Timeout) * time.Second + mw.Timeout = time.Duration(config2.JwtConfig.Timeout) * time.Second } if mw.TimeFunc == nil { diff --git a/router/router.go b/router/router.go index 04a9fad1..7a3ae830 100644 --- a/router/router.go +++ b/router/router.go @@ -28,6 +28,7 @@ func InitRouter() *gin.Engine { r.Use(middleware.RequestId()) r.Use(middleware.DemoEvn()) + r.GET("/", handler.HelloGoAdmin) r.Static("/static", "./static") r.GET("/info", handler.Ping) diff --git a/pkg/app/model.go b/tools/app/model.go similarity index 100% rename from pkg/app/model.go rename to tools/app/model.go diff --git a/pkg/app/msg/message.go b/tools/app/msg/message.go similarity index 100% rename from pkg/app/msg/message.go rename to tools/app/msg/message.go diff --git a/pkg/app/return.go b/tools/app/return.go similarity index 100% rename from pkg/app/return.go rename to tools/app/return.go diff --git a/pkg/captcha/captcha.go b/tools/captcha/captcha.go similarity index 100% rename from pkg/captcha/captcha.go rename to tools/captcha/captcha.go diff --git a/config/application.go b/tools/config/application.go similarity index 77% rename from config/application.go rename to tools/config/application.go index 94c45cd4..91562e77 100644 --- a/config/application.go +++ b/tools/config/application.go @@ -10,9 +10,8 @@ type Application struct { Port string Name string JwtSecret string - LogPath string - Env string - EnvMsg string + Mode string + DemoMsg string } func InitApplication(cfg *viper.Viper) *Application { @@ -24,9 +23,8 @@ func InitApplication(cfg *viper.Viper) *Application { Port: cfg.GetString("port"), Name: cfg.GetString("name"), JwtSecret: cfg.GetString("jwtSecret"), - LogPath: cfg.GetString("logPath"), - Env: cfg.GetString("env"), - EnvMsg: cfg.GetString("envMsg"), + Mode: cfg.GetString("mode"), + DemoMsg: cfg.GetString("demoMsg"), } } diff --git a/tools/config/config.go b/tools/config/config.go new file mode 100644 index 00000000..b55987fc --- /dev/null +++ b/tools/config/config.go @@ -0,0 +1,76 @@ +package config + +import ( + "fmt" + "github.com/spf13/viper" + "io/ioutil" + "log" + "os" + "strings" +) + +var cfgDatabase *viper.Viper +var cfgApplication *viper.Viper +var cfgJwt *viper.Viper +var cfgLog *viper.Viper + +//func init() { +// InitConfig("settings.dev") +//} + +//载入配置文件 +func ConfigSetup(path string) { + viper.SetConfigFile(path) + content, err := ioutil.ReadFile(path) + if err != nil { + log.Fatal(fmt.Sprintf("Read config file fail: %s", err.Error())) + } + //Replace environment variables + err = viper.ReadConfig(strings.NewReader(os.ExpandEnv(string(content)))) + if err != nil { + log.Fatal(fmt.Sprintf("Parse config file fail: %s", err.Error())) + } + //} + // + //func InitConfig(fileName string) { + // viper.SetConfigName(fileName) + // viper.AddConfigPath("/config") + // err := viper.ReadInConfig() + // if err != nil { + // log.Println(err) + // } + + cfgDatabase = viper.Sub("settings.database") + if cfgDatabase == nil { + panic("config not found settings.database") + } + DatabaseConfig = InitDatabase(cfgDatabase) + + cfgApplication = viper.Sub("settings.application") + if cfgApplication == nil { + panic("config not found settings.application") + } + ApplicationConfig = InitApplication(cfgApplication) + + cfgJwt = viper.Sub("settings.jwt") + if cfgJwt == nil { + panic("config not found settings.jwt") + } + JwtConfig = InitJwt(cfgJwt) + + cfgLog = viper.Sub("settings.log") + if cfgLog == nil { + panic("config not found settings.log") + } + LogConfig = InitLog(cfgLog) +} + +func SetApplicationIsInit() { + SetConfig("./config", "settings.application.isInit", false) +} + +func SetConfig(configPath string, key string, value interface{}) { + viper.AddConfigPath(configPath) + viper.Set(key, value) + viper.WriteConfig() +} diff --git a/config/database.go b/tools/config/database.go similarity index 88% rename from config/database.go rename to tools/config/database.go index fe734e66..87f341d1 100644 --- a/config/database.go +++ b/tools/config/database.go @@ -6,7 +6,7 @@ type Database struct { Dbtype string Host string Port int - Database string + Name string Username string Password string } @@ -16,7 +16,7 @@ func InitDatabase(cfg *viper.Viper) *Database { Port: cfg.GetInt("port"), Dbtype: cfg.GetString("dbType"), Host: cfg.GetString("host"), - Database: cfg.GetString("database"), + Name: cfg.GetString("name"), Username: cfg.GetString("username"), Password: cfg.GetString("password"), } diff --git a/config/jwt.go b/tools/config/jwt.go similarity index 100% rename from config/jwt.go rename to tools/config/jwt.go diff --git a/tools/config/log.go b/tools/config/log.go new file mode 100644 index 00000000..bf94e67c --- /dev/null +++ b/tools/config/log.go @@ -0,0 +1,15 @@ +package config + +import "github.com/spf13/viper" + +type Log struct { + Dir string +} + +func InitLog(cfg *viper.Viper) *Log { + return &Log{ + Dir: cfg.GetString("dir"), + } +} + +var LogConfig = new(Log) diff --git a/tools/env.go b/tools/env.go new file mode 100644 index 00000000..9cb337b8 --- /dev/null +++ b/tools/env.go @@ -0,0 +1,13 @@ +package tools + +type ( + Mode string +) + +const ( + ModeDev Mode = "dev" //开发模式 + ModeTest Mode = "test" //测试模式 + ModeProd Mode = "prod" //生产模式 + Mysql = "mysql" //mysql数据库标识 + Sqlite = "sqlite" //sqlite +) diff --git a/pkg/utils/float64.go b/tools/float64.go similarity index 88% rename from pkg/utils/float64.go rename to tools/float64.go index 82a93024..bc3cf866 100644 --- a/pkg/utils/float64.go +++ b/tools/float64.go @@ -1,4 +1,4 @@ -package utils +package tools import "strconv" diff --git a/pkg/utils/int.go b/tools/int.go similarity index 84% rename from pkg/utils/int.go rename to tools/int.go index 5d0b7606..43f0643c 100644 --- a/pkg/utils/int.go +++ b/tools/int.go @@ -1,4 +1,4 @@ -package utils +package tools import "strconv" diff --git a/pkg/utils/int64.go b/tools/int64.go similarity index 86% rename from pkg/utils/int64.go rename to tools/int64.go index d48bfff0..e469ed33 100644 --- a/pkg/utils/int64.go +++ b/tools/int64.go @@ -1,4 +1,4 @@ -package utils +package tools import "strconv" diff --git a/pkg/utils/ip.go b/tools/ip.go similarity index 97% rename from pkg/utils/ip.go rename to tools/ip.go index 2fdee857..a07287c2 100644 --- a/pkg/utils/ip.go +++ b/tools/ip.go @@ -1,4 +1,4 @@ -package utils +package tools import ( "encoding/json" diff --git a/tools/logger.go b/tools/logger.go new file mode 100644 index 00000000..b01f24cc --- /dev/null +++ b/tools/logger.go @@ -0,0 +1,56 @@ +package tools + +import ( + "errors" + log "github.com/sirupsen/logrus" + "github.com/spf13/viper" + "os" + "time" +) + +func InitLogger() { + switch Mode(viper.GetString("settings.application.mode")) { + case ModeDev, ModeTest: + log.SetOutput(os.Stdout) + log.SetLevel(log.TraceLevel) + case ModeProd: + file, err := os.OpenFile(viper.GetString("logger.dir")+"/api-"+time.Now().Format("2006-01-02")+".log", os.O_WRONLY|os.O_APPEND|os.O_CREATE|os.O_SYNC, 0600) + if err != nil { + log.Fatal("log init failed") + } + + var info os.FileInfo + info, err = file.Stat() + if err != nil { + log.Fatal(err) + } + fileWriter := logFileWriter{file, info.Size()} + log.SetOutput(&fileWriter) + log.SetLevel(log.ErrorLevel) + } + + log.SetReportCaller(true) +} + +type logFileWriter struct { + file *os.File + size int64 +} + +func (p *logFileWriter) Write(data []byte) (n int, err error) { + if p == nil { + return 0, errors.New("logFileWriter is nil") + } + if p.file == nil { + return 0, errors.New("file not opened") + } + n, e := p.file.Write(data) + p.size += int64(n) + //每天一个文件 + if p.file.Name() != viper.GetString("logger.dir")+"/api-"+time.Now().Format("2006-01-02")+".log" { + p.file.Close() + p.file, _ = os.OpenFile(viper.GetString("logger.dir")+"/api-"+time.Now().Format("2006-01-02")+".log", os.O_WRONLY|os.O_APPEND|os.O_CREATE|os.O_SYNC, 0600) + p.size = 0 + } + return n, e +} diff --git a/pkg/utils/string.go b/tools/string.go similarity index 98% rename from pkg/utils/string.go rename to tools/string.go index 9eca5e34..d266be0a 100644 --- a/pkg/utils/string.go +++ b/tools/string.go @@ -1,4 +1,4 @@ -package utils +package tools import ( "encoding/json" diff --git a/pkg/utils/url.go b/tools/url.go similarity index 96% rename from pkg/utils/url.go rename to tools/url.go index 3b61d94f..c5ac0278 100644 --- a/pkg/utils/url.go +++ b/tools/url.go @@ -1,4 +1,4 @@ -package utils +package tools import ( "github.com/gin-gonic/gin" diff --git a/pkg/utils/user.go b/tools/user.go similarity index 99% rename from pkg/utils/user.go rename to tools/user.go index 2cb24a91..84ecc013 100644 --- a/pkg/utils/user.go +++ b/tools/user.go @@ -1,4 +1,4 @@ -package utils +package tools import ( "fmt" diff --git a/pkg/utils.go b/tools/utils.go similarity index 98% rename from pkg/utils.go rename to tools/utils.go index 25ecf5d9..4af394ff 100644 --- a/pkg/utils.go +++ b/tools/utils.go @@ -1,4 +1,4 @@ -package pkg +package tools import ( "golang.org/x/crypto/bcrypt"