Skip to content

Commit

Permalink
Merge pull request #22 from SWM-IDLE/develop
Browse files Browse the repository at this point in the history
Develop 09/01 2024
  • Loading branch information
minnseong authored Sep 1, 2024
2 parents b607907 + dabab33 commit 93b6c64
Show file tree
Hide file tree
Showing 11 changed files with 99 additions and 173 deletions.
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
package kr.mybrary.bookservice.book.domain;

import java.util.List;
import java.util.stream.Collectors;
import kr.mybrary.bookservice.book.domain.dto.BookDtoMapper;
import kr.mybrary.bookservice.book.domain.dto.request.BookCreateServiceRequest;
import kr.mybrary.bookservice.book.domain.exception.BookAlreadyExistsException;
import kr.mybrary.bookservice.book.persistence.Book;
import kr.mybrary.bookservice.book.persistence.bookInfo.BookCategory;
import kr.mybrary.bookservice.book.persistence.bookInfo.Author;
import kr.mybrary.bookservice.book.persistence.bookInfo.BookAuthor;
import kr.mybrary.bookservice.book.persistence.bookInfo.BookCategory;
import kr.mybrary.bookservice.book.persistence.bookInfo.BookTranslator;
import kr.mybrary.bookservice.book.persistence.bookInfo.Translator;
import kr.mybrary.bookservice.book.persistence.repository.AuthorRepository;
import kr.mybrary.bookservice.book.persistence.repository.BookCategoryRepository;
import kr.mybrary.bookservice.book.persistence.repository.BookRepository;
import kr.mybrary.bookservice.book.persistence.repository.TranslatorRepository;
import kr.mybrary.bookservice.book.persistence.bookInfo.BookTranslator;
import kr.mybrary.bookservice.book.persistence.bookInfo.Translator;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.retry.annotation.Backoff;
Expand Down Expand Up @@ -42,22 +43,38 @@ public void create(BookCreateServiceRequest request) {
checkBookAlreadyRegistered(request);
Book book = BookDtoMapper.INSTANCE.bookCreateRequestToEntity(request);

List<BookAuthor> bookAuthors = request.getAuthors().stream()
.map(r -> getAuthor(r.getAuthorId(), r.getName()))
.map(author -> BookAuthor.builder().author(author).build())
.toList();
book.addBookAuthor(getBookAuthors(request));
book.addBookTranslator(getBookTranslators(request));
book.assignCategory(getBookCategory(request.getCategoryId(), request.getCategory()));
book.updateAuthorWithComma(joiningAuthorWithComma(request));
book.updateTranslatorWithComma(joiningTranslatorWithComma(request));

bookRepository.save(book);
log.info("New Book Saved : {}, {}", book.getTitle(), book.getIsbn13());
}

private String joiningAuthorWithComma(BookCreateServiceRequest request) {
return request.getAuthors().stream().map(BookCreateServiceRequest.Author::getName)
.collect(Collectors.joining(", "));
}

List<BookTranslator> bookTranslators = request.getTranslators().stream()
private String joiningTranslatorWithComma(BookCreateServiceRequest request) {
return request.getTranslators().stream().map(BookCreateServiceRequest.Translator::getName)
.collect(Collectors.joining(", "));
}

private List<BookTranslator> getBookTranslators(BookCreateServiceRequest request) {
return request.getTranslators().stream()
.map(r -> getTranslator(r.getTranslatorId(), r.getName()))
.map(translator -> BookTranslator.builder().translator(translator).build())
.toList();
}

book.addBookAuthor(bookAuthors);
book.addBookTranslator(bookTranslators);
book.assignCategory(getBookCategory(request.getCategoryId(), request.getCategory()));

bookRepository.save(book);
log.info("New Book Saved : {}, {}", book.getTitle(), book.getIsbn13());
private List<BookAuthor> getBookAuthors(BookCreateServiceRequest request) {
return request.getAuthors().stream()
.map(r -> getAuthor(r.getAuthorId(), r.getName()))
.map(author -> BookAuthor.builder().author(author).build())
.toList();
}

