From ace0d7e5f3fbb853f502a98d20aa0f41c5a74100 Mon Sep 17 00:00:00 2001 From: suyl <770236076@qq.com> Date: Thu, 8 Jul 2021 11:28:16 +0800 Subject: [PATCH] delapp get menu --- controllers/app_controller.go | 65 ++++++++++++++++++++-------------- controllers/controller.go | 16 +++++---- controllers/user_controller.go | 41 +++++++++++++-------- dao/app_dao.go | 6 +++- dao/user_dao.go | 13 +++++++ model/model.go | 20 +++++++++++ routers/router.go | 2 ++ services/app.go | 33 ++++++++++++----- services/user.go | 12 +++---- 9 files changed, 143 insertions(+), 65 deletions(-) diff --git a/controllers/app_controller.go b/controllers/app_controller.go index 538bea5..d3e7144 100644 --- a/controllers/app_controller.go +++ b/controllers/app_controller.go @@ -4,7 +4,6 @@ import ( "git.rosy.net.cn/jx-print/globals" "git.rosy.net.cn/jx-print/model" "git.rosy.net.cn/jx-print/services" - "git.rosy.net.cn/jx-print/utils" "github.com/gin-gonic/gin" "net/http" ) @@ -12,23 +11,14 @@ import ( //查询账号下的app GET func GetApps(c *gin.Context) { var ( - b, ok bool - token string - user *model.User + tokenInfo *model.TokenInfo ) globals.SugarLogger.Debugf("Begin API :%s params: %v ip: %s", c.Request.URL, c.Params, c.ClientIP()) - if token, b = checkToken(c); !b { - return - } - if user, ok = utils.GetKet(token).(*model.User); !ok { - c.JSON(http.StatusOK, &CallBack{ - Code: model.ErrCodeToken, - Desc: "token 过期或无效!", - }) + if tokenInfo = checkToken(c); tokenInfo == nil { return } if !callFunc(c, func() (retVal interface{}, errCode string, err error) { - retVal, err = services.GetApps(c, user) + retVal, err = services.GetApps(c, tokenInfo.User.UserID) return retVal, "", err }) { return @@ -45,11 +35,9 @@ type AddAppParam struct { //新建app POST func AddApp(c *gin.Context) { var ( - err error - b, ok bool - token string - user *model.User - param = &AddAppParam{} + tokenInfo *model.TokenInfo + err error + param = &AddAppParam{} ) globals.SugarLogger.Debugf("Begin API :%s params: %v ip: %s", c.Request.URL, c.Params, c.ClientIP()) if err = c.Bind(¶m); err != nil { @@ -60,18 +48,41 @@ func AddApp(c *gin.Context) { globals.SugarLogger.Debugf("End API :%s error:%v:", c.Request.URL, err) return } - if token, b = checkToken(c); !b { - return - } - if user, ok = utils.GetKet(token).(*model.User); !ok { - c.JSON(http.StatusOK, &CallBack{ - Code: model.ErrCodeToken, - Desc: "token 过期或无效!", - }) + if tokenInfo = checkToken(c); tokenInfo == nil { return } if !callFunc(c, func() (retVal interface{}, errCode string, err error) { - err = services.AddApp(c, param.Code, param.Name, param.Mobile, user.UserID) + err = services.AddApp(c, param.Code, param.Name, param.Mobile, tokenInfo.User.UserID) + return retVal, "", err + }) { + return + } + return +} + +//删除app POST +func DelApp(c *gin.Context) { + var ( + err error + tokenInfo *model.TokenInfo + param = &struct { + AppID int `json:"app_id" form:"app_id" binding:"required"` + }{} + ) + globals.SugarLogger.Debugf("Begin API :%s params: %v ip: %s", c.Request.URL, c.Params, c.ClientIP()) + if err = c.Bind(¶m); err != nil { + c.JSON(http.StatusOK, &CallBack{ + Code: model.ErrCodeNormal, + Desc: err.Error(), + }) + globals.SugarLogger.Debugf("End API :%s error:%v:", c.Request.URL, err) + return + } + if tokenInfo = checkToken(c); tokenInfo == nil { + return + } + if !callFunc(c, func() (retVal interface{}, errCode string, err error) { + err = services.DelApp(c, param.AppID, tokenInfo.User.UserID) return retVal, "", err }) { return diff --git a/controllers/controller.go b/controllers/controller.go index 9f5da7c..3afdd4a 100644 --- a/controllers/controller.go +++ b/controllers/controller.go @@ -23,11 +23,14 @@ func init() { globals.SugarLogger.Debugf("test init ...") } -func checkToken(c *gin.Context) (token string, b bool) { +func checkToken(c *gin.Context) (tokenInfo *model.TokenInfo) { var ( cookie *http.Cookie err error + ok bool + user *model.User ) + tokenInfo = &model.TokenInfo{} //验证token //v2下的接口需要验证,v1不需要 if !strings.Contains(c.Request.URL.String(), "v1") { @@ -36,20 +39,21 @@ func checkToken(c *gin.Context) (token string, b bool) { Desc: err.Error(), Code: model.ErrCodeNormal, }) - return "", false + return nil } else { - token = cookie.Value + tokenInfo.Token = cookie.Value } - if user := utils.GetKet(token); user == nil { + if user, ok = utils.GetKet(tokenInfo.Token).(*model.User); !ok || user == nil { err = fmt.Errorf("token过期或无效,请重新登录!") c.JSON(http.StatusOK, &CallBack{ Desc: err.Error(), Code: model.ErrCodeToken, }) - return "", false + return nil } + tokenInfo.User = user } - return token, true + return tokenInfo } func callFunc(c *gin.Context, worker func() (retVal interface{}, errCode string, err error)) bool { diff --git a/controllers/user_controller.go b/controllers/user_controller.go index ac1c7d2..93736f0 100644 --- a/controllers/user_controller.go +++ b/controllers/user_controller.go @@ -1,6 +1,7 @@ package controllers import ( + "encoding/json" "git.rosy.net.cn/jx-print/globals" "git.rosy.net.cn/jx-print/model" "git.rosy.net.cn/jx-print/services" @@ -34,7 +35,7 @@ func GetUsers(c *gin.Context) { }) return } - if _, b := checkToken(c); !b { + if tokenInfo := checkToken(c); tokenInfo == nil { return } if !callFunc(c, func() (retVal interface{}, errCode string, err error) { @@ -119,33 +120,31 @@ func Login(c *gin.Context) { //自动登录,获取token POST func GetTokenInfo(c *gin.Context) { var ( - token string - b bool + tokenInfo *model.TokenInfo ) globals.SugarLogger.Debugf("Begin API :%s params: %v ip: %s", c.Request.URL, c.Params, c.ClientIP()) - if token, b = checkToken(c); !b { - return - } - if !callFunc(c, func() (retVal interface{}, errCode string, err error) { - retVal, err = services.GetTokenInfo(c, token) - return retVal, "", err - }) { + if tokenInfo = checkToken(c); tokenInfo == nil { return } + data, _ := json.Marshal(tokenInfo) + c.JSON(http.StatusOK, &CallBack{ + Code: model.ErrCodeSuccess, + Data: string(data), + }) return } //登出,删token POST func Logout(c *gin.Context) { var ( - token string - b bool + tokenInfo *model.TokenInfo ) - if token, b = checkToken(c); !b { + globals.SugarLogger.Debugf("Begin API :%s params: %v ip: %s", c.Request.URL, c.Params, c.ClientIP()) + if tokenInfo = checkToken(c); tokenInfo == nil { return } if !callFunc(c, func() (retVal interface{}, errCode string, err error) { - err = services.Logout(c, token) + err = services.Logout(c, tokenInfo.Token) return retVal, "", err }) { return @@ -170,7 +169,7 @@ func UpdateUser(c *gin.Context) { globals.SugarLogger.Debugf("End API :%s error:%v:", c.Request.URL, err) return } - if _, b := checkToken(c); !b { + if tokenInfo := checkToken(c); tokenInfo == nil { return } if !callFunc(c, func() (retVal interface{}, errCode string, err error) { @@ -181,3 +180,15 @@ func UpdateUser(c *gin.Context) { } return } + +//获取菜单,文档 GET +func GetMenu(c *gin.Context) { + globals.SugarLogger.Debugf("Begin API :%s params: %v ip: %s", c.Request.URL, c.Params, c.ClientIP()) + if !callFunc(c, func() (retVal interface{}, errCode string, err error) { + retVal, err = services.GetMenu(c) + return retVal, "", err + }) { + return + } + return +} diff --git a/dao/app_dao.go b/dao/app_dao.go index 4889d6f..a3c7497 100644 --- a/dao/app_dao.go +++ b/dao/app_dao.go @@ -5,13 +5,17 @@ import ( "github.com/jmoiron/sqlx" ) -func GetApps(db *sqlx.DB, userID, mobile string) (apps []*model.Apps, err error) { +func GetApps(db *sqlx.DB, id int, userID, mobile string) (apps []*model.Apps, err error) { var sqlParams []interface{} sql := ` SELECT * FROM apps WHERE 1 = 1 ` + if id != 0 { + sql += " AND id = ?" + sqlParams = append(sqlParams, id) + } if userID != "" { sql += " AND user_id = ?" sqlParams = append(sqlParams, userID) diff --git a/dao/user_dao.go b/dao/user_dao.go index 292e374..27e6ec0 100644 --- a/dao/user_dao.go +++ b/dao/user_dao.go @@ -57,3 +57,16 @@ func GetUserForLogin(db *sqlx.DB, name, password string) (user *model.User, err } return user, err } + +func GetMenus(db *sqlx.DB) (menus []*model.Menu, err error) { + var sqlParams []interface{} + sql := ` + SELECT * + FROM menu + WHERE 1 = 1 + ` + if err = db.Select(&menus, sql, sqlParams...); err == nil { + return menus, err + } + return menus, err +} diff --git a/model/model.go b/model/model.go index b75f1a4..d63304e 100644 --- a/model/model.go +++ b/model/model.go @@ -34,6 +34,11 @@ var ( } ) +type TokenInfo struct { + User *User + Token string `json:"token"` +} + type ModelIDCULD struct { ID int `json:"id" db:"id"` CreatedAt *time.Time `json:"created_at" db:"created_at"` @@ -82,3 +87,18 @@ type Apps struct { Status int `json:"status"` //状态 Mobile string `json:"mobile"` //手机号 } + +type Menu struct { + ID int `json:"id" db:"id"` + CreatedAt *time.Time `json:"created_at" db:"created_at"` + UpdatedAt *time.Time `json:"updated_at" db:"updated_at"` + LastOperator string `json:"last_operator" db:"last_operator"` + DeletedAt *time.Time `json:"deleted_at" db:"deleted_at"` + Name string `json:"name"` //功能名 + URL string `json:"url" db:"url"` //路径 + ImgURL string `json:"img_url" db:"img_url"` //图标 + Level int `json:"level"` //级别 + ParentID int `json:"parent_id" db:"parent_id"` //父功能ID + Color string `json:"color"` //颜色 + Content string `json:"content"` //菜单内容 +} diff --git a/routers/router.go b/routers/router.go index e402375..7977894 100644 --- a/routers/router.go +++ b/routers/router.go @@ -17,6 +17,7 @@ func Init(r *gin.Engine) { app := v2.Group("/app") app.GET("/getApps", controllers.GetApps) app.GET("/addApp", controllers.AddApp) + app.GET("/delApp", controllers.DelApp) //v1是不需要token的 v1 := r.Group("v1") @@ -24,4 +25,5 @@ func Init(r *gin.Engine) { userw.GET("/login", controllers.Login) userw.GET("/refreshCode", controllers.RefreshCode) userw.GET("/register", controllers.RegisterUser) + userw.GET("/getMenu", controllers.GetMenu) } diff --git a/services/app.go b/services/app.go index 174424c..3ae489e 100644 --- a/services/app.go +++ b/services/app.go @@ -11,14 +11,11 @@ import ( "time" ) -func GetApps(c *gin.Context, user *model.User) (apps []*model.Apps, err error) { - if user == nil { - return nil, fmt.Errorf("未获取到账号信息!") - } - if user.UserID == "" { +func GetApps(c *gin.Context, userID string) (apps []*model.Apps, err error) { + if userID == "" { return nil, fmt.Errorf("账号信息有误,请重新登录!") } - return dao.GetApps(globals.GetDB(), user.UserID, "") + return dao.GetApps(globals.GetDB(), 0, userID, "") } func AddApp(c *gin.Context, code, name, mobile, userID string) (err error) { @@ -35,10 +32,10 @@ func AddApp(c *gin.Context, code, name, mobile, userID string) (err error) { } putils.DelKey(mobile) - if apps, _ := dao.GetApps(db, userID, ""); len(apps) > 2 { + if apps, _ := dao.GetApps(db, 0, userID, ""); len(apps) > 2 { return fmt.Errorf("同一个账号最多只能建3个app!") } - if apps, _ := dao.GetApps(db, "", mobile); len(apps) > 0 { + if apps, _ := dao.GetApps(db, 0, "", mobile); len(apps) > 0 { return fmt.Errorf("同一个手机号只能建1个app!") } apps := &model.Apps{ @@ -55,3 +52,23 @@ func AddApp(c *gin.Context, code, name, mobile, userID string) (err error) { err = dao.Insert(db, apps) return err } + +func DelApp(c *gin.Context, appID int, userID string) (err error) { + var ( + db = globals.GetDB() + now = time.Now() + ) + if appID == 0 { + return fmt.Errorf("参数错误!appID :%v", appID) + } + if apps, err2 := dao.GetApps(db, appID, userID, ""); err2 != nil { + return err2 + } else if len(apps) == 0 { + return fmt.Errorf("未查询到此应用!app_id :%d, user_id: %s", appID, userID) + } else { + app := apps[0] + app.DeletedAt = &now + err = dao.Update(db, app, model.FieldDeletedAt) + } + return err +} diff --git a/services/user.go b/services/user.go index 676943d..0e4bf33 100644 --- a/services/user.go +++ b/services/user.go @@ -92,14 +92,6 @@ func createToken(user *model.User) (token string) { }, TokenTypeSep) } -func GetTokenInfo(c *gin.Context, token string) (user *model.User, err error) { - result := putils.GetKet(token) - if user, ok := result.(*model.User); !ok { - return user, err - } - return user, err -} - func Logout(c *gin.Context, token string) (err error) { return putils.DelKey(token) } @@ -124,3 +116,7 @@ func UpdateUser(c *gin.Context, payload string) (err error) { err = dao.UpdateDiff(db, userp, user) return err } + +func GetMenu(c *gin.Context) (menus []*model.Menu, err error) { + return dao.GetMenus(globals.GetDB()) +}