delegate.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. package rest
  2. import "context"
  3. type Delegate interface {
  4. BeforeQuery(ctx context.Context, query *Query) (err error)
  5. AfterQuery(ctx context.Context, query *Query) (err error)
  6. BeforeSave(ctx context.Context, model interface{}) (err error)
  7. AfterSave(ctx context.Context, model interface{}, diff []*DiffAttr) (err error)
  8. BeforeCreate(ctx context.Context, model interface{}) (err error)
  9. AfterCreate(ctx context.Context, model interface{}, diff []*DiffAttr) (err error)
  10. BeforeUpdate(ctx context.Context, model interface{}) (err error)
  11. AfterUpdate(ctx context.Context, model interface{}, diff []*DiffAttr) (err error)
  12. BeforeDelete(ctx context.Context, model interface{}) (err error)
  13. AfterDelete(ctx context.Context, model interface{}) (err error)
  14. }
  15. type delegate struct {
  16. delegates []Delegate
  17. }
  18. func (dm *delegate) Register(d Delegate) {
  19. if dm.delegates == nil {
  20. dm.delegates = make([]Delegate, 0)
  21. }
  22. dm.delegates = append(dm.delegates, d)
  23. }
  24. func (dm *delegate) BeforeQuery(ctx context.Context, query *Query) (err error) {
  25. for i := len(dm.delegates) - 1; i >= 0; i-- {
  26. if err = dm.delegates[i].BeforeQuery(ctx, query); err != nil {
  27. return
  28. }
  29. }
  30. return
  31. }
  32. func (dm *delegate) AfterQuery(ctx context.Context, query *Query) (err error) {
  33. for i := len(dm.delegates) - 1; i >= 0; i-- {
  34. if err = dm.delegates[i].AfterQuery(ctx, query); err != nil {
  35. return
  36. }
  37. }
  38. return
  39. }
  40. func (dm *delegate) BeforeSave(ctx context.Context, model interface{}) (err error) {
  41. for i := len(dm.delegates) - 1; i >= 0; i-- {
  42. if err = dm.delegates[i].BeforeSave(ctx, model); err != nil {
  43. return
  44. }
  45. }
  46. return
  47. }
  48. func (dm *delegate) AfterSave(ctx context.Context, model interface{}, diff []*DiffAttr) (err error) {
  49. for i := len(dm.delegates) - 1; i >= 0; i-- {
  50. if err = dm.delegates[i].AfterSave(ctx, model, diff); err != nil {
  51. return
  52. }
  53. }
  54. return
  55. }
  56. func (dm *delegate) BeforeCreate(ctx context.Context, model interface{}) (err error) {
  57. for i := len(dm.delegates) - 1; i >= 0; i-- {
  58. if err = dm.delegates[i].BeforeCreate(ctx, model); err != nil {
  59. return
  60. }
  61. }
  62. return
  63. }
  64. func (dm *delegate) AfterCreate(ctx context.Context, model interface{}, diff []*DiffAttr) (err error) {
  65. for i := len(dm.delegates) - 1; i >= 0; i-- {
  66. if err = dm.delegates[i].AfterCreate(ctx, model, diff); err != nil {
  67. return
  68. }
  69. }
  70. return
  71. }
  72. func (dm *delegate) BeforeUpdate(ctx context.Context, model interface{}) (err error) {
  73. for i := len(dm.delegates) - 1; i >= 0; i-- {
  74. if err = dm.delegates[i].BeforeUpdate(ctx, model); err != nil {
  75. return
  76. }
  77. }
  78. return
  79. }
  80. func (dm *delegate) AfterUpdate(ctx context.Context, model interface{}, diff []*DiffAttr) (err error) {
  81. for i := len(dm.delegates) - 1; i >= 0; i-- {
  82. if err = dm.delegates[i].AfterUpdate(ctx, model, diff); err != nil {
  83. return
  84. }
  85. }
  86. return
  87. }
  88. func (dm *delegate) BeforeDelete(ctx context.Context, model interface{}) (err error) {
  89. for i := len(dm.delegates) - 1; i >= 0; i-- {
  90. if err = dm.delegates[i].BeforeDelete(ctx, model); err != nil {
  91. return
  92. }
  93. }
  94. return
  95. }
  96. func (dm *delegate) AfterDelete(ctx context.Context, model interface{}) (err error) {
  97. for i := len(dm.delegates) - 1; i >= 0; i-- {
  98. if err = dm.delegates[i].AfterDelete(ctx, model); err != nil {
  99. return
  100. }
  101. }
  102. return
  103. }