Skip to content

Instantly share code, notes, and snippets.

@alex-ber
Created September 26, 2021 07:28
Show Gist options
  • Save alex-ber/e4b6a152ac6d926e682e5db786446f1f to your computer and use it in GitHub Desktop.
Save alex-ber/e4b6a152ac6d926e682e5db786446f1f to your computer and use it in GitHub Desktop.
/* ... */
2public class BookRepositoryImpl implements BookRepositoryCustom {
3
4 private final MongoTemplate mongoTemplate;
5
6 @Autowired
7 public BookRepositoryImpl(MongoTemplate mongoTemplate) {
8 this.mongoTemplate = mongoTemplate;
9 }
10
11 @Override
12 public List<Book> query(DynamicQuery dynamicQuery) {
13 final Query query = new Query();
14 final List<Criteria> criteria = new ArrayList<>();
15 if(dynamicQuery.getAuthorNameLike() != null) {
16 criteria.add(Criteria.where("authorNames").regex(MongoRegexCreator.INSTANCE.toRegularExpression(
17 dynamicQuery.getAuthorNameLike(), Part.Type.CONTAINING
18 ), "i"));
19 }
20 if(dynamicQuery.getPublishDateBefore() != null) {
21 criteria.add(Criteria.where("publishDate").lte(dynamicQuery.getPublishDateBefore()));
22 }
23 if(dynamicQuery.getPublishDateAfter() != null) {
24 criteria.add(Criteria.where("publishDate").gte(dynamicQuery.getPublishDateAfter()));
25 }
26 if(dynamicQuery.getSubject() != null) {
27 criteria.add(Criteria.where("subjects").regex(MongoRegexCreator.INSTANCE.toRegularExpression(
28 dynamicQuery.getSubject(), Part.Type.SIMPLE_PROPERTY
29 ), "i"));
30 }
31 if(!criteria.isEmpty()) {
32 query.addCriteria(new Criteria().andOperator(criteria.toArray(new Criteria[criteria.size()])));
33 }
34 return mongoTemplate.find(query, Book.class);
35 }
36
37}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment