mab

package module
v0.1.3 Latest Latest
Warning

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

Go to latest
Published: Apr 18, 2021 License: MIT Imports: 19 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 类型会自动解析  
  
外键
  * 配置项PK 需要返回数组的lookup stage  

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

限制

  • 目前不支持header为json的请求 只能是form 受限于iris解析
  • 暂未开放cache 以及event hooks 目前看来必要性不高

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, columns []structInfo) (bson.M, bson.M)

两个bson.m 对比 获取异同

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 Config

type Config struct {
	Party      iris.Party
	Mdb        *qmgo.Database
	Models     []*SingleModel
	ErrorTrace func(err error, event, from, router string) // error trace func
}

config

type RestApi

type RestApi struct {
	C *Config
}

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

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

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

func (*RestApi) Run

func (c *RestApi) Run()

type SingleModel

type SingleModel struct {
	Prefix string          // 路由前缀
	Suffix string          // 路由后缀
	Model  interface{}     // xorm model
	Pk     func() []bson.D // 外键

	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    map[string]string                                                                   // 额外的固定过滤 key(数据库列名) 和 value 若与请求过滤重复则覆盖 优先级最高
	GetAllMustFilters     map[string]string                                                                   // 获取全部必须拥有筛选
	GetSingleResponseFunc func(ctx iris.Context, item map[string]interface{}) map[string]interface{}          // 获取单个返回内容替换的方法
	GetSingleExtraFilters map[string]string                                                                   // 额外的固定过滤 key(数据库列名) 和 value 若与请求过滤重复则覆盖 优先级最高
	GetSingleMustFilters  map[string]string                                                                   // 获取单个必须拥有筛选
	PostValidator         interface{}                                                                         // 新增自定义验证器
	PostResponseFunc      func(ctx iris.Context, item interface{}) interface{}                                //
	PostDataParse         func(ctx iris.Context, raw interface{}) interface{}                                 //
	PutValidator          interface{}                                                                         // 修改验证器
	PutBeforeFunc         func(ctx iris.Context, diff bson.M) bson.M                                          // 在修改之前还可以变更一下数据
	DeleteValidator       interface{}                                                                         // 删除验证器
	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
}

Jump to

Keyboard shortcuts

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