mab

package module
v0.1.37 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 27, 2021 License: MIT Imports: 20 Imported by: 1

README

ab

  • page 控制页码 page_size 控制条数
    • 最大均为100 100页 100条
  • _last mid 大页码通用
  • _o(asc) _od(desc) 排序
  • _s搜索 __在左右则为模糊 _s=__赵日天
  • [字段名] 进行过滤 id=1 最长64位请注意 and关系
  • o[字段名] 进行过滤 _o_id=2 最长64位 or关系

说明

  • 约定大于配置
struct定义的名称
  * Id 为主键
  * UpdateAt 为更新时间 每次更新自动赋值
  * CreateAt 为创建时间 需要自己设置qmgo的插入事件或自行设置时间
  * DeleteAt 为删除时间 一般不需要设置 除非使用了悲观锁version 需要自行设置
  
类型定义
  * primitive.ObjectID 类型会自动解析  
  * 如果struct下只有两个元素且 []float64元素为Coordinates 则会定义成geo 但是请注意 mongodb的index 需要自己先行设置
  
外键
  * 配置项PK函数 需要返回数组的lookup stage阶段所需的bson  

内联struct
  * 必须通过分隔符连接 可以有效重名 eg: 传入参数 则 address__position 则代表address是struct 赋值address下的position 
  * 若不想通过分隔符 可以使用bson:",m_inline" tag申明的方式内联 但是请勿重复字段名 若嵌套struct中包含相同FieldName 则会一起赋值

参数操作符
  * 通过_[op]_ 可进行操作符定义 eg: params: address__position_eq_="赵日天" 会转换成 {"address.position":{"$eq":"赵日天"}}
  * 支持的op有 `eq`, `gt`, `gte`, `lt`, `lte`, `ne` 
  * 暂不支持 `in` `nin` 

  • 修改成功后返回的是成功变更的字段序列
  • private context上下文传递的时候类型一定要同struct定义的一致
  • 外键的定义不能是string 因为lookup太麻烦需要手动toObjectId 所以定义为 primitive.ObjectID
  • 仅新增是通过struct方式 所以可以触发qmgo的事件
  • 修改更新时会自动发现updated 自动赋值最新时间 使用的是 time.Now().Local()
  • 关于时间时区问题 默认UTC RFC3339Nano
  • 大量使用了反射 主要满足前期快速开发的业务需求 上一定量之后可以考虑深入优化
  • 各种mustFilters 虽然用的map string 但是只会考虑key value会被忽略
  • 对于要进行比较的time 必须是utc时间 !!!

限制

  • 目前不支持header为json的请求 只能是form 受限于iris解析

    • 对应的问题
      • form不支持前端提交空的数组 []
        • 可以使用空字符串提交
        • 前端需要判断内容是否为空
  • 暂未开放cache

todo

  • 完成内联全行为可同名 默认使用__号分割 解决struct同名时赋值错误或未赋值的尴尬问题

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func DiffBson

func DiffBson(origin interface{}, news interface{}, params map[string][]string, structDelimiter string) (bson.M, bson.M)

DiffBson 两个bson.m 对比 获取异同

func FilterFormValues added in v0.1.10

func FilterFormValues(params map[string][]string) map[string][]string

FilterFormValues 重新获取params

func IsNum

func IsNum(s string) bool

func IsZeroOfUnderlyingType

func IsZeroOfUnderlyingType(x interface{}) bool

func LimitHandler

func LimitHandler(l *limiter.Limiter, errBack ...func(*errors.HTTPError, iris.Context)) iris.Handler

func Replace

func Replace(origin, newData interface{}) error

Types

type AliasProcess added in v0.1.32

type AliasProcess interface {
	Alias() string
}

type Config

type Config struct {
	Party             iris.Party
	Mdb               *qmgo.Database
	Models            []*SingleModel
	ErrorTrace        func(err error, event, from, router string) // error trace func
	Generator         bool                                        // 生成器模式 若启用则只有一个入口
	PrivateContextKey string
	PrivateColName    string
	StructDelimiter   string   // 内联struct之间的分隔符 默认__ 因为.号会被转义 不要使用. _
	SensitiveUri      []string // 敏感词库
	SensitiveWords    []string // 敏感词列表
}

Config 配置文件 敏感词 用于国内的审核 可在model配置文件中配置需要验证的字段 每次数据新增/修改时会进行验证

type RestApi

type RestApi struct {
	C *Config
	// contains filtered or unexported fields
}

func New

func New(c *Config) *RestApi

func (*RestApi) AddData

func (c *RestApi) AddData(ctx iris.Context)

AddData 新增数据

func (*RestApi) DeleteData

func (c *RestApi) DeleteData(ctx iris.Context)

DeleteData 删除数据 /{mid:string range(1,32)}

func (*RestApi) EditData

func (c *RestApi) EditData(ctx iris.Context)

EditData 修改数据 /{mid:string range(1,32)}

func (*RestApi) GetAllFunc

func (c *RestApi) GetAllFunc(ctx iris.Context)

GetAllFunc 获取所有 page 控制页码 page_size 控制条数 最大均为100 100页 100条 _last mid 大页码通用 _o(asc) _od _s __在左右则为模糊 _s=__赵日天 [字段名] 进行过滤 id=1 最长64位请注意 and关系 _o_[字段名] 进行过滤 _o_id=2 最长64位 or关系

func (*RestApi) GetModelInfoList added in v0.1.31

func (c *RestApi) GetModelInfoList() []modelInfo

GetModelInfoList 获取详细的模型列表

func (*RestApi) GetSingle

func (c *RestApi) GetSingle(ctx iris.Context)

GetSingle 单个 /{mid:string range(1,32)}

type SingleModel

type SingleModel struct {
	Prefix string      // 路由前缀
	Suffix string      // 路由后缀
	Model  interface{} // xorm model

	CustomModel func(ctx iris.Context, model *SingleModel) *SingleModel // 记住要进行指针值传递 返回一个新对象 否则会修改原始配置文件
	Pk          func() []bson.D                                         // 外键

	DisablePrivate    bool            // 禁用私密参数
	DisablePrivateMap map[string]bool // 禁用私密参数定制项 key为方法 value为启用与否 前提条件必须启用后才能禁用 而不能禁用后启用

	PrivateContextKey string // 上下文key string int uint
	PrivateColName    string // 数据库字段名 MapName or ColName is ok

	AllowMethods      []string // allow methods first
	DisableMethods    []string // get(all) get(single) post put delete
	AllowSearchFields []string // 搜索的字段 struct名称

	GetAllResponseFunc    func(ctx iris.Context, result iris.Map, dataList []map[string]interface{}) iris.Map                             // 返回内容替换的方法
	GetAllExtraFilters    func(ctx iris.Context) map[string]interface{}                                                                   // 额外的固定过滤 key(数据库列名) 和 value 若与请求过滤重复则覆盖 优先级最高
	GetAllMustFilters     map[string]string                                                                                               // 获取全部必须拥有筛选
	GetSingleResponseFunc func(ctx iris.Context, item map[string]interface{}) map[string]interface{}                                      // 获取单个返回内容替换的方法
	GetSingleExtraFilters func(ctx iris.Context) map[string]interface{}                                                                   // 额外的固定过滤 key(数据库列名) 和 value 若与请求过滤重复则覆盖 优先级最高
	GetSingleMustFilters  map[string]string                                                                                               // 获取单个必须拥有筛选
	PostValidator         interface{}                                                                                                     // 新增自定义验证器
	PostMustFilters       map[string]string                                                                                               // 新增必须存在的参数
	PostResponseFunc      func(ctx iris.Context, mid string, item interface{}) interface{}                                                //
	PostDataParse         func(ctx iris.Context, raw interface{}) interface{}                                                             //
	PutValidator          interface{}                                                                                                     // 修改验证器
	PutDataParse          func(ctx iris.Context, mid string, diff bson.M) bson.M                                                          //
	PutQueryParse         func(ctx iris.Context, mid string, query bson.M, formData map[string][]string, privateValue interface{}) bson.M // 修改的时候query可以自定义修改
	PutResponseFunc       func(ctx iris.Context, mid string) iris.Map                                                                     // 在修改之前还可以变更一下数据
	PutMustFilters        map[string]string                                                                                               //
	DeleteValidator       interface{}                                                                                                     // 删除验证器
	DeleteResponseFunc    func(ctx iris.Context, mid string, item map[string]interface{}, result iris.Map) iris.Map                       //
	SensitiveFields       []string                                                                                                        // 使用struct name 或者mapname 均可(map对象为bson:)

	CacheTime          time.Duration                          // full cache time
	GetAllCacheTime    time.Duration                          // get all cache time
	GetSingleCacheTime time.Duration                          // get single cache time
	DelayDeleteTime    time.Duration                          // 延迟多久双删 default 500ms
	MaxPageSize        int64                                  // max page size limit
	MaxPageCount       int64                                  // max page count limit
	RateErrorFunc      func(*tollerr.HTTPError, iris.Context) //
	Rate               *limiter.Limiter                       // all
	GetAllRate         *limiter.Limiter                       //
	GetSingleRate      *limiter.Limiter                       //
	AddRate            *limiter.Limiter                       //
	PutRate            *limiter.Limiter                       //
	DeleteRate         *limiter.Limiter                       //
	// contains filtered or unexported fields
}

SingleModel 单个模型实例 CustomModel 主要用来动态配置项 比如说context变更 pk变更等灵活使用 e.g:

	func(ctx iris.Context, model *SingleModel) *SingleModel {
		newModel:= new(SingleModel)
     *newModel = *model
     // 修改配置文件
     return newModel
	}

Directories

Path Synopsis
Package pprof provides native pprof support via middleware.
Package pprof provides native pprof support via middleware.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL