123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- package rest
- import (
- "git.nspix.com/golang/micro/gateway/http"
- "gorm.io/gorm"
- )
- const (
- PositionBeforeQuery = "BeforeQuery"
- PositionEachColumnQuery = "EachColumnQuery"
- PositionAfterQuery = "AfterQuery"
- PositionBeforeCreate = "BeforeCreate"
- PositionAfterCreate = "AfterCreate"
- PositionBeforeUpdate = "BeforeUpdate"
- PositionAfterUpdate = "AfterUpdate"
- PositionBeforeDelete = "BeforeDelete"
- PositionAfterDelete = "AfterDelete"
- )
- type (
- //查询
- BeforeQueryFunc func(ctx *http.Context, query *Query) (err error)
- EachColumnQueryFunc func(ctx *http.Context, query *Query, schema *Schema) (err error)
- AfterQueryFunc func(ctx *http.Context, query *Query) (err error)
- //创建的回调函数
- BeforeCreateFunc func(ctx *http.Context, tx *gorm.DB, model interface{}) (err error)
- AfterCreateFunc func(ctx *http.Context, tx *gorm.DB, model interface{}, attrs []*DiffAttr) (err error)
- //更新的回调函数
- BeforeUpdateFunc func(ctx *http.Context, tx *gorm.DB, model interface{}) (err error)
- AfterUpdateFunc func(ctx *http.Context, tx *gorm.DB, model interface{}, attrs []*DiffAttr) (err error)
- //函数的回调函数
- BeforeDeleteFunc func(ctx *http.Context, tx *gorm.DB, model interface{}) (err error)
- AfterDeleteFunc func(ctx *http.Context, tx *gorm.DB, model interface{}) (err error)
- Callback struct {
- BeforeQueries []BeforeQueryFunc
- EachColumnQueries []EachColumnQueryFunc
- AfterQueries []AfterQueryFunc
- BeforeCreates []BeforeCreateFunc
- AfterCreates []AfterCreateFunc
- BeforeUpdates []BeforeUpdateFunc
- AfterUpdates []AfterUpdateFunc
- BeforeDeletes []BeforeDeleteFunc
- AfterDeletes []AfterDeleteFunc
- }
- )
- func newCallback() *Callback {
- return &Callback{
- BeforeQueries: make([]BeforeQueryFunc, 0),
- EachColumnQueries: make([]EachColumnQueryFunc, 0),
- AfterQueries: make([]AfterQueryFunc, 0),
- BeforeCreates: make([]BeforeCreateFunc, 0),
- AfterCreates: make([]AfterCreateFunc, 0),
- BeforeUpdates: make([]BeforeUpdateFunc, 0),
- AfterUpdates: make([]AfterUpdateFunc, 0),
- BeforeDeletes: make([]BeforeDeleteFunc, 0),
- AfterDeletes: make([]AfterDeleteFunc, 0),
- }
- }
- func (c *Callback) Register(position string, cb interface{}) {
- switch position {
- case PositionBeforeQuery:
- if v, ok := cb.(BeforeQueryFunc); ok {
- c.BeforeQueries = append(c.BeforeQueries, v)
- }
- case PositionEachColumnQuery:
- if v, ok := cb.(EachColumnQueryFunc); ok {
- c.EachColumnQueries = append(c.EachColumnQueries, v)
- }
- case PositionAfterQuery:
- if v, ok := cb.(AfterQueryFunc); ok {
- c.AfterQueries = append(c.AfterQueries, v)
- }
- case PositionBeforeCreate:
- if v, ok := cb.(BeforeCreateFunc); ok {
- c.BeforeCreates = append(c.BeforeCreates, v)
- }
- case PositionAfterCreate:
- if v, ok := cb.(AfterCreateFunc); ok {
- c.AfterCreates = append(c.AfterCreates, v)
- }
- case PositionBeforeUpdate:
- if v, ok := cb.(BeforeUpdateFunc); ok {
- c.BeforeUpdates = append(c.BeforeUpdates, v)
- }
- case PositionAfterUpdate:
- if v, ok := cb.(AfterUpdateFunc); ok {
- c.AfterUpdates = append(c.AfterUpdates, v)
- }
- case PositionBeforeDelete:
- if v, ok := cb.(BeforeDeleteFunc); ok {
- c.BeforeDeletes = append(c.BeforeDeletes, v)
- }
- case PositionAfterDelete:
- if v, ok := cb.(AfterDeleteFunc); ok {
- c.AfterDeletes = append(c.AfterDeletes, v)
- }
- }
- }
|