private void checkBookAlreadyRegistered(BookCreateServiceRequest request) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ public interface BookDtoMapper {
@Mapping(target = "starRating", constant = "0")
@Mapping(target = "reviewCount", constant = "0")
@Mapping(target = "recommendationFeedCount", constant = "0")
@Mapping(target = "authors", constant = "")
@Mapping(target = "translators", constant = "")
@Mapping(target = "aladinStarRating", source = "starRating")
@Mapping(target = "aladinReviewCount", source = "reviewCount")
Book bookCreateRequestToEntity(BookCreateServiceRequest request);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import kr.mybrary.bookservice.book.persistence.bookInfo.BookAuthor;
import kr.mybrary.bookservice.book.persistence.bookInfo.BookCategory;
import kr.mybrary.bookservice.book.persistence.bookInfo.BookTranslator;
Expand All @@ -19,10 +22,6 @@
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import lombok.NoArgsConstructor;

@Entity
Expand Down Expand Up @@ -77,6 +76,9 @@ public class Book extends BaseEntity {
private Double aladinStarRating;
private Integer aladinReviewCount;

private String authors;
private String translators;

@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
private BookCategory bookCategory;

Expand Down Expand Up @@ -164,4 +166,12 @@ public void updateWhenDeleteReview(Double originStarRating) {
this.reviewCount--;
this.starRating -= originStarRating;
}

public void updateAuthorWithComma(String authors) {
this.authors = authors;
}

public void updateTranslatorWithComma(String translators) {
this.translators = translators;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public class RecommendationFeedOfUserViewModel {

private String content;
private List<RecommendationTargetOfUserModel> recommendationTargets;
private List<RecommendationFeedOfUserBookAuthorModel> bookAuthors;
private String bookAuthors;

private Long recommendationFeedId;
private Long myBookId;
Expand All @@ -30,10 +30,6 @@ public void setRecommendationTargets(List<RecommendationTargetOfUserModel> recom
this.recommendationTargets = recommendationTargetOfUserModels;
}

public void setBookAuthors(List<RecommendationFeedOfUserBookAuthorModel> bookAuthors) {
this.bookAuthors = bookAuthors;
}

@Getter
@Builder
@NoArgsConstructor
Expand All @@ -44,16 +40,4 @@ public static class RecommendationTargetOfUserModel {
private Long targetId;
private String targetName;
}

@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public static class RecommendationFeedOfUserBookAuthorModel {

private Long authorId;
private Integer aid;
private String name;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public class RecommendationFeedViewAllModel {

private String content;
private List<RecommendationTargetModel> recommendationTargets;
private List<BookAuthorModel> bookAuthors;
private String bookAuthors;

private String userId;

Expand All @@ -33,10 +33,6 @@ public void setRecommendationTargets(List<RecommendationTargetModel> recommendat
this.recommendationTargets = recommendationTargetModels;
}

public void setBookAuthors(List<BookAuthorModel> bookAuthorModels) {
this.bookAuthors = bookAuthorModels;
}

public void setInterested(boolean interested) {
this.interested = interested;
}
Expand All @@ -51,16 +47,4 @@ public static class RecommendationTargetModel {
private Long targetId;
private String targetName;
}

@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public static class BookAuthorModel {

private Long authorId;
private Integer aid;
private String name;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@
import static com.querydsl.core.types.dsl.Expressions.set;
import static kr.mybrary.bookservice.book.persistence.QBook.book;
import static kr.mybrary.bookservice.book.persistence.QBookInterest.bookInterest;
import static kr.mybrary.bookservice.book.persistence.bookInfo.QAuthor.author;
import static kr.mybrary.bookservice.book.persistence.bookInfo.QBookAuthor.bookAuthor;
import static kr.mybrary.bookservice.mybook.persistence.QMyBook.myBook;
import static kr.mybrary.bookservice.recommend.persistence.QRecommendationFeed.recommendationFeed;
import static kr.mybrary.bookservice.recommend.persistence.QRecommendationTarget.recommendationTarget;
Expand All @@ -22,10 +20,8 @@
import kr.mybrary.bookservice.recommend.persistence.model.RecommendationFeedOfBookViewModel;
import kr.mybrary.bookservice.recommend.persistence.model.RecommendationFeedOfBookViewModel.RecommendationTargetOfBookModel;
import kr.mybrary.bookservice.recommend.persistence.model.RecommendationFeedOfUserViewModel;
import kr.mybrary.bookservice.recommend.persistence.model.RecommendationFeedOfUserViewModel.RecommendationFeedOfUserBookAuthorModel;
import kr.mybrary.bookservice.recommend.persistence.model.RecommendationFeedOfUserViewModel.RecommendationTargetOfUserModel;
import kr.mybrary.bookservice.recommend.persistence.model.RecommendationFeedViewAllModel;
import kr.mybrary.bookservice.recommend.persistence.model.RecommendationFeedViewAllModel.BookAuthorModel;
import kr.mybrary.bookservice.recommend.persistence.model.RecommendationFeedViewAllModel.RecommendationTargetModel;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
Expand All @@ -48,7 +44,8 @@ public List<RecommendationFeedViewAllModel> getRecommendationFeedViewAll(Long re
book.isbn13.as("isbn13"),
book.thumbnailUrl.as("thumbnailUrl"),
book.holderCount.as("holderCount"),
book.interestCount.as("interestCount")
book.interestCount.as("interestCount"),
book.authors.as("bookAuthors")
))
.from(recommendationFeed)
.where(ltRecommendationFeedId(recommendationFeedId))
Expand All @@ -62,10 +59,6 @@ public List<RecommendationFeedViewAllModel> getRecommendationFeedViewAll(Long re
.map(RecommendationFeedViewAllModel::getRecommendationFeedId)
.toList();

List<Long> bookIds = models.stream()
.map(RecommendationFeedViewAllModel::getBookId)
.toList();

Map<Long, List<RecommendationTargetModel>> recommendationTargetModelMap = queryFactory
.select(
fields(RecommendationTargetModel.class,
Expand All @@ -80,30 +73,12 @@ public List<RecommendationFeedViewAllModel> getRecommendationFeedViewAll(Long re
recommendationTarget.targetName.as("targetName")
))));

Map<Long, List<BookAuthorModel>> bookAuthorModelMap = queryFactory
.select(
fields(BookAuthorModel.class,
author.id.as("authorId"),
author.aid.as("aid"),
author.name.as("name")
)
).from(bookAuthor)
.join(bookAuthor.author, author).on(bookAuthor.author.id.eq(author.id))
.where(bookAuthor.book.id.in(bookIds))
.transform(groupBy(bookAuthor.book.id)
.as(list(fields(BookAuthorModel.class,
author.id.as("authorId"),
author.aid.as("aid"),
author.name.as("name")
))));

Set<Long> interestedBookIdSet = queryFactory.select(book.id).from(bookInterest)
.where(bookInterest.userId.eq(userId))
.transform(groupBy(book.id).as(set(book.id))).keySet();

models.forEach(model -> {
model.setRecommendationTargets(recommendationTargetModelMap.getOrDefault(model.getRecommendationFeedId(), List.of()));
model.setBookAuthors(bookAuthorModelMap.getOrDefault(model.getBookId(), List.of()));
model.setInterested(interestedBookIdSet.contains(model.getBookId()));
});

Expand Down Expand Up @@ -137,7 +112,8 @@ public List<RecommendationFeedOfUserViewModel> getRecommendationFeedViewOfUserMo
book.id.as("bookId"),
book.title.as("title"),
book.isbn13.as("isbn13"),
book.thumbnailUrl.as("thumbnailUrl")
book.thumbnailUrl.as("thumbnailUrl"),
book.authors.as("bookAuthors")
))
.from(recommendationFeed)
.where(recommendationFeed.userId.eq(userId))
Expand All @@ -150,10 +126,6 @@ public List<RecommendationFeedOfUserViewModel> getRecommendationFeedViewOfUserMo
.map(RecommendationFeedOfUserViewModel::getRecommendationFeedId)
.toList();

List<Long> bookIds = models.stream()
.map(RecommendationFeedOfUserViewModel::getBookId)
.toList();

Map<Long, List<RecommendationTargetOfUserModel>> recommendationTargetModelMap = queryFactory
.select(
fields(RecommendationTargetOfUserModel.class,
Expand All @@ -168,26 +140,8 @@ public List<RecommendationFeedOfUserViewModel> getRecommendationFeedViewOfUserMo
recommendationTarget.targetName.as("targetName")
))));

Map<Long, List<RecommendationFeedOfUserBookAuthorModel>> bookAuthorModelMap = queryFactory
.select(
fields(RecommendationFeedOfUserBookAuthorModel.class,
author.id.as("authorId"),
author.aid.as("aid"),
author.name.as("name")
)
).from(bookAuthor)
.join(bookAuthor.author, author).on(bookAuthor.author.id.eq(author.id))
.where(bookAuthor.book.id.in(bookIds))
.transform(groupBy(bookAuthor.book.id)
.as(list(fields(RecommendationFeedOfUserBookAuthorModel.class,
author.id.as("authorId"),
author.aid.as("aid"),
author.name.as("name")
))));

models.forEach(model -> {
model.setRecommendationTargets(recommendationTargetModelMap.getOrDefault(model.getRecommendationFeedId(), List.of()));
model.setBookAuthors(bookAuthorModelMap.getOrDefault(model.getBookId(), List.of()));
});

return models;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package kr.mybrary.bookservice.recommend.presentation.dto.response;

import java.util.Arrays;
import java.util.List;
import kr.mybrary.bookservice.global.util.DateUtils;
import kr.mybrary.bookservice.recommend.persistence.model.RecommendationFeedOfUserViewModel;
import kr.mybrary.bookservice.recommend.persistence.model.RecommendationFeedOfUserViewModel.RecommendationFeedOfUserBookAuthorModel;
import kr.mybrary.bookservice.recommend.persistence.model.RecommendationFeedOfUserViewModel.RecommendationTargetOfUserModel;
import lombok.Builder;
import lombok.Getter;
Expand All @@ -28,8 +28,7 @@ public static RecommendationFeedOfUserViewResponse of(List<RecommendationFeedOfU
.createdAt(DateUtils.toDotFormatYYYYMMDD(recommendationFeed.getCreatedAt()))
.recommendationTargetNames(recommendationFeed.getRecommendationTargets().stream()
.map(RecommendationTargetOfUserModel::getTargetName).toList())
.authors(recommendationFeed.getBookAuthors().stream().map(
RecommendationFeedOfUserBookAuthorModel::getName).toList())
.authors(getAuthorList(recommendationFeed))
.build()).toList()).build();
}

Expand All @@ -49,4 +48,13 @@ public static class RecommendationFeedElement {
private List<String> recommendationTargetNames;
private List<String> authors;
}

private static List<String> getAuthorList(RecommendationFeedOfUserViewModel recommendationFeed) {
if (recommendationFeed.getBookAuthors() == null) {
return List.of();
}

return Arrays.stream(recommendationFeed.getBookAuthors().split(", "))
.toList();
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package kr.mybrary.bookservice.recommend.presentation.dto.response;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import kr.mybrary.bookservice.client.user.dto.response.UserInfoServiceResponse.UserInfo;
import kr.mybrary.bookservice.recommend.persistence.model.RecommendationFeedViewAllModel;
import kr.mybrary.bookservice.recommend.persistence.model.RecommendationFeedViewAllModel.BookAuthorModel;
import kr.mybrary.bookservice.recommend.persistence.model.RecommendationFeedViewAllModel.RecommendationTargetModel;
import lombok.Builder;
import lombok.Getter;
Expand Down Expand Up @@ -59,9 +59,7 @@ public static RecommendationFeedViewAllResponse of(List<RecommendationFeedViewAl
.title(recommendationFeed.getTitle())
.thumbnailUrl(recommendationFeed.getThumbnailUrl())
.isbn13(recommendationFeed.getIsbn13())
.authors(recommendationFeed.getBookAuthors().stream()
.map(BookAuthorModel::getName)
.toList())
.authors(getAuthorList(recommendationFeed))
.holderCount(recommendationFeed.getHolderCount())
.interestCount(recommendationFeed.getInterestCount())
.interested(recommendationFeed.getInterested())
Expand All @@ -71,4 +69,13 @@ public static RecommendationFeedViewAllResponse of(List<RecommendationFeedViewAl
.lastRecommendationFeedId(lastRecommendationFeedId)
.build();
}

private static List<String> getAuthorList(RecommendationFeedViewAllModel recommendationFeed) {
if (recommendationFeed.getBookAuthors() == null) {
return List.of();
}

return Arrays.stream(recommendationFeed.getBookAuthors().split(", "))
.toList();
}
}
Loading

0 comments on commit 93b6c64

Please sign in to comment.