728x90
320x100
🎯 오늘의 목표
- 북(Book) 도메인 API 구현
⚙️ 진행한 작업
- (Book) 도메인 API 구현
- (Book) 도메인 API 테스트
🛠️ 개발내용
📌 북(Book) 컨트롤러 생성
package ddururi.bookbookclub.domain.book.controller;
import ddururi.bookbookclub.domain.book.dto.BookRequest;
import ddururi.bookbookclub.domain.book.dto.BookResponse;
import ddururi.bookbookclub.domain.book.service.BookService;
import ddururi.bookbookclub.global.common.ApiResponse;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
/**
* 책 관련 API 컨트롤러
* - 등록
*/
@RestController
@RequestMapping("/api/books")
@RequiredArgsConstructor
public class BookController {
private final BookService bookService;
/**
* 책 등록 API
* @param request 책 등록 요청 데이터
* @return 등록된 책 정보
*/
@PostMapping
public ResponseEntity<ApiResponse<BookResponse>> createBook(
@RequestBody @Valid BookRequest request
) {
BookResponse bookResponse = bookService.createBook(request);
return ResponseEntity.ok(ApiResponse.success(bookResponse));
}
}
📌 BookRequest 생성
package ddururi.bookbookclub.domain.book.dto;
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.NoArgsConstructor;
/**
* 책 등록 요청 DTO
*/
@Getter
@NoArgsConstructor
public class BookRequest {
@NotBlank(message = "제목은 비어 있을 수 없습니다.")
private String title;
@NotBlank(message = "저자는 비어 있을 수 없습니다.")
private String author;
private String publisher;
private String isbn;
private String thumbnailUrl;
}
📌 BookResponse 생성
package ddururi.bookbookclub.domain.book.dto;
import ddururi.bookbookclub.domain.book.entity.Book;
import lombok.Getter;
@Getter
public class BookResponse {
private final Long id;
private final String title;
private final String author;
private final String publisher;
private final String isbn;
private final String thumbnailUrl;
public BookResponse(Book book) {
this.id = book.getId();
this.title = book.getTitle();
this.author = book.getAuthor();
this.publisher = book.getPublisher();
this.isbn = book.getIsbn();
this.thumbnailUrl = book.getThumbnailUrl();
}
}
[포스트맨으로 테스트하기]
📌 책등록 API
URL | http://localhost:8080/api/books |
Method | POST |
Headers | Content-Type: application/json |
Body 타입 | raw (JSON) |
Body :
{
"title": "클린코드",
"author": "로버트 C. 마틴",
"publisher": "인사이트",
"isbn": "9788966260959",
"thumbnailUrl": "https://example.com/cleancode.jpg"
}
[테스트 결과 : 성공]
728x90
320x100
'💻 뚝딱뚝딱 > 북북클럽' 카테고리의 다른 글
[개발일지 #019] 피드(Feed) 도메인 API 구현 및 테스트 (0) | 2025.04.29 |
---|---|
[개발일지 #018] 피드(Feed) 도메인 개발 및 단위테스트 (0) | 2025.04.29 |
[개발일지 #016] 북(Book) 도메인 개발 및 단위 테스트 (0) | 2025.04.29 |
[개발일지 #015] 이메일 인증 실패 시도 횟수 제한 기능 (0) | 2025.04.25 |
[개발일지 #014] 글로벌 예외처리 및 API 응답 포맷 통일 (0) | 2025.04.24 |