delapp get menu

This commit is contained in:
suyl
2021-07-08 11:28:16 +08:00
parent 21737e5cd9
commit ace0d7e5f3
9 changed files with 143 additions and 65 deletions

View File

@@ -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(&param); 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(&param); 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

View File

@@ -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 {

View File

@@ -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
}

View File

@@ -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)

View File

@@ -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
}

View File

@@ -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"` //菜单内容
}

View File

@@ -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)
}

View File

@@ -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
}

View File

@@ -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())
}