Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,11 @@
import com.hansung.leafly.domain.bookreview.repository.BookTagRepository;
import com.hansung.leafly.domain.bookreview.repository.ReviewImageRepository;
import com.hansung.leafly.domain.bookreview.web.dto.*;
import com.hansung.leafly.domain.library.entity.Library;
import com.hansung.leafly.domain.library.entity.enums.LibraryStatus;
import com.hansung.leafly.domain.library.repository.LibraryRepository;
import com.hansung.leafly.domain.library.web.dto.LibraryReq;
import com.hansung.leafly.domain.library.web.dto.LibraryReqBuilder;
import com.hansung.leafly.domain.member.entity.Member;
import com.hansung.leafly.infra.s3.S3Service;
import com.hansung.leafly.infra.s3.exception.S3RequestFailedException;
Expand All @@ -20,6 +25,7 @@
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

@Service
@Transactional(readOnly = true)
Expand All @@ -29,6 +35,7 @@ public class BookReviewServiceImpl implements BookReviewService {
private final BookTagRepository bookTagRepository;
private final ReviewImageRepository reviewImageRepository;
private final S3Service s3Service;
private final LibraryRepository libraryRepository;

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

List<ReviewImage> images = processImages(req.getImages(), bookReview);
reviewImageRepository.saveAll(images);

saveLibraryAsDone(member, req);
}

@Override
Expand Down Expand Up @@ -161,4 +170,21 @@ private List<ReviewImage> processImages(List<MultipartFile> images, BookReview r
return result;
}

private void saveLibraryAsDone(Member member, ReviewReq req) {
String isbn = req.getIsbn();

// 이미 μ„œμž¬μ— μ‘΄μž¬ν•˜λ©΄ μƒνƒœλ§Œ DONE으둜 λ³€κ²½
Optional<Library> existing = libraryRepository.findByMemberAndIsbn(member, isbn);

if (existing.isPresent()) {
Library library = existing.get();
library.updateStatus(LibraryStatus.DONE); // μƒνƒœ μ—…λ°μ΄νŠΈ
return;
}

// μ—†μœΌλ©΄ μƒˆλ‘œ μΆ”κ°€
LibraryReq libraryReq = new LibraryReqBuilder(req).buildDoneReq();
Library library = Library.of(member, isbn, libraryReq);
libraryRepository.save(library);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,7 @@ public class ReviewReq {
// 이미지 μ΅œλŒ€ 3κ°œκΉŒμ§€
@Size(max = 3, message = "μ΄λ―Έμ§€λŠ” μ΅œλŒ€ 3μž₯κΉŒμ§€ μ—…λ‘œλ“œ κ°€λŠ₯ν•©λ‹ˆλ‹€.")
private List<MultipartFile> images;

@NotNull(message = "isbn을 μž…λ ₯ν•΄μ£Όμ„Έμš”.")
private String isbn;
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,8 @@ public static Library of(Member member, String isbn, LibraryReq req) {
.status(req.getStatus())
.build();
}

public void updateStatus(LibraryStatus status) {
this.status = status;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,11 @@
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.Optional;

@Repository
public interface LibraryRepository extends JpaRepository<Library, Long> {
boolean existsByMemberAndIsbn(Member member, String isbn13);

Optional<Library> findByMemberAndIsbn(Member member, String isbn);
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class LibraryReq {
@NotBlank(message = "μ±… 제λͺ©μ΄ λΉ„μ–΄ μžˆμŠ΅λ‹ˆλ‹€.")
private String title;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.hansung.leafly.domain.library.web.dto;

import com.hansung.leafly.domain.bookreview.web.dto.ReviewReq;
import com.hansung.leafly.domain.library.entity.enums.LibraryStatus;

public class LibraryReqBuilder {

private final ReviewReq req;

public LibraryReqBuilder(ReviewReq req) {
this.req = req;
}

public LibraryReq buildDoneReq() {
LibraryReq libraryReq = new LibraryReq();
libraryReq.setTitle(req.getTitle());
libraryReq.setAuthor(req.getAuthor());
libraryReq.setCover(req.getThumbnail());
libraryReq.setStatus(LibraryStatus.DONE);
return libraryReq;
}
}