Skip to content

Instantly share code, notes, and snippets.

@alex-ber
Last active September 26, 2021 07:30
Show Gist options
  • Save alex-ber/de2a01eb5d8eb1d9330b35e3a0031edb to your computer and use it in GitHub Desktop.
Save alex-ber/de2a01eb5d8eb1d9330b35e3a0031edb to your computer and use it in GitHub Desktop.
/* ... */
public class BookRepositoryImpl implements BookRepositoryCustom {
private final MongoTemplate mongoTemplate;
@Autowired
public BookRepositoryImpl(MongoTemplate mongoTemplate) {
this.mongoTemplate = mongoTemplate;
}
@Override
public List<Book> query(DynamicQuery dynamicQuery) {
final Query query = new Query();
final List<Criteria> criteria = new ArrayList<>();
if(dynamicQuery.getAuthorNameLike() != null) {
criteria.add(Criteria.where("authorNames").regex(MongoRegexCreator.INSTANCE.toRegularExpression(
dynamicQuery.getAuthorNameLike(), Part.Type.CONTAINING
), "i"));
}
if(dynamicQuery.getPublishDateBefore() != null) {
criteria.add(Criteria.where("publishDate").lte(dynamicQuery.getPublishDateBefore()));
}
if(dynamicQuery.getPublishDateAfter() != null) {
criteria.add(Criteria.where("publishDate").gte(dynamicQuery.getPublishDateAfter()));
}
if(dynamicQuery.getSubject() != null) {
criteria.add(Criteria.where("subjects").regex(MongoRegexCreator.INSTANCE.toRegularExpression(
dynamicQuery.getSubject(), Part.Type.SIMPLE_PROPERTY
), "i"));
}
if(!criteria.isEmpty()) {
query.addCriteria(new Criteria().andOperator(criteria.toArray(new Criteria[criteria.size()])));
}
return mongoTemplate.find(query, Book.class);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment