Skip to content

Commit 8a77944

Browse files
authored
Merge pull request #42 from Leafly-app/refact/#34
πŸ› fix : 독후감 μž‘μ„± μ‹œ ν•΄λ‹Ή μ„œμž¬ '완독' 등둝
2 parents ec5338d + e72328b commit 8a77944

6 files changed

Lines changed: 60 additions & 0 deletions

File tree

β€Žsrc/main/java/com/hansung/leafly/domain/bookreview/service/BookReviewServiceImpl.javaβ€Ž

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@
99
import com.hansung.leafly.domain.bookreview.repository.BookTagRepository;
1010
import com.hansung.leafly.domain.bookreview.repository.ReviewImageRepository;
1111
import com.hansung.leafly.domain.bookreview.web.dto.*;
12+
import com.hansung.leafly.domain.library.entity.Library;
13+
import com.hansung.leafly.domain.library.entity.enums.LibraryStatus;
14+
import com.hansung.leafly.domain.library.repository.LibraryRepository;
15+
import com.hansung.leafly.domain.library.web.dto.LibraryReq;
16+
import com.hansung.leafly.domain.library.web.dto.LibraryReqBuilder;
1217
import com.hansung.leafly.domain.member.entity.Member;
1318
import com.hansung.leafly.infra.s3.S3Service;
1419
import com.hansung.leafly.infra.s3.exception.S3RequestFailedException;
@@ -20,6 +25,7 @@
2025
import java.io.IOException;
2126
import java.util.ArrayList;
2227
import java.util.List;
28+
import java.util.Optional;
2329

2430
@Service
2531
@Transactional(readOnly = true)
@@ -29,6 +35,7 @@ public class BookReviewServiceImpl implements BookReviewService {
2935
private final BookTagRepository bookTagRepository;
3036
private final ReviewImageRepository reviewImageRepository;
3137
private final S3Service s3Service;
38+
private final LibraryRepository libraryRepository;
3239

3340
@Override
3441
@Transactional
@@ -41,6 +48,8 @@ public void create(Member member, ReviewReq req) {
4148

4249
List<ReviewImage> images = processImages(req.getImages(), bookReview);
4350
reviewImageRepository.saveAll(images);
51+
52+
saveLibraryAsDone(member, req);
4453
}
4554

4655
@Override
@@ -161,4 +170,21 @@ private List<ReviewImage> processImages(List<MultipartFile> images, BookReview r
161170
return result;
162171
}
163172

173+
private void saveLibraryAsDone(Member member, ReviewReq req) {
174+
String isbn = req.getIsbn();
175+
176+
// 이미 μ„œμž¬μ— μ‘΄μž¬ν•˜λ©΄ μƒνƒœλ§Œ DONE으둜 λ³€κ²½
177+
Optional<Library> existing = libraryRepository.findByMemberAndIsbn(member, isbn);
178+
179+
if (existing.isPresent()) {
180+
Library library = existing.get();
181+
library.updateStatus(LibraryStatus.DONE); // μƒνƒœ μ—…λ°μ΄νŠΈ
182+
return;
183+
}
184+
185+
// μ—†μœΌλ©΄ μƒˆλ‘œ μΆ”κ°€
186+
LibraryReq libraryReq = new LibraryReqBuilder(req).buildDoneReq();
187+
Library library = Library.of(member, isbn, libraryReq);
188+
libraryRepository.save(library);
189+
}
164190
}

β€Žsrc/main/java/com/hansung/leafly/domain/bookreview/web/dto/ReviewReq.javaβ€Ž

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,7 @@ public class ReviewReq {
3838
// 이미지 μ΅œλŒ€ 3κ°œκΉŒμ§€
3939
@Size(max = 3, message = "μ΄λ―Έμ§€λŠ” μ΅œλŒ€ 3μž₯κΉŒμ§€ μ—…λ‘œλ“œ κ°€λŠ₯ν•©λ‹ˆλ‹€.")
4040
private List<MultipartFile> images;
41+
42+
@NotNull(message = "isbn을 μž…λ ₯ν•΄μ£Όμ„Έμš”.")
43+
private String isbn;
4144
}

β€Žsrc/main/java/com/hansung/leafly/domain/library/entity/Library.javaβ€Ž

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,8 @@ public static Library of(Member member, String isbn, LibraryReq req) {
5151
.status(req.getStatus())
5252
.build();
5353
}
54+
55+
public void updateStatus(LibraryStatus status) {
56+
this.status = status;
57+
}
5458
}

β€Žsrc/main/java/com/hansung/leafly/domain/library/repository/LibraryRepository.javaβ€Ž

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

8+
import java.util.Optional;
9+
810
@Repository
911
public interface LibraryRepository extends JpaRepository<Library, Long> {
1012
boolean existsByMemberAndIsbn(Member member, String isbn13);
1113

14+
Optional<Library> findByMemberAndIsbn(Member member, String isbn);
1215
}

β€Žsrc/main/java/com/hansung/leafly/domain/library/web/dto/LibraryReq.javaβ€Ž

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
import jakarta.validation.constraints.NotBlank;
55
import jakarta.validation.constraints.NotNull;
66
import lombok.Getter;
7+
import lombok.Setter;
78

89
@Getter
10+
@Setter
911
public class LibraryReq {
1012
@NotBlank(message = "μ±… 제λͺ©μ΄ λΉ„μ–΄ μžˆμŠ΅λ‹ˆλ‹€.")
1113
private String title;
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.hansung.leafly.domain.library.web.dto;
2+
3+
import com.hansung.leafly.domain.bookreview.web.dto.ReviewReq;
4+
import com.hansung.leafly.domain.library.entity.enums.LibraryStatus;
5+
6+
public class LibraryReqBuilder {
7+
8+
private final ReviewReq req;
9+
10+
public LibraryReqBuilder(ReviewReq req) {
11+
this.req = req;
12+
}
13+
14+
public LibraryReq buildDoneReq() {
15+
LibraryReq libraryReq = new LibraryReq();
16+
libraryReq.setTitle(req.getTitle());
17+
libraryReq.setAuthor(req.getAuthor());
18+
libraryReq.setCover(req.getThumbnail());
19+
libraryReq.setStatus(LibraryStatus.DONE);
20+
return libraryReq;
21+
}
22+
}

0 commit comments

Comments
Β (0)