Skip to content

Commit 0a8f61a

Browse files
authored
Merge pull request #11 from PoolC/feat/book
feat: 도서 기능을 추가 개발합니다
2 parents d29e3c3 + e9f8da4 commit 0a8f61a

File tree

11 files changed

+95
-41
lines changed

11 files changed

+95
-41
lines changed

src/main/java/org/poolc/api/book/client/NaverBookClient.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ public List<BookApiResponse> searchBooks(String query, int page) throws XMLParse
4646
.toString();
4747

4848
String xmlResponse = restTemplate.exchange(url, HttpMethod.GET, entity, String.class).getBody();
49-
System.out.println(xmlResponse);
5049

5150

5251
try {

src/main/java/org/poolc/api/book/controller/BookController.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import lombok.RequiredArgsConstructor;
44
import org.poolc.api.book.client.BookClient;
5+
import org.poolc.api.book.domain.BookSortOption;
56
import org.poolc.api.book.dto.request.CreateBookRequest;
67
import org.poolc.api.book.dto.request.UpdateBookRequest;
78
import org.poolc.api.book.service.BookService;
@@ -33,10 +34,13 @@ public ResponseEntity<?> searchBooks(@RequestParam String query,
3334
}
3435

3536
@GetMapping("/all")
36-
public ResponseEntity<?> getAllBooks(@RequestParam(value = "page", defaultValue = "0") @Min(0) Integer page) {
37+
public ResponseEntity<?> getAllBooks(
38+
@RequestParam(value = "page", defaultValue = "0") @Min(0) Integer page,
39+
@RequestParam(value = "sort", required = false) BookSortOption sortOption) {
3740
try {
38-
return new ResponseEntity<>(bookService.getAllBooks(page), HttpStatus.OK);
41+
return new ResponseEntity<>(bookService.getAllBooks(page, sortOption), HttpStatus.OK);
3942
} catch (Exception e) {
43+
e.printStackTrace();
4044
return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
4145
}
4246
}
@@ -85,7 +89,7 @@ public ResponseEntity<?> updateBook(@AuthenticationPrincipal Member member, @Pat
8589
@PostMapping("/{id}/borrow")
8690
public ResponseEntity<?> borrowBook(@AuthenticationPrincipal Member member, @PathVariable Long id) {
8791
try {
88-
bookService.borrow(member, id);
92+
bookService.rent(member, id);
8993
return new ResponseEntity<>(HttpStatus.OK);
9094
} catch (Exception e) {
9195
return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);

src/main/java/org/poolc/api/book/domain/Book.java

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import org.poolc.api.member.domain.Member;
1010

1111
import javax.persistence.*;
12-
import javax.validation.constraints.Size;
1312
import java.time.LocalDate;
1413

1514
@Entity
@@ -29,8 +28,11 @@ public class Book extends TimestampEntity {
2928
private Long id;
3029

3130
@ManyToOne(fetch = FetchType.EAGER)
32-
@JoinColumn(name = "borrower", referencedColumnName = "UUID")
33-
private Member borrower = null;
31+
@JoinColumn(name = "renter", referencedColumnName = "UUID")
32+
private Member renter = null;
33+
34+
@Column(name="donor")
35+
private String donor;
3436

3537
@Column(name = "title", nullable = false)
3638
private String title;
@@ -59,8 +61,8 @@ public class Book extends TimestampEntity {
5961
@Column(name = "published_date")
6062
private String publishedDate;
6163

62-
@Column(name = "borrow_date")
63-
private LocalDate borrowDate;
64+
@Column(name = "rent_date")
65+
private LocalDate rentDate;
6466

6567
@Column(name = "status", columnDefinition = "varchar(64) default 'AVAILABLE'")
6668
@Enumerated(EnumType.STRING)
@@ -69,16 +71,16 @@ public class Book extends TimestampEntity {
6971
protected Book() {
7072
}
7173

72-
public void borrowBook(Member member) {
74+
public void rentBook(Member member) {
7375
this.status = BookStatus.UNAVAILABLE;
74-
this.borrowDate = LocalDate.now();
75-
this.borrower = member;
76+
this.rentDate = LocalDate.now();
77+
this.renter = member;
7678
}
7779

7880
public void returnBook() {
7981
this.status = BookStatus.AVAILABLE;
80-
this.borrowDate = null;
81-
this.borrower = null;
82+
this.rentDate = null;
83+
this.renter = null;
8284
}
8385

8486
public void update(UpdateBookRequest request) {
@@ -91,6 +93,7 @@ public void update(UpdateBookRequest request) {
9193
if (request.getIsbn() != null) this.isbn = request.getIsbn();
9294
if (request.getPublisher() != null) this.publisher = request.getPublisher();
9395
if (request.getPubdate() != null) this.publishedDate = request.getPubdate();
96+
if (request.getDonor() != null) this.donor = request.getDonor();
9497
}
9598

9699
}

src/main/java/org/poolc/api/book/domain/BookBorrower.java

Lines changed: 0 additions & 8 deletions
This file was deleted.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package org.poolc.api.book.domain;
2+
3+
public enum BookSortOption {
4+
5+
CREATED_AT("createdAt"),
6+
TITLE("title"),
7+
RENT_TIME("rentTime");
8+
9+
private final String value;
10+
11+
BookSortOption(String value) {
12+
this.value = value;
13+
}
14+
15+
}
Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package org.poolc.api.book.dto.request;
22

3+
import javax.validation.constraints.NotBlank;
4+
import javax.validation.constraints.Size;
35
import lombok.AllArgsConstructor;
46
import lombok.Getter;
57
import lombok.NoArgsConstructor;
6-
import org.hibernate.validator.constraints.Length;
78

89
import javax.validation.constraints.NotNull;
910

@@ -12,30 +13,39 @@
1213
@AllArgsConstructor
1314
public class CreateBookRequest {
1415

15-
@Length(min = 1, max = 100)
16+
@NotBlank
17+
@Size(max = 30)
1618
private String title;
1719

18-
@Length(min = 1, max = 100)
20+
@NotBlank
21+
@Size(max = 100)
1922
private String author;
2023

21-
@Length(min = 1, max = 100)
24+
@NotBlank
25+
@Size(max = 100)
2226
private String publisher;
2327

24-
@Length(min = 1, max = 100)
28+
@NotBlank
29+
@Size(max = 100)
2530
private String isbn;
2631

27-
@Length(min = 1)
32+
@NotBlank
2833
private String description;
2934

30-
@Length(min = 1, max = 100)
35+
@NotBlank
36+
@Size(max = 100)
3137
private String pubdate;
3238

33-
@Length(min = 1)
39+
@NotBlank
3440
private String image;
3541

3642
@NotNull
3743
private Integer discount;
3844

39-
@Length(min = 1)
45+
@NotBlank
4046
private String link;
47+
48+
@NotBlank
49+
@Size(max = 100)
50+
private String donor;
4151
}

src/main/java/org/poolc/api/book/dto/request/UpdateBookRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,6 @@ public class UpdateBookRequest {
1818
private String image;
1919
private Integer discount;
2020
private String link;
21+
private String donor;
2122

2223
}

src/main/java/org/poolc/api/book/dto/response/BookResponse.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.poolc.api.book.domain.BookStatus;
99

1010
import java.time.LocalDate;
11+
import org.poolc.api.member.dto.MemberResponse;
1112

1213
@Getter
1314
@AllArgsConstructor
@@ -28,6 +29,9 @@ public class BookResponse {
2829
private LocalDate borrowDate;
2930
private BookStatus status;
3031

32+
private MemberResponse borrower;
33+
private String donor;
34+
3135
public static BookResponse of(Book book) {
3236
return BookResponse.builder()
3337
.id(book.getId())
@@ -40,8 +44,10 @@ public static BookResponse of(Book book) {
4044
.isbn(book.getIsbn())
4145
.publisher(book.getPublisher())
4246
.publishedDate(book.getPublishedDate())
43-
.borrowDate(book.getBorrowDate())
47+
.borrowDate(book.getRentDate())
4448
.status(book.getStatus())
49+
.donor(book.getDonor())
50+
.borrower(book.getRenter() == null ? null : MemberResponse.of(book.getRenter()))
4551
.build();
4652
}
4753

src/main/java/org/poolc/api/book/repository/BookRepository.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,19 @@
66
import org.springframework.data.jpa.repository.JpaRepository;
77

88
import java.util.Optional;
9+
import org.springframework.data.jpa.repository.Query;
910

1011
public interface BookRepository extends JpaRepository<Book, Long> {
1112
boolean existsByTitleAndAuthor(String title, String author);
1213

1314
Optional<Book> findBookById(Long id);
1415
Page<Book> findAllByOrderByCreatedAtDesc(Pageable pageable);
16+
Page<Book> findAllByOrderByTitleAsc(Pageable pageable);
17+
18+
@Query("SELECT b FROM Book b " +
19+
"ORDER BY CASE WHEN b.rentDate IS NULL THEN 0 ELSE 1 END, " +
20+
"b.rentDate DESC, " +
21+
"b.title ASC")
22+
Page<Book> findAllByOrderByRentDateDescTitleAsc(Pageable pageable);
1523

1624
}

src/main/java/org/poolc/api/book/service/BookService.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.poolc.api.book.service;
22

3+
import org.poolc.api.book.domain.BookSortOption;
34
import org.poolc.api.book.dto.request.CreateBookRequest;
45
import org.poolc.api.book.dto.request.UpdateBookRequest;
56
import org.poolc.api.book.dto.response.BookResponse;
@@ -9,11 +10,11 @@
910

1011
public interface BookService {
1112

12-
Page<BookResponse> getAllBooks(int page);
13+
Page<BookResponse> getAllBooks(int page, BookSortOption option);
1314
void createBook(Member member, CreateBookRequest request);
1415
void deleteBook(Member member, Long id) throws Exception;
1516
void updateBook(Member member, Long id, UpdateBookRequest request) throws Exception;
16-
void borrow(Member member, Long id) throws Exception;
17+
void rent(Member member, Long id) throws Exception;
1718
void returnBook(Member member, Long id) throws Exception;
1819
BookResponse getBook(Long id);
1920

0 commit comments

Comments
 (0)