Skip to content

Commit

Permalink
Implemented Search Book Functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
rishabhrawat05 committed Nov 5, 2024
1 parent 664b333 commit 6f3e150
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 0 deletions.
14 changes: 14 additions & 0 deletions src/main/java/com/libraryman_api/book/BookController.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.libraryman_api.book;

import com.libraryman_api.exception.ResourceNotFoundException;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
Expand Down Expand Up @@ -100,4 +102,16 @@ public BookDto updateBook(@PathVariable int id, @RequestBody BookDto bookDtoDeta
public void deleteBook(@PathVariable int id) {
bookService.deleteBook(id);
}

/**
* Searches book based on title, author, genre, etc.
*
* @param keyword the Keyword to search Book
* @param pageable
* @return
*/
@GetMapping("/search/{keyword}")
public Page<Book> searchBook(@PathVariable String keyword, @PageableDefault(page = 0, size = 5, sort = "title") Pageable pageable){
return bookService.searchBook(keyword,pageable);
}
}
23 changes: 23 additions & 0 deletions src/main/java/com/libraryman_api/book/BookRepository.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,33 @@
package com.libraryman_api.book;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

@Repository
public interface BookRepository extends JpaRepository<Book, Integer> {

/**
* This method use SQL Query for finding book based on
* title, author, genre, publishedYear, etc. By using LIKE operator
* it search from database based on keyword entered.
*
* @param keyword
* @param pageable
* @return
*/

@Query("SELECT b FROM Book b WHERE "
+ "b.title LIKE %:keyword% OR "
+ "b.author LIKE %:keyword% OR "
+ "b.publisher LIKE %:keyword% OR "
+ "b.genre LIKE %:keyword% OR "
+ "CAST(b.publishedYear As string) LIKE %:keyword% OR "
+ "CAST(b.copiesAvailable As string) LIKE %:keyword%")
Page<Book> searchBook(@Param("keyword") String keyword,Pageable pageable);
}


Expand Down
12 changes: 12 additions & 0 deletions src/main/java/com/libraryman_api/book/BookService.java
Original file line number Diff line number Diff line change
Expand Up @@ -181,4 +181,16 @@ public Book DtoToEntity(BookDto bookDto) {
book.setIsbn(bookDto.getIsbn());
return book;
}

/**
* <p>This method takes String keyword and search book based on
* title, author, genre, publishedYear, etc. from Book Entity. </p>
*
* @param keyword
* @param pageable
* @return
*/
public Page<Book> searchBook(String keyword,Pageable pageable ){
return bookRepository.searchBook(keyword,pageable);
}
}

0 comments on commit 6f3e150

Please sign in to comment.