@@ -3,6 +3,7 @@ package elemental
33import (
44 "github.com/elcengine/elemental/utils"
55
6+ "go.mongodb.org/mongo-driver/bson"
67 "go.mongodb.org/mongo-driver/bson/primitive"
78 "go.mongodb.org/mongo-driver/mongo"
89)
@@ -14,12 +15,13 @@ type listener[T any] struct {
1415}
1516
1617type pre [T any ] struct {
17- save listener [T ]
18- updateOne listener [T ]
19- deleteOne listener [T ]
20- deleteMany listener [T ]
21- findOneAndUpdate listener [T ]
22- findOneAndDelete listener [T ]
18+ save listener [T ]
19+ updateOne listener [T ]
20+ deleteOne listener [T ]
21+ deleteMany listener [T ]
22+ findOneAndUpdate listener [T ]
23+ findOneAndDelete listener [T ]
24+ findOneAndReplace listener [T ]
2325}
2426
2527type post [T any ] struct {
@@ -51,15 +53,15 @@ func (l listener[T]) run(args ...any) {
5153 }
5254}
5355
54- func (m Model [T ]) PreSave (f func (doc T ) bool ) {
56+ func (m Model [T ]) PreSave (f func (doc * bson. M ) bool ) {
5557 m .middleware .pre .save .functions = append (m .middleware .pre .save .functions , func (args ... any ) bool {
56- return f (args [0 ].(T ))
58+ return f (args [0 ].(* bson. M ))
5759 })
5860}
5961
60- func (m Model [T ]) PostSave (f func (doc T ) bool ) {
62+ func (m Model [T ]) PostSave (f func (doc * bson. M ) bool ) {
6163 m .middleware .post .save .functions = append (m .middleware .post .save .functions , func (args ... any ) bool {
62- return f (args [0 ].(T ))
64+ return f (args [0 ].(* bson. M ))
6365 })
6466}
6567
@@ -75,9 +77,9 @@ func (m Model[T]) PostUpdateOne(f func(result *mongo.UpdateResult, err error) bo
7577 })
7678}
7779
78- func (m Model [T ]) PreDeleteOne (f func (filters primitive.M ) bool ) {
80+ func (m Model [T ]) PreDeleteOne (f func (filters * primitive.M ) bool ) {
7981 m .middleware .pre .deleteOne .functions = append (m .middleware .pre .deleteOne .functions , func (args ... any ) bool {
80- return f (args [0 ].(primitive.M ))
82+ return f (args [0 ].(* primitive.M ))
8183 })
8284}
8385
@@ -87,9 +89,9 @@ func (m Model[T]) PostDeleteOne(f func(result *mongo.DeleteResult, err error) bo
8789 })
8890}
8991
90- func (m Model [T ]) PreDeleteMany (f func (filters primitive.M ) bool ) {
92+ func (m Model [T ]) PreDeleteMany (f func (filters * primitive.M ) bool ) {
9193 m .middleware .pre .deleteMany .functions = append (m .middleware .pre .deleteMany .functions , func (args ... any ) bool {
92- return f (args [0 ].(primitive.M ))
94+ return f (args [0 ].(* primitive.M ))
9395 })
9496}
9597
@@ -99,27 +101,27 @@ func (m Model[T]) PostDeleteMany(f func(result *mongo.DeleteResult, err error) b
99101 })
100102}
101103
102- func (m Model [T ]) PostFind (f func (doc []T ) bool ) {
104+ func (m Model [T ]) PostFind (f func (doc * []T ) bool ) {
103105 m .middleware .post .find .functions = append (m .middleware .post .find .functions , func (args ... any ) bool {
104- return f (args [0 ].([]T ))
106+ return f (args [0 ].(* []T ))
105107 })
106108}
107109
108- func (m Model [T ]) PostFindOneAndUpdate (f func (doc * T ) bool ) {
109- m .middleware .post .findOneAndUpdate .functions = append (m .middleware .post .findOneAndUpdate .functions , func (args ... any ) bool {
110- return f (args [0 ].(* T ) )
110+ func (m Model [T ]) PreFindOneAndUpdate (f func (filters * primitive. M , doc any ) bool ) {
111+ m .middleware .pre .findOneAndUpdate .functions = append (m .middleware .pre .findOneAndUpdate .functions , func (args ... any ) bool {
112+ return f (args [0 ].(* primitive. M ), args [ 1 ] )
111113 })
112114}
113115
114- func (m Model [T ]) PreFindOneAndUpdate (f func (filters primitive. M ) bool ) {
115- m .middleware .pre .findOneAndUpdate .functions = append (m .middleware .pre .findOneAndUpdate .functions , func (args ... any ) bool {
116- return f (args [0 ].(primitive. M ))
116+ func (m Model [T ]) PostFindOneAndUpdate (f func (doc * T ) bool ) {
117+ m .middleware .post .findOneAndUpdate .functions = append (m .middleware .post .findOneAndUpdate .functions , func (args ... any ) bool {
118+ return f (args [0 ].(* T ))
117119 })
118120}
119121
120- func (m Model [T ]) PreFindOneAndDelete (f func (filters primitive.M ) bool ) {
122+ func (m Model [T ]) PreFindOneAndDelete (f func (filters * primitive.M ) bool ) {
121123 m .middleware .pre .findOneAndDelete .functions = append (m .middleware .pre .findOneAndDelete .functions , func (args ... any ) bool {
122- return f (args [0 ].(primitive.M ))
124+ return f (args [0 ].(* primitive.M ))
123125 })
124126}
125127
@@ -129,6 +131,12 @@ func (m Model[T]) PostFindOneAndDelete(f func(doc *T) bool) {
129131 })
130132}
131133
134+ func (m Model [T ]) PreFindOneAndReplace (f func (filters * primitive.M , doc any ) bool ) {
135+ m .middleware .pre .findOneAndReplace .functions = append (m .middleware .pre .findOneAndReplace .functions , func (args ... any ) bool {
136+ return f (args [0 ].(* primitive.M ), args [1 ])
137+ })
138+ }
139+
132140func (m Model [T ]) PostFindOneAndReplace (f func (doc * T ) bool ) {
133141 m .middleware .post .findOneAndReplace .functions = append (m .middleware .post .findOneAndReplace .functions , func (args ... any ) bool {
134142 return f (args [0 ].(* T ))
0 commit comments