callback.go 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package rest
  2. import (
  3. "git.nspix.com/golang/micro/gateway/http"
  4. "gorm.io/gorm"
  5. )
  6. const (
  7. PositionBeforeQuery = "BeforeQuery"
  8. PositionEachColumnQuery = "EachColumnQuery"
  9. PositionAfterQuery = "AfterQuery"
  10. PositionBeforeCreate = "BeforeCreate"
  11. PositionAfterCreate = "AfterCreate"
  12. PositionBeforeUpdate = "BeforeUpdate"
  13. PositionAfterUpdate = "AfterUpdate"
  14. PositionBeforeDelete = "BeforeDelete"
  15. PositionAfterDelete = "AfterDelete"
  16. )
  17. type (
  18. //查询
  19. BeforeQueryFunc func(ctx *http.Context, query *Query) (err error)
  20. EachColumnQueryFunc func(ctx *http.Context, query *Query, schema *Schema) (err error)
  21. AfterQueryFunc func(ctx *http.Context, query *Query) (err error)
  22. //创建的回调函数
  23. BeforeCreateFunc func(ctx *http.Context, tx *gorm.DB, model interface{}) (err error)
  24. AfterCreateFunc func(ctx *http.Context, tx *gorm.DB, model interface{}, attrs []*DiffAttr) (err error)
  25. //更新的回调函数
  26. BeforeUpdateFunc func(ctx *http.Context, tx *gorm.DB, model interface{}) (err error)
  27. AfterUpdateFunc func(ctx *http.Context, tx *gorm.DB, model interface{}, attrs []*DiffAttr) (err error)
  28. //函数的回调函数
  29. BeforeDeleteFunc func(ctx *http.Context, tx *gorm.DB, model interface{}) (err error)
  30. AfterDeleteFunc func(ctx *http.Context, tx *gorm.DB, model interface{}) (err error)
  31. Callback struct {
  32. BeforeQueries []BeforeQueryFunc
  33. EachColumnQueries []EachColumnQueryFunc
  34. AfterQueries []AfterQueryFunc
  35. BeforeCreates []BeforeCreateFunc
  36. AfterCreates []AfterCreateFunc
  37. BeforeUpdates []BeforeUpdateFunc
  38. AfterUpdates []AfterUpdateFunc
  39. BeforeDeletes []BeforeDeleteFunc
  40. AfterDeletes []AfterDeleteFunc
  41. }
  42. )
  43. func newCallback() *Callback {
  44. return &Callback{
  45. BeforeQueries: make([]BeforeQueryFunc, 0),
  46. EachColumnQueries: make([]EachColumnQueryFunc, 0),
  47. AfterQueries: make([]AfterQueryFunc, 0),
  48. BeforeCreates: make([]BeforeCreateFunc, 0),
  49. AfterCreates: make([]AfterCreateFunc, 0),
  50. BeforeUpdates: make([]BeforeUpdateFunc, 0),
  51. AfterUpdates: make([]AfterUpdateFunc, 0),
  52. BeforeDeletes: make([]BeforeDeleteFunc, 0),
  53. AfterDeletes: make([]AfterDeleteFunc, 0),
  54. }
  55. }
  56. func (c *Callback) RegisterBeforeQuery(cb BeforeQueryFunc) {
  57. c.BeforeQueries = append(c.BeforeQueries, cb)
  58. }
  59. func (c *Callback) RegisterEachColumnQuery(cb EachColumnQueryFunc) {
  60. c.EachColumnQueries = append(c.EachColumnQueries, cb)
  61. }
  62. func (c *Callback) RegisterAfterQuery(cb AfterQueryFunc) {
  63. c.AfterQueries = append(c.AfterQueries, cb)
  64. }
  65. func (c *Callback) RegisterBeforeCreate(cb BeforeCreateFunc) {
  66. c.BeforeCreates = append(c.BeforeCreates, cb)
  67. }
  68. func (c *Callback) RegisterAfterCreate(cb AfterCreateFunc) {
  69. c.AfterCreates = append(c.AfterCreates, cb)
  70. }
  71. func (c *Callback) RegisterBeforeUpdate(cb BeforeUpdateFunc) {
  72. c.BeforeUpdates = append(c.BeforeUpdates, cb)
  73. }
  74. func (c *Callback) RegisterAfterUpdate(cb AfterUpdateFunc) {
  75. c.AfterUpdates = append(c.AfterUpdates, cb)
  76. }
  77. func (c *Callback) RegisterBeforeDelete(cb BeforeDeleteFunc) {
  78. c.BeforeDeletes = append(c.BeforeDeletes, cb)
  79. }
  80. func (c *Callback) RegisterAfterDelete(cb AfterDeleteFunc) {
  81. c.AfterDeletes = append(c.AfterDeletes, cb)
  82. }