Skip to content

Commit

Permalink
Merge pull request #75 from dnd-side-project/fix/#62-book
Browse files Browse the repository at this point in the history
책을 등록하는 로직을 수정한다.
  • Loading branch information
f1v3-dev authored Feb 6, 2025
2 parents 1144db9 + 72d328d commit f7210ee
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,12 @@ public class RegisterBookController implements RegisterBookApiSpec {
public ApiResponse<?> registerBook(
@Valid @RequestBody RegisterBookRequest request,
@Parameter(hidden = true) @AuthenticationPrincipal UserDetails userDetails) {
registerBookUseCase.registerBook(request, Long.valueOf(userDetails.getUsername()));

registerBookUseCase.registerBook(request, extractMemberId(userDetails));
return ApiResponse.success();
}

private static Long extractMemberId(UserDetails userDetails) {
return Long.valueOf(userDetails.getUsername());
}
}
33 changes: 25 additions & 8 deletions api/src/main/java/com/dnd/sbooky/api/book/RegisterBookUseCase.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
package com.dnd.sbooky.api.book;

import com.dnd.sbooky.api.book.request.RegisterBookRequest;
import com.dnd.sbooky.core.book.*;
import com.dnd.sbooky.api.member.exception.MemberNotFoundException;
import com.dnd.sbooky.api.support.error.ErrorType;
import com.dnd.sbooky.core.book.BookEntity;
import com.dnd.sbooky.core.book.BookRepository;
import com.dnd.sbooky.core.book.MemberBookEntity;
import com.dnd.sbooky.core.book.MemberBookRepository;
import com.dnd.sbooky.core.book.ReadStatus;
import com.dnd.sbooky.core.member.MemberEntity;
import com.dnd.sbooky.core.member.MemberRepository;
import lombok.RequiredArgsConstructor;
Expand All @@ -17,15 +23,26 @@ public class RegisterBookUseCase {
private final MemberRepository memberRepository;

public void registerBook(RegisterBookRequest request, Long memberId) {
MemberEntity memberEntity =
MemberEntity member =
memberRepository
.findById(memberId)
.orElseThrow(() -> new RuntimeException()); // todo 커스텀한 예외로 수정
BookEntity bookEntity =
bookRepository.save(
BookEntity.newInstance(request.author(), request.title(), request.publishedAt()));
.orElseThrow(() -> new MemberNotFoundException(ErrorType.MEMBER_NOT_FOUND));

BookEntity book =
bookRepository
.findByAuthorAndTitle(request.author(), request.title())
.orElseGet(() -> bookRepository.save(createBook(request)));

memberBookRepository.save(
MemberBookEntity.newInstance(
memberEntity, bookEntity, ReadStatus.valueOf(request.readStatus())));
createMemberBook(member, book, ReadStatus.valueOf(request.readStatus())));
}

private BookEntity createBook(RegisterBookRequest request) {
return BookEntity.newInstance(request.author(), request.title(), request.publishedAt());
}

private MemberBookEntity createMemberBook(
MemberEntity member, BookEntity book, ReadStatus readStatus) {
return MemberBookEntity.newInstance(member, book, readStatus);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package com.dnd.sbooky.core.book;

import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;

public interface BookRepository extends JpaRepository<BookEntity, Long> {}
public interface BookRepository extends JpaRepository<BookEntity, Long> {

Optional<BookEntity> findByAuthorAndTitle(String author, String title);
}

0 comments on commit f7210ee

Please sign in to comment.