2021-03-24 17:18:39 +08:00
|
|
|
|
package controllers
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"encoding/json"
|
|
|
|
|
|
"mayfly-go/base/biz"
|
|
|
|
|
|
"mayfly-go/base/ctx"
|
2021-04-16 15:10:07 +08:00
|
|
|
|
"mayfly-go/base/ginx"
|
2021-03-24 17:18:39 +08:00
|
|
|
|
"mayfly-go/base/rediscli"
|
|
|
|
|
|
"mayfly-go/base/utils"
|
|
|
|
|
|
"mayfly-go/mock-server/controllers/form"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
2021-05-08 18:00:33 +08:00
|
|
|
|
const key = "ccbscf:mock:data"
|
2021-03-24 17:18:39 +08:00
|
|
|
|
|
|
|
|
|
|
// @router /api/mock-datas/:method [get]
|
2021-04-16 15:10:07 +08:00
|
|
|
|
func GetMockData(rc *ctx.ReqCtx) {
|
|
|
|
|
|
g := rc.GinCtx
|
|
|
|
|
|
method := g.Param("method")
|
|
|
|
|
|
params := utils.MapBuilder("method", method).ToMap()
|
2021-05-08 18:00:33 +08:00
|
|
|
|
// 调用该mock数据的用户,若该数据指定了生效用户,则需要校验是否可访问
|
2021-04-16 15:10:07 +08:00
|
|
|
|
username := g.Query("username")
|
|
|
|
|
|
if username != "" {
|
|
|
|
|
|
params["username"] = username
|
|
|
|
|
|
}
|
2021-05-08 18:00:33 +08:00
|
|
|
|
// 记录日志使用
|
2021-04-16 15:10:07 +08:00
|
|
|
|
rc.ReqParam = params
|
2021-03-24 17:18:39 +08:00
|
|
|
|
|
2021-04-16 15:10:07 +08:00
|
|
|
|
mockData := &form.MockData{}
|
2021-05-08 18:00:33 +08:00
|
|
|
|
// 从redis中获取key为 ‘ccbscf:mock:data’,field为‘method’的hash值
|
|
|
|
|
|
json.Unmarshal([]byte(rediscli.HGet(key, method)), mockData)
|
|
|
|
|
|
// 数据不存在或者状态为禁用
|
2021-04-16 15:10:07 +08:00
|
|
|
|
biz.IsTrue(mockData.Enable == 1, "无该mock数据")
|
2021-03-24 17:18:39 +08:00
|
|
|
|
|
2021-04-16 15:10:07 +08:00
|
|
|
|
eu := mockData.EffectiveUser
|
|
|
|
|
|
// 如果设置的生效用户为空,则表示所有用户都生效
|
|
|
|
|
|
if len(eu) == 0 {
|
|
|
|
|
|
rc.ResData = mockData.Data
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
biz.IsTrue(utils.StrLen(username) != 0, "该用户无法访问该mock数据")
|
2021-05-08 18:00:33 +08:00
|
|
|
|
// 判断该用户是否在该数据指定的生效用户中
|
2021-04-16 15:10:07 +08:00
|
|
|
|
for _, e := range eu {
|
|
|
|
|
|
if username == e {
|
|
|
|
|
|
rc.ResData = mockData.Data
|
|
|
|
|
|
return
|
2021-03-24 17:18:39 +08:00
|
|
|
|
}
|
2021-04-16 15:10:07 +08:00
|
|
|
|
}
|
|
|
|
|
|
panic(biz.NewBizErr("该用户无法访问该mock数据"))
|
2021-03-24 17:18:39 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// @router /api/mock-datas [put]
|
2021-04-16 15:10:07 +08:00
|
|
|
|
func UpdateMockData(rc *ctx.ReqCtx) {
|
|
|
|
|
|
mockData := &form.MockData{}
|
|
|
|
|
|
ginx.BindJsonAndValid(rc.GinCtx, mockData)
|
|
|
|
|
|
rc.ReqParam = mockData.Method
|
|
|
|
|
|
val, _ := json.Marshal(mockData)
|
|
|
|
|
|
rediscli.HSet(key, mockData.Method, val)
|
2021-03-24 17:18:39 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// @router /api/mock-datas [post]
|
2021-04-16 15:10:07 +08:00
|
|
|
|
func CreateMockData(rc *ctx.ReqCtx) {
|
|
|
|
|
|
mockData := &form.MockData{}
|
|
|
|
|
|
ginx.BindJsonAndValid(rc.GinCtx, mockData)
|
|
|
|
|
|
biz.IsTrue(!rediscli.HExist(key, mockData.Method), "该方法已存在")
|
|
|
|
|
|
val, _ := json.Marshal(mockData)
|
|
|
|
|
|
rediscli.HSet(key, mockData.Method, val)
|
2021-03-24 17:18:39 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// @router /api/mock-datas [get]
|
2021-04-16 15:10:07 +08:00
|
|
|
|
func GetAllData(rc *ctx.ReqCtx) {
|
|
|
|
|
|
rc.ResData = rediscli.HGetAll(key)
|
2021-03-24 17:18:39 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// @router /api/mock-datas/:method [delete]
|
2021-04-16 15:10:07 +08:00
|
|
|
|
func DeleteMockData(rc *ctx.ReqCtx) {
|
|
|
|
|
|
method := rc.GinCtx.Param("method")
|
|
|
|
|
|
rc.ReqParam = method
|
|
|
|
|
|
rediscli.HDel(key, method)
|
2021-03-24 17:18:39 +08:00
|
|
|
|
}
|