Spring/[P] 도서 대여 프로그램

💚 등록된 책 조회하기 (전체 조회, 선택 조회) 💚

alsruds 2023. 12. 16. 00:58

2023.12.12 - [Spring/[PROJECT] 도서 대여 프로그램] - 💚 책 등록하기 💚

 

💚 책 등록하기 💚

Controller → Service → Repository 📚 Controller ☑️ Postman API 요청으로 책의 데이터 (addBookDto) 가 입력된다 ☑️ 책을 등록하는 메서드 (addBook) 가 저장된 service 가 호출된다 @RestController @RequestMapping("/boo

alsrudalsrudalsrud.tistory.com

 

📖 Controller

☑️ 전체 조회 : 등록되어 있는 모든 책을 조회하는 메서드 (getAllBooks) 를 가진 service 를 호출한다

☑️ 선택 조회 : 조회하고자 하는 책의 id 값을 입력받으면, service 의 메서드 (getBookById) 를 호출한다

...
public class BookController {
    private final BookService bookService;

    ...

    // 책 조회 (전체)
    @GetMapping()
    public List<ResponseBookListDto> getAllBooks() {
        return bookService.getAllBooks();
    }

    // 책 조회 (하나)
    @GetMapping("/{id}")
    public ResponseEntity<ResponseBookDto> getBookById(@PathVariable("id") Long id) {
        Book book = bookService.getBookById(id);
        
        // 조회하고자 하는 책의 유무 확인
        if (book == null) {
            return new ResponseEntity<>(HttpStatus.NOT_FOUND);
        }

        ResponseBookDto bookDto = ResponseBookDto.responseBook(book);
        return new ResponseEntity<>(bookDto, HttpStatus.OK);
    }
}

 

📖 Service

☑️ 전체 조회 : 원하는 정보만 반환하기 위해 Dto 에 저장된 메서드 (responseBookList) 를 사용한다

☑️ 선택 조회 : Repository 의 findById 메서드를 사용한다

...
public class BookService {
    private final BookRepository bookRepository;

    ...

    // 책 조회 (전체)
    public List<ResponseBookListDto> getAllBooks() {
        List<Book> books = bookRepository.findAll();
        return books.stream()
                .map(ResponseBookListDto::responseBookList)
                .collect(Collectors.toList());
    }

    // 책 조회 (하나)
    public Book getBookById(Long id) {
        return bookRepository.findById(id).orElseThrow(RuntimeException::new);
    }
}

 

📖 Repository

☑️ JpaRepository 인터페이스를 상속받음으로써 다양한 메서드 사용이 가능하다 (ex. findById)

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

 

📖 Dto

☑️ 원하는 정보만 반환하기 위해 사용한다

전체 조회 : ResponseBookListDto

선택 조회 : ResponseBookDto

@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ResponseBookListDto {
    private String title;
    private String description;
    private BookStatus bookStatus;
    private int likeCount;

    public static ResponseBookListDto responseBookList(Book book) {
        ResponseBookListDto bookDto = ResponseBookListDto.builder()
                .title(book.getTitle())
                .description(book.getDescription())
                .bookStatus(book.getBookStatus())
                .likeCount(book.getLikeCount())
                .build();
        return bookDto;
    }
}

 

@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ResponseBookDto {
    private String title;
    private String description;
    private BookStatus bookStatus;
    private int likeCount;
    private Category category;
    private List<BookHashtag> hashtag;

    public static ResponseBookDto responseBook(Book book) {
        ResponseBookDto bookDto = ResponseBookDto.builder()
                .title(book.getTitle())
                .description(book.getDescription())
                .bookStatus(book.getBookStatus())
                .likeCount(book.getLikeCount())
                .category(book.getCategory())
                .hashtag(book.getBookHashtags())
                .build();
        return bookDto;
    }
}

 

 

💡TEST💡

 

· Postman

☑️ 전체 조회 결과

http://localhost:8080/book

 

☑️ 선택 조회 결과

http://localhost:8080/book/1