callback.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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) Register(position string, cb interface{}) {
  57. switch position {
  58. case PositionBeforeQuery:
  59. if v, ok := cb.(BeforeQueryFunc); ok {
  60. c.BeforeQueries = append(c.BeforeQueries, v)
  61. }
  62. case PositionEachColumnQuery:
  63. if v, ok := cb.(EachColumnQueryFunc); ok {
  64. c.EachColumnQueries = append(c.EachColumnQueries, v)
  65. }
  66. case PositionAfterQuery:
  67. if v, ok := cb.(AfterQueryFunc); ok {
  68. c.AfterQueries = append(c.AfterQueries, v)
  69. }
  70. case PositionBeforeCreate:
  71. if v, ok := cb.(BeforeCreateFunc); ok {
  72. c.BeforeCreates = append(c.BeforeCreates, v)
  73. }
  74. case PositionAfterCreate:
  75. if v, ok := cb.(AfterCreateFunc); ok {
  76. c.AfterCreates = append(c.AfterCreates, v)
  77. }
  78. case PositionBeforeUpdate:
  79. if v, ok := cb.(BeforeUpdateFunc); ok {
  80. c.BeforeUpdates = append(c.BeforeUpdates, v)
  81. }
  82. case PositionAfterUpdate:
  83. if v, ok := cb.(AfterUpdateFunc); ok {
  84. c.AfterUpdates = append(c.AfterUpdates, v)
  85. }
  86. case PositionBeforeDelete:
  87. if v, ok := cb.(BeforeDeleteFunc); ok {
  88. c.BeforeDeletes = append(c.BeforeDeletes, v)
  89. }
  90. case PositionAfterDelete:
  91. if v, ok := cb.(AfterDeleteFunc); ok {
  92. c.AfterDeletes = append(c.AfterDeletes, v)
  93. }
  94. }
  95. }