27
27
import org .springframework .data .domain .Sort ;
28
28
import org .springframework .data .mongodb .core .MongoTemplate ;
29
29
import org .springframework .data .mongodb .core .query .Criteria ;
30
+ import org .springframework .data .mongodb .core .query .CriteriaDefinition ;
31
+ import org .springframework .data .mongodb .core .query .Query ;
30
32
import org .springframework .data .mongodb .core .query .Update ;
31
33
import org .springframework .data .util .TypeInformation ;
32
34
import org .springframework .modulith .events .core .EventPublication ;
@@ -79,14 +81,13 @@ public void markCompleted(Object event, PublicationTargetIdentifier identifier,
79
81
var criteria = byEventAndListenerId (event , identifier );
80
82
var update = Update .update ("completionDate" , completionDate );
81
83
82
- mongoTemplate .updateFirst ( query (criteria ), update , MongoDbEventPublication .class );
84
+ mongoTemplate .findAndModify ( defaultQuery (criteria ), update , MongoDbEventPublication .class );
83
85
}
84
86
85
87
@ Override
86
88
public List <EventPublication > findIncompletePublications () {
87
89
88
- var query = query (where ("completionDate" ).isNull ())
89
- .with (Sort .by ("publicationDate" ).ascending ());
90
+ var query = defaultQuery (where ("completionDate" ).isNull ());
90
91
91
92
return mongoTemplate .find (query , MongoDbEventPublication .class ).stream () //
92
93
.map (this ::documentToDomain ) //
@@ -132,7 +133,7 @@ private List<MongoDbEventPublication> findDocumentsByEventAndTargetIdentifierAnd
132
133
Object event , PublicationTargetIdentifier targetIdentifier ) {
133
134
134
135
var criteria = byEventAndListenerId (event , targetIdentifier );
135
- var query = query (criteria ). with ( Sort . by ( "publicationDate" ). ascending () );
136
+ var query = defaultQuery (criteria );
136
137
137
138
return mongoTemplate .find (query , MongoDbEventPublication .class );
138
139
}
@@ -159,6 +160,10 @@ private EventPublication documentToDomain(MongoDbEventPublication document) {
159
160
return new MongoDbEventPublicationAdapter (document );
160
161
}
161
162
163
+ private static Query defaultQuery (CriteriaDefinition criteria ) {
164
+ return query (criteria ).with (Sort .by ("publicationDate" ).ascending ());
165
+ }
166
+
162
167
private static class MongoDbEventPublicationAdapter implements EventPublication {
163
168
164
169
private final MongoDbEventPublication publication ;
0 commit comments