Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @Component
- public class SearchSpecification {
- public static Specification<Task> locationNameContains(String location) {
- return (root, query, cb) -> cb.like(root.get(Task_.location), "%"+location.toLowerCase()+"%");
- }
- public static Specification<Task> titleContainsQuery(String title) {
- return (root, query, cb) -> cb.like(root.get(Task_.title), "%"+ title + "%");
- }
- public static Specification<Task> titleOrDescriptionContains(String searchTerm) {
- return (root, query, cb) -> {
- query.distinct(true);
- return cb.or(
- cb.like(root.get(Task_.title), "%"+ searchTerm.toLowerCase() + "%"),
- cb.like(root.get(Task_.description), "%"+ searchTerm.toLowerCase() + "%")
- );
- };
- }
- public static Specification<Task> categoryContains(Category category) {
- return (root, query, cb) -> {
- query.distinct(true);
- return cb.equal(root.get(Task_.category), category);
- };
- }
- public List<TaskResponse> searchTasksBySpecification(String query, String category, String location) throws Exception {
- ArrayList<TaskResponse> jobs = new ArrayList<>();
- Category categoryByTitle = categoryRepository.findByTitle(category);
- if (query == null &&
- category == null &&
- location == null) {
- taskRepository.findAllByOrderByCreatedDateDesc().forEach(taskEntity -> {
- if (taskEntity.getIsOpen()) {
- TaskResponse job = DTOMapper.map(taskEntity, TaskResponse.class);
- jobs.add(job);
- }
- });
- return jobs;
- } else if (category == null && location == null) {
- taskRepository.findAll(where(titleOrDescriptionContains(query))).forEach(taskEntity -> {
- if (taskEntity.getIsOpen()) {
- TaskResponse job = DTOMapper.map(taskEntity, TaskResponse.class);
- jobs.add(job);
- }
- });
- return jobs;
- } else if (query == null && category == null) {
- taskRepository.findAll(where(locationNameContains(location))).forEach(taskEntity -> {
- if (taskEntity.getIsOpen()) {
- TaskResponse job = DTOMapper.map(taskEntity, TaskResponse.class);
- jobs.add(job);
- }
- });
- return jobs;
- } else if (query == null && location == null) {
- taskRepository.findAll(where(categoryContains(categoryByTitle))).forEach(taskEntity -> {
- if (taskEntity.getIsOpen()) {
- TaskResponse job = DTOMapper.map(taskEntity, TaskResponse.class);
- jobs.add(job);
- }
- });
- return jobs;
- } else if (query == null) {
- taskRepository.findByCategory_TitleAndLocationOrderByCreatedDateDesc(category, location).forEach(taskEntity -> {
- if (taskEntity.getIsOpen()) {
- TaskResponse job = DTOMapper.map(taskEntity, TaskResponse.class);
- jobs.add(job);
- }
- });
- return jobs;
- } else if (category == null) {
- taskRepository.findAll(where(titleOrDescriptionContains(query)
- .and(locationNameContains(location)))).forEach(taskEntity -> {
- if (taskEntity.getIsOpen()) {
- TaskResponse job = DTOMapper.map(taskEntity, TaskResponse.class);
- jobs.add(job);
- }
- });
- return jobs;
- } else if (location == null) {
- taskRepository.findAll(where(titleOrDescriptionContains(query)
- .and(categoryContains(categoryByTitle)))).forEach(taskEntity -> {
- if (taskEntity.getIsOpen()) {
- TaskResponse job = DTOMapper.map(taskEntity, TaskResponse.class);
- jobs.add(job);
- }
- });
- return jobs;
- } else
- taskRepository.findAll(where(titleOrDescriptionContains(query)
- .and(categoryContains(categoryByTitle))
- .and(locationNameContains(location)))).forEach(taskEntity -> {
- if (taskEntity.getIsOpen()) {
- TaskResponse job = DTOMapper.map(taskEntity, TaskResponse.class);
- jobs.add(job);
- }
- });
- return jobs;
- }
- taskRepository.findAll(where(titleOrDescriptionContains(query)
- .and(categoryContains(categoryByTitle))
- .and(locationNameContains(location))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement