mirror of
				https://gitee.com/dromara/mayfly-go
				synced 2025-11-04 08:20:25 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			79 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package controllers
 | 
						|
 | 
						|
import (
 | 
						|
	"encoding/json"
 | 
						|
	"mayfly-go/base"
 | 
						|
	"mayfly-go/base/biz"
 | 
						|
	"mayfly-go/base/ctx"
 | 
						|
	"mayfly-go/base/rediscli"
 | 
						|
	"mayfly-go/base/utils"
 | 
						|
	"mayfly-go/mock-server/controllers/form"
 | 
						|
)
 | 
						|
 | 
						|
const key = "ccbscf:mock:data"
 | 
						|
 | 
						|
type MockController struct {
 | 
						|
	base.Controller
 | 
						|
}
 | 
						|
 | 
						|
// @router /api/mock-datas/:method [get]
 | 
						|
func (c *MockController) GetMockData() {
 | 
						|
	c.ReturnData(ctx.NewNoLogReqCtx(false), func(account *ctx.LoginAccount) interface{} {
 | 
						|
		val := rediscli.HGet(key, c.Ctx.Input.Param(":method"))
 | 
						|
		mockData := &form.MockData{}
 | 
						|
		json.Unmarshal([]byte(val), mockData)
 | 
						|
		biz.IsTrue(mockData.Enable == 1, "无该mock数据")
 | 
						|
 | 
						|
		eu := mockData.EffectiveUser
 | 
						|
		// 如果设置的生效用户为空,则表示所有用户都生效
 | 
						|
		if len(eu) == 0 {
 | 
						|
			return mockData.Data
 | 
						|
		}
 | 
						|
 | 
						|
		// 该mock数据需要指定的生效用户才可访问
 | 
						|
		username := c.GetString("username")
 | 
						|
		biz.IsTrue(utils.StrLen(username) != 0, "该用户无法访问该mock数据")
 | 
						|
		for _, e := range eu {
 | 
						|
			if username == e {
 | 
						|
				return mockData.Data
 | 
						|
			}
 | 
						|
		}
 | 
						|
		panic(biz.NewBizErr("该用户无法访问该mock数据"))
 | 
						|
	})
 | 
						|
}
 | 
						|
 | 
						|
// @router /api/mock-datas [put]
 | 
						|
func (c *MockController) UpdateMockData() {
 | 
						|
	c.Operation(ctx.NewReqCtx(true, "修改mock数据"), func(account *ctx.LoginAccount) {
 | 
						|
		mockData := &form.MockData{}
 | 
						|
		c.UnmarshalBodyAndValid(mockData)
 | 
						|
		val, _ := json.Marshal(mockData)
 | 
						|
		rediscli.HSet(key, mockData.Method, val)
 | 
						|
	})
 | 
						|
}
 | 
						|
 | 
						|
// @router /api/mock-datas [post]
 | 
						|
func (c *MockController) CreateMockData() {
 | 
						|
	c.Operation(ctx.NewReqCtx(true, "保存mock数据"), func(account *ctx.LoginAccount) {
 | 
						|
		mockData := &form.MockData{}
 | 
						|
		c.UnmarshalBodyAndValid(mockData)
 | 
						|
		biz.IsTrue(!rediscli.HExist(key, mockData.Method), "该方法已存在")
 | 
						|
		val, _ := json.Marshal(mockData)
 | 
						|
		rediscli.HSet(key, mockData.Method, val)
 | 
						|
	})
 | 
						|
}
 | 
						|
 | 
						|
// @router /api/mock-datas [get]
 | 
						|
func (c *MockController) GetAllData() {
 | 
						|
	c.ReturnData(ctx.NewNoLogReqCtx(false), func(account *ctx.LoginAccount) interface{} {
 | 
						|
		return rediscli.HGetAll(key)
 | 
						|
	})
 | 
						|
}
 | 
						|
 | 
						|
// @router /api/mock-datas/:method [delete]
 | 
						|
func (c *MockController) DeleteMockData() {
 | 
						|
	c.Operation(ctx.NewReqCtx(false, "删除mock数据"), func(account *ctx.LoginAccount) {
 | 
						|
		rediscli.HDel(key, c.Ctx.Input.Param(":method"))
 | 
						|
	})
 | 
						|
}
 |