Documentation ¶
Index ¶
- Variables
- func CleanTypeName(typeName string) string
- func ParseInject(ctx iris.Context, contextInject ...ContextValueInject) ([]*ut.Kov, error)
- type ContextValueInject
- type Crud
- func (c *Crud) Add() ISceneModelItem
- func (c *Crud) ContextInjectToBody() []ContextValueInject
- func (c *Crud) ContextInjectToFilter() []ContextValueInject
- func (c *Crud) Delete() ISceneModelItem
- func (c *Crud) Edit() ISceneModelItem
- func (c *Crud) GetAll() ISceneModelItem
- func (c *Crud) GetCount() bool
- func (c *Crud) GetSingle() ISceneModelItem
- func (c *Crud) InjectsToBody() []*ut.Kov
- func (c *Crud) InjectsToFilter() []*ut.Kov
- func (c *Crud) MustLastId() bool
- func (c *Crud) RegistryToManager(m IScenes, scope string, model string) error
- func (c *Crud) SetAdd(add ISceneModelItem)
- func (c *Crud) SetContextInjectToBody(contextInjectToBody []ContextValueInject)
- func (c *Crud) SetContextInjectToFilter(contextInjectToFilter []ContextValueInject)
- func (c *Crud) SetDelete(delete ISceneModelItem)
- func (c *Crud) SetEdit(edit ISceneModelItem)
- func (c *Crud) SetGetAll(getAll ISceneModelItem)
- func (c *Crud) SetGetCount(getCount bool)
- func (c *Crud) SetGetSingle(getSingle ISceneModelItem)
- func (c *Crud) SetInjectsToBody(injectsToBody []*ut.Kov)
- func (c *Crud) SetInjectsToFilter(injectsToFilter []*ut.Kov)
- func (c *Crud) SetMustLastId(mustLastId bool)
- type ISceneModelItem
- func NewAddItem(db *qmgo.Database, tableName string, inputStruct any, ...) (ISceneModelItem, error)
- func NewDeleteItem(db *qmgo.Database, tableName string, inputStruct any, ...) (ISceneModelItem, error)
- func NewEditItem(db *qmgo.Database, tableName string, inputStruct any, ...) (ISceneModelItem, error)
- func NewGetAllItem(db *qmgo.Database, tableName string, inputStruct any, ...) (ISceneModelItem, error)
- func NewGetSingleItem(db *qmgo.Database, tableName string, inputStruct any, ...) (ISceneModelItem, error)
- func NewItem(db *qmgo.Database, tableName string, inputStruct any, f ItemHandler) (ISceneModelItem, error)
- type IScenes
- type Item
- func (i *Item) AddContextInjectFilter(injects ...ContextValueInject)
- func (i *Item) AddFilterInject(injects ...*ut.Kov)
- func (i *Item) Clone() ISceneModelItem
- func (i *Item) GetContextInjectFilter() []ContextValueInject
- func (i *Item) GetDb() *qmgo.Database
- func (i *Item) GetExtra() *ItemExtra
- func (i *Item) GetFilterInjects() []*ut.Kov
- func (i *Item) GetHandler() ItemHandler
- func (i *Item) GetMapper() *RequestData
- func (i *Item) GetRaw() any
- func (i *Item) GetRawNew() any
- func (i *Item) GetSchema() *jsonschema.Schema
- func (i *Item) GetTableName() string
- func (i *Item) SetContextInjectFilter(injects []ContextValueInject)
- func (i *Item) SetDb(newDb *qmgo.Database)
- func (i *Item) SetExtra(newExtra *ItemExtra)
- func (i *Item) SetFilterInjects(injects []*ut.Kov)
- func (i *Item) SetHandler(f ItemHandler)
- func (i *Item) SetMapper(mapper *RequestData)
- func (i *Item) SetRaw(raw any)
- func (i *Item) SetSchema(newStruct any)
- func (i *Item) SetTableName(newTableName string)
- type ItemExtra
- type ItemHandler
- type ModelInfo
- type RateLimiter
- type RequestData
- type RequestModule
- type Scenes
- func (m *Scenes) AddAfterHandler(handler ...ScenesHandler)
- func (m *Scenes) AddItemRate(scope string, model string, scene string, redisClient rueidiscompat.Cmdable, ...) error
- func (m *Scenes) AddPreHandler(handler ...ScenesHandler)
- func (m *Scenes) Decrypt(cipherText string) ([]byte, error)
- func (m *Scenes) Encrypt(plainText []byte) (string, error)
- func (m *Scenes) GetAfterHandler() []ScenesHandler
- func (m *Scenes) GetCbcIv() []byte
- func (m *Scenes) GetCbcSign() bool
- func (m *Scenes) GetItem(scope string, model string, scene string) (*ScenesOptions, bool)
- func (m *Scenes) GetModel(scope string, model string) []*ScenesItem
- func (m *Scenes) GetParty() iris.Party
- func (m *Scenes) GetPreHandler() []ScenesHandler
- func (m *Scenes) GetPrefix() string
- func (m *Scenes) GetScope(scope string) []*ScenesItem
- func (m *Scenes) ParseRequest() iris.Handler
- func (m *Scenes) RegistryItem(scope string, model string, scene string, item ISceneModelItem) error
- func (m *Scenes) RegistryRouter(party iris.Party, prefix string)
- func (m *Scenes) SetCbcSign(iv []byte)
- func (m *Scenes) SetParty(party iris.Party)
- func (m *Scenes) SetPrefix(prefix string)
- type ScenesHandler
- type ScenesItem
- type ScenesOptions
- type ScenesRateKeyFunc
- type SchemaGetResp
Constants ¶
This section is empty.
Variables ¶
View Source
var ( FuncGetAll = func(ctx iris.Context, self ISceneModelItem) *pipe.RunResp[any] { mapper := self.GetMapper() if mapper == nil { return pipe.NewPipeErrMsg[any]("mapper为空", nil) } queryParams := pipe.QueryParseConfig{ UrlParams: mapper.Query, } if self.GetExtra().MustLastId { if _, ok := mapper.Query["_last"]; !ok { return pipe.NewPipeErrMsg[any]("必传参数缺失", nil) } } q, err := getQueryParse(ctx, self.GetContextInjectFilter(), self.GetFilterInjects(), queryParams) if err != nil { return pipe.NewPipeErrMsg[any]("解析注入内容失败", err) } resp := pipe.QueryParse.Run(ctx, nil, q, nil) if resp.Err != nil { return pipe.NewPipeErrMsg[any]("解析查询参数失败", resp.Err) } if resp.Result.Page < 1 { resp.Result.Page = 1 } if resp.Result.Page > 100 { resp.Result.Page = 100 } if resp.Result.PageSize <= 0 { resp.Result.PageSize = 10 } if resp.Result.PageSize > 100 { resp.Result.PageSize = 100 } if resp.Result.SortAsc == nil && resp.Result.SortDesc == nil { resp.Result.SortDesc = append(resp.Result.SortDesc, "update_at") } if len(resp.Result.SortAsc) < 1 && len(resp.Result.SortDesc) < 1 { resp.Result.SortDesc = append(resp.Result.SortDesc, "update_at") } var getCount = self.GetExtra().GetCount dataResp := pipe.QueryGetData.Run(ctx, &pipe.ModelGetDataDep{ ModelId: self.GetTableName(), Query: resp.Result, }, &pipe.ModelGetData{ Single: false, GetQueryCount: getCount, }, self.GetDb()) if dataResp.Err != nil { if dataResp.Err != qmgo.ErrNoSuchDocuments { return pipe.NewPipeErrMsg[any]("查询出内容失败", resp.Err) } } var result = new(SchemaGetResp) result.MongoFacetResult = dataResp.Result result.Page = resp.Result.Page result.PageSize = resp.Result.PageSize result.Filters = resp.Result.QueryParse result.Sorts = resp.Result.BaseSort return pipe.NewPipeResult[any](result) } FuncGetSingle = func(ctx iris.Context, self ISceneModelItem) *pipe.RunResp[any] { mapper := self.GetMapper() if mapper == nil { return pipe.NewPipeErrMsg[any]("mapper为空", nil) } uid := mapper.GetUid() if len(uid) < 1 { return pipe.NewPipeErrMsg[any]("获取参数uid失败", nil) } queryParams := pipe.QueryParseConfig{} queryParams.InjectAnd = append(queryParams.InjectAnd, &ut.Kov{ Key: ut.DefaultUidTag, Value: uid, }) q, err := getQueryParse(ctx, self.GetContextInjectFilter(), self.GetFilterInjects(), queryParams) if err != nil { return pipe.NewPipeErrMsg[any]("解析注入内容失败", err) } resp := pipe.QueryParse.Run(ctx, nil, q, nil) if resp.Err != nil { return pipe.NewPipeErrMsg[any]("解析查询参数失败", err) } dataResp := pipe.QueryGetData.Run(ctx, &pipe.ModelGetDataDep{ ModelId: self.GetTableName(), Query: resp.Result, }, &pipe.ModelGetData{ Single: true, }, self.GetDb()) if dataResp.Err != nil { return pipe.NewPipeErrMsg[any]("查询出数据失败", dataResp.Err) } if dataResp.Result.Data == nil { return pipe.NewPipeErrMsg[any]("获取数据不存在", nil) } return pipe.NewPipeResult(dataResp.Result.Data) } FuncPostAdd = func(ctx iris.Context, self ISceneModelItem) *pipe.RunResp[any] { mapper := self.GetMapper() if mapper == nil { return pipe.NewPipeErrMsg[any]("mapper为空", nil) } if len(mapper.Body) < 1 { return pipe.NewPipeErrMsg[any]("内容体为空", nil) } injectQuery, err := ParseInject(ctx, self.GetContextInjectFilter()...) if err != nil { return pipe.NewPipeErrMsg[any]("解析注入数据失败", err) } injectQuery = append(injectQuery, self.GetFilterInjects()...) var injectData = make(map[string]any, len(injectQuery)) for _, kov := range injectQuery { injectData[kov.Key] = kov.Value } // 把body字符串序列化成map 进行 schema的核验 var bodyMap = make(map[string]any) err = json.Unmarshal([]byte(mapper.Body), &bodyMap) if err != nil { return pipe.NewPipeErrMsg[any]("解析body参数体失败", err) } for k, v := range injectData { bodyMap[k] = v } resp := pipe.SchemaValid.Run(ctx, bodyMap, &pipe.SchemaValidConfig{ Schema: self.GetSchema(), }, nil) if resp.Err != nil { return pipe.NewPipeErr[any](resp.Err) } // 把字符串序列化成body var newInst = self.GetRawNew() err = json.Unmarshal([]byte(mapper.Body), newInst) if err != nil { return pipe.NewPipeErrMsg[any]("解析body参数体失败", err) } injectResult := pipe.ModelMapper.Run(ctx, newInst, &pipe.ModelCtxMapperPack{ InjectData: injectData, }, nil) if injectResult.Err != nil { return pipe.NewPipeErrMsg[any]("数据核验失败", injectResult.Err) } insertResult := pipe.ModelAdd.Run(ctx, injectResult.Result, &pipe.ModelCtxAddConfig{ModelId: self.GetTableName()}, self.GetDb()) if insertResult.Err != nil { return pipe.NewPipeErrMsg[any]("新增失败", insertResult.Err) } return pipe.NewPipeResult[any](insertResult.Result) } FuncEdit = func(ctx iris.Context, self ISceneModelItem) *pipe.RunResp[any] { mapper := self.GetMapper() if mapper == nil { return pipe.NewPipeErrMsg[any]("mapper为空", nil) } if len(mapper.Body) < 1 { return pipe.NewPipeErrMsg[any]("内容体为空", nil) } uid := mapper.GetUid() if len(uid) < 1 { return pipe.NewPipeErrMsg[any]("获取关键参数失败", nil) } // 把body序列化成map 好进行diff比对 var bodyMap = make(map[string]any) err := json.Unmarshal([]byte(mapper.Body), &bodyMap) if err != nil { return pipe.NewPipeErrMsg[any]("解析body参数体失败", err) } injectQuery, err := ParseInject(ctx, self.GetContextInjectFilter()...) if err != nil { return pipe.NewPipeErrMsg[any]("解析注入数据失败", err) } queryFilter := new(ut.QueryFull) queryFilter.QueryParse.InsertOrReplaces("and", injectQuery...) queryFilter.QueryParse.InsertOrReplaces("and", self.GetFilterInjects()...) var params = pipe.ModelPutConfig{ QueryFilter: queryFilter, ModelId: self.GetTableName(), RowId: uid, BodyMap: bodyMap, } // 把字符串序列化成body var newInst = self.GetRawNew() err = json.Unmarshal([]byte(mapper.Body), newInst) if err != nil { return pipe.NewPipeErrMsg[any]("解析body参数体失败", err) } resp := pipe.ModelPut.Run(ctx, newInst, ¶ms, self.GetDb()) if resp.Err != nil { return pipe.NewPipeErrMsg[any]("修改失败", resp.Err) } return pipe.NewPipeResult[any](resp.Result) } FuncDelete = func(ctx iris.Context, self ISceneModelItem) *pipe.RunResp[any] { mapper := self.GetMapper() if mapper == nil { return pipe.NewPipeErrMsg[any]("mapper为空", nil) } uid := mapper.GetUid() if len(uid) < 1 { return pipe.NewPipeErrMsg[any]("获取关键参数失败", nil) } injectQuery, err := ParseInject(ctx, self.GetContextInjectFilter()...) if err != nil { return pipe.NewPipeErrMsg[any]("解析注入数据失败", err) } queryFilter := new(ut.QueryFull) if queryFilter.QueryParse == nil { queryFilter.QueryParse = new(ut.QueryParse) } queryFilter.QueryParse.InsertOrReplaces("and", injectQuery...) queryFilter.QueryParse.InsertOrReplaces("and", self.GetFilterInjects()...) var params = pipe.ModelDelConfig{ QueryFilter: queryFilter, ModelId: self.GetTableName(), RowId: uid, } resp := pipe.ModelDel.Run(ctx, nil, ¶ms, self.GetDb()) if resp.Err != nil { return pipe.NewPipeErrMsg[any]("删除失败", resp.Err) } return pipe.NewPipeResult[any](resp.Result) } )
View Source
var (
ErrTableNameEmpty = errors.New("表名为空")
)
View Source
var (
ScenesInst = NewScenes()
)
Functions ¶
func CleanTypeName ¶
func ParseInject ¶
func ParseInject(ctx iris.Context, contextInject ...ContextValueInject) ([]*ut.Kov, error)
Types ¶
type ContextValueInject ¶
type Crud ¶
type Crud struct {
// contains filtered or unexported fields
}
func (*Crud) Add ¶
func (c *Crud) Add() ISceneModelItem
func (*Crud) ContextInjectToBody ¶
func (c *Crud) ContextInjectToBody() []ContextValueInject
func (*Crud) ContextInjectToFilter ¶
func (c *Crud) ContextInjectToFilter() []ContextValueInject
func (*Crud) Delete ¶
func (c *Crud) Delete() ISceneModelItem
func (*Crud) Edit ¶
func (c *Crud) Edit() ISceneModelItem
func (*Crud) GetAll ¶
func (c *Crud) GetAll() ISceneModelItem
func (*Crud) GetSingle ¶
func (c *Crud) GetSingle() ISceneModelItem
func (*Crud) InjectsToBody ¶
func (*Crud) InjectsToFilter ¶
func (*Crud) MustLastId ¶
func (*Crud) RegistryToManager ¶
func (*Crud) SetAdd ¶
func (c *Crud) SetAdd(add ISceneModelItem)
func (*Crud) SetContextInjectToBody ¶
func (c *Crud) SetContextInjectToBody(contextInjectToBody []ContextValueInject)
func (*Crud) SetContextInjectToFilter ¶
func (c *Crud) SetContextInjectToFilter(contextInjectToFilter []ContextValueInject)
func (*Crud) SetDelete ¶
func (c *Crud) SetDelete(delete ISceneModelItem)
func (*Crud) SetEdit ¶
func (c *Crud) SetEdit(edit ISceneModelItem)
func (*Crud) SetGetAll ¶
func (c *Crud) SetGetAll(getAll ISceneModelItem)
func (*Crud) SetGetCount ¶
func (*Crud) SetGetSingle ¶
func (c *Crud) SetGetSingle(getSingle ISceneModelItem)
func (*Crud) SetInjectsToBody ¶
func (*Crud) SetInjectsToFilter ¶
func (*Crud) SetMustLastId ¶
type ISceneModelItem ¶
type ISceneModelItem interface { SetRaw(raw any) GetRaw() any GetRawNew() any GetDb() *qmgo.Database SetDb(newDb *qmgo.Database) GetTableName() string SetTableName(newTableName string) SetSchema(newStruct any) GetSchema() *jsonschema.Schema GetMapper() *RequestData SetMapper(mapper *RequestData) Clone() ISceneModelItem GetExtra() *ItemExtra SetExtra(newExtra *ItemExtra) SetContextInjectFilter(injects []ContextValueInject) AddContextInjectFilter(injects ...ContextValueInject) GetContextInjectFilter() []ContextValueInject SetFilterInjects(injects []*ut.Kov) GetFilterInjects() []*ut.Kov AddFilterInject(injects ...*ut.Kov) SetHandler(ItemHandler) GetHandler() ItemHandler }
func NewAddItem ¶
func NewAddItem(db *qmgo.Database, tableName string, inputStruct any, contextInjectToBody []ContextValueInject, injectsToBody []*ut.Kov) (ISceneModelItem, error)
func NewDeleteItem ¶
func NewDeleteItem(db *qmgo.Database, tableName string, inputStruct any, contextInjectToFilter []ContextValueInject, injectsToFilter []*ut.Kov) (ISceneModelItem, error)
func NewEditItem ¶
func NewEditItem(db *qmgo.Database, tableName string, inputStruct any, contextInjectToFilter []ContextValueInject, injectsToFilter []*ut.Kov) (ISceneModelItem, error)
func NewGetAllItem ¶
func NewGetSingleItem ¶
func NewGetSingleItem(db *qmgo.Database, tableName string, inputStruct any, contextInjectToFilter []ContextValueInject, injectsToFilter []*ut.Kov) (ISceneModelItem, error)
func NewItem ¶
func NewItem(db *qmgo.Database, tableName string, inputStruct any, f ItemHandler) (ISceneModelItem, error)
type IScenes ¶
type IScenes interface { GetPrefix() string SetPrefix(prefix string) SetParty(party iris.Party) GetParty() iris.Party GetCbcSign() bool SetCbcSign(iv []byte) GetCbcIv() []byte Decrypt(cipherText string) ([]byte, error) Encrypt(plainText []byte) (string, error) AddPreHandler(handler ...ScenesHandler) GetPreHandler() []ScenesHandler AddAfterHandler(handler ...ScenesHandler) GetAfterHandler() []ScenesHandler RegistryRouter(party iris.Party, prefix string) ParseRequest() iris.Handler GetItem(scope string, model string, scene string) (*ScenesOptions, bool) GetScope(scope string) []*ScenesItem GetModel(scope string, model string) []*ScenesItem RegistryItem(scope string, model string, scene string, item ISceneModelItem) error AddItemRate(scope string, model string, scene string, redisClient rueidiscompat.Cmdable, period time.Duration, maxCount int, interfaceKey string, keyFunc ScenesRateKeyFunc) error }
type Item ¶
type Item struct {
// contains filtered or unexported fields
}
func (*Item) AddContextInjectFilter ¶
func (i *Item) AddContextInjectFilter(injects ...ContextValueInject)
func (*Item) AddFilterInject ¶
func (*Item) Clone ¶
func (i *Item) Clone() ISceneModelItem
func (*Item) GetContextInjectFilter ¶
func (i *Item) GetContextInjectFilter() []ContextValueInject
func (*Item) GetFilterInjects ¶
func (*Item) GetHandler ¶
func (i *Item) GetHandler() ItemHandler
func (*Item) GetMapper ¶
func (i *Item) GetMapper() *RequestData
func (*Item) GetSchema ¶
func (i *Item) GetSchema() *jsonschema.Schema
func (*Item) GetTableName ¶
func (*Item) SetContextInjectFilter ¶
func (i *Item) SetContextInjectFilter(injects []ContextValueInject)
func (*Item) SetFilterInjects ¶
func (*Item) SetHandler ¶
func (i *Item) SetHandler(f ItemHandler)
func (*Item) SetMapper ¶
func (i *Item) SetMapper(mapper *RequestData)
func (*Item) SetTableName ¶
type ItemHandler ¶
type ItemHandler func(ctx iris.Context, self ISceneModelItem) *pipe.RunResp[any]
type ModelInfo ¶
type ModelInfo struct { Group string `json:"group,omitempty"` // 组名 Priority int `json:"priority,omitempty"` // 在组下显示的优先级 越大越优先 TableName string `json:"table_name,omitempty"` // 表名 UniqueId string `json:"unique_id,omitempty"` // 唯一ID 默认生成sonyflakeId PathId string `json:"path_id,omitempty"` // 路径ID 默认取UniqueId 在加入backend时会自动修改 RawName string `json:"raw_name,omitempty"` // 原始名称 Alias string `json:"alias,omitempty"` // 别名 中文名 }
type RateLimiter ¶
type RateLimiter struct {
// contains filtered or unexported fields
}
RateLimiter 基于redis的滑窗限速带加入黑名单功能 默认黑名单时间为 黑名单次数*滑窗时间周期*2
func NewRateLimiter ¶
func NewRateLimiter(redisClient rueidiscompat.Cmdable, period time.Duration, maxCount int, interfaceKey string) *RateLimiter
NewRateLimiter 初始化
type RequestData ¶
type RequestData struct { Module RequestModule `json:"module"` Query map[string]string `json:"query"` // 查询参数 跟解析url参数一样 Body string `json:"body"` // 这里是json字符串 需要序列化 Comm map[string]string `json:"comm"` // 这里放置一些通用信息 版本号之类的 map即可 }
func (*RequestData) GetUid ¶
func (c *RequestData) GetUid() string
type RequestModule ¶
type Scenes ¶
type Scenes struct {
// contains filtered or unexported fields
}
func (*Scenes) AddAfterHandler ¶
func (m *Scenes) AddAfterHandler(handler ...ScenesHandler)
func (*Scenes) AddItemRate ¶
func (*Scenes) AddPreHandler ¶
func (m *Scenes) AddPreHandler(handler ...ScenesHandler)
func (*Scenes) GetAfterHandler ¶
func (m *Scenes) GetAfterHandler() []ScenesHandler
func (*Scenes) GetCbcSign ¶
func (*Scenes) GetPreHandler ¶
func (m *Scenes) GetPreHandler() []ScenesHandler
func (*Scenes) GetScope ¶
func (m *Scenes) GetScope(scope string) []*ScenesItem
func (*Scenes) ParseRequest ¶
func (m *Scenes) ParseRequest() iris.Handler
func (*Scenes) RegistryItem ¶
func (*Scenes) RegistryRouter ¶
func (*Scenes) SetCbcSign ¶
type ScenesHandler ¶
type ScenesHandler func(ctx iris.Context, mapper *RequestData) *pipe.RunResp[any]
type ScenesItem ¶
type ScenesItem struct {
// contains filtered or unexported fields
}
type ScenesOptions ¶
type ScenesOptions struct { Scene ISceneModelItem // contains filtered or unexported fields }
type ScenesRateKeyFunc ¶
func RateIpAndUaFunc ¶
func RateIpAndUaFunc() ScenesRateKeyFunc
func RateIpKeyFunc ¶
func RateIpKeyFunc() ScenesRateKeyFunc
func RateUserAgentFunc ¶
func RateUserAgentFunc() ScenesRateKeyFunc
func RateUserIdAndIpAndUaFunc ¶
func RateUserIdAndIpAndUaFunc(contextUserId string) ScenesRateKeyFunc
func RateUserIdKeyFunc ¶
func RateUserIdKeyFunc(contextUserId string) ScenesRateKeyFunc
type SchemaGetResp ¶
type SchemaGetResp struct { *ut.MongoFacetResult Page int64 `json:"page,omitempty"` PageSize int64 `json:"page_size,omitempty"` Sorts *ut.BaseSort `json:"sorts,omitempty"` Filters *ut.QueryParse `json:"filters,omitempty"` }
Click to show internal directories.
Click to hide internal directories.