package net.petrikainulainen.springdata.jpa.web; import net.petrikainulainen.springdata.jpa.todo.TodoDTO; import net.petrikainulainen.springdata.jpa.todo.TodoSearchService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; /** * This controller provides the public API that is used to find todo entries by using * different search criteria. * * @author Petri Kainulainen */ @RestController final class TodoSearchController { private static final Logger LOGGER = LoggerFactory.getLogger(TodoSearchController.class); private final TodoSearchService searchService; @Autowired public TodoSearchController(TodoSearchService searchService) { this.searchService = searchService; } /** * Finds todo entries whose title or description contains the given search term. This * search is case insensitive. * @param searchTerm The used search term. * @param pageRequest The information of the requested page. * @return */ @RequestMapping(value = "/api/todo/search", method = RequestMethod.GET) public Page<TodoDTO> findBySearchTerm(@RequestParam("searchTerm") String searchTerm, Pageable pageRequest) { LOGGER.info("Finding todo entries by search term: {} and page request: {}", searchTerm, pageRequest); Page<TodoDTO> searchResultPage = searchService.findBySearchTerm(searchTerm, pageRequest); LOGGER.info("Found {} todo entries. Returned page {} contains {} todo entries", searchResultPage.getTotalElements(), searchResultPage.getNumber(), searchResultPage.getNumberOfElements() ); return searchResultPage; } }