Skip to content

Commit

Permalink
Merge pull request #70 from MoneyMakersClub/develop
Browse files Browse the repository at this point in the history
[Merge] develop into deploy
  • Loading branch information
jud1thDev authored Nov 10, 2024
2 parents 2e9440e + 1159ee5 commit dabede8
Show file tree
Hide file tree
Showing 15 changed files with 202 additions and 190 deletions.
Original file line number Diff line number Diff line change
@@ -1,18 +1,15 @@
package com.mmc.bookduck.domain.badge.service;

import com.mmc.bookduck.domain.archive.repository.ArchiveRepository;
import com.mmc.bookduck.domain.archive.repository.ExcerptRepository;
import com.mmc.bookduck.domain.archive.repository.ReviewRepository;
import com.mmc.bookduck.domain.archive.service.ArchiveService;
import com.mmc.bookduck.domain.badge.dto.common.UserBadgeUnitDto;
import com.mmc.bookduck.domain.badge.dto.response.UserBadgeListResponseDto;
import com.mmc.bookduck.domain.badge.entity.Badge;
import com.mmc.bookduck.domain.badge.entity.BadgeType;
import com.mmc.bookduck.domain.badge.entity.UserBadge;
import com.mmc.bookduck.domain.badge.repository.UserBadgeRepository;
import com.mmc.bookduck.domain.book.service.UserBookService;
import com.mmc.bookduck.domain.onelinerating.entity.OneLineRating;
import com.mmc.bookduck.domain.onelinerating.repository.OneLineRatingRepository;
import com.mmc.bookduck.domain.oneline.repository.OneLineRepository;
import com.mmc.bookduck.domain.user.entity.User;
import com.mmc.bookduck.domain.user.service.UserGrowthService;
import com.mmc.bookduck.domain.user.service.UserService;
Expand All @@ -29,7 +26,7 @@
@RequiredArgsConstructor
public class UserBadgeService {
private final UserBadgeRepository userBadgeRepository;
private final OneLineRatingRepository oneLineRatingRepository;
private final OneLineRepository oneLineRepository;
private final ReviewRepository reviewRepository;
private final ExcerptRepository excerptRepository;
private final UserService userService;
Expand Down Expand Up @@ -63,7 +60,7 @@ public UserBadgeListResponseDto getUserBadges(Long userId) {
// 각 분야별 사용자 상태 가져오기
long currentReadCount = userBookService.countFinishedUserBooksByUser(user);
long currentArchiveCount = reviewRepository.countByUser(user) + excerptRepository.countByUser(user);
long currentOneLineCount = oneLineRatingRepository.countAllByUser(user);
long currentOneLineCount = oneLineRepository.countAllByUser(user);
long currentLevel = userGrowthService.getUserGrowthByUserId(user.getUserId()).getLevel();

return new UserBadgeListResponseDto(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,32 +51,34 @@ public ResponseEntity<UserBookResponseDto> updateUserBookStatus(@PathVariable fi
}


@Operation(summary = "서재 책 목록 조회", description = "사용자의 서재 책 전체 목록을 조회합니다.")
@GetMapping("/list")
public ResponseEntity<UserBookListResponseDto> getAllUserBook(@RequestParam(name = "sort") final String sort){

return ResponseEntity.status(HttpStatus.OK)
.body(userBookService.getAllUserBook(sort));
}


@Operation(summary = "상태별 서재 책 목록 조회", description = "사용자의 서재 책 목록을 상태별로 조회합니다.")
@GetMapping("/filter")
public ResponseEntity<UserBookListResponseDto> getStatusUserBook(@RequestParam(name = "status") final List<String> statusList,
@RequestParam(name = "sort") final String sort){

return ResponseEntity.status(HttpStatus.OK)
.body(userBookService.getStatusUserBook(statusList, sort));
}


@Operation(summary = "서재 책 상세-기본 정보 조회", description = "사용자의 서재 책의 기본 정보를 상세 조회합니다.(책 기본정보 + 현재 사용자의 별점&한줄평)")
@GetMapping("/{userbookId}")
public ResponseEntity<BookInfoBasicResponseDto> getUserBookInfoBasic(@PathVariable(name = "userbookId") final Long userbookId){

return ResponseEntity.status(HttpStatus.OK)
.body(userBookService.getUserBookInfoBasic(userbookId));
}
// 수정 필요
// @Operation(summary = "서재 책 목록 조회", description = "사용자의 서재 책 전체 목록을 조회합니다.")
// @GetMapping("/list")
// public ResponseEntity<UserBookListResponseDto> getAllUserBook(@RequestParam(name = "sort") final String sort){
//
// return ResponseEntity.status(HttpStatus.OK)
// .body(userBookService.getAllUserBook(sort));
// }
//
//
// @Operation(summary = "상태별 서재 책 목록 조회", description = "사용자의 서재 책 목록을 상태별로 조회합니다.")
// @GetMapping("/filter")
// public ResponseEntity<UserBookListResponseDto> getStatusUserBook(@RequestParam(name = "status") final List<String> statusList,
// @RequestParam(name = "sort") final String sort){
//
// return ResponseEntity.status(HttpStatus.OK)
// .body(userBookService.getStatusUserBook(statusList, sort));
// }


// 수정 필요
// @Operation(summary = "서재 책 상세-기본 정보 조회", description = "사용자의 서재 책의 기본 정보를 상세 조회합니다.(책 기본정보 + 현재 사용자의 별점&한줄평)")
// @GetMapping("/{userbookId}")
// public ResponseEntity<BookInfoBasicResponseDto> getUserBookInfoBasic(@PathVariable(name = "userbookId") final Long userbookId){
//
// return ResponseEntity.status(HttpStatus.OK)
// .body(userBookService.getUserBookInfoBasic(userbookId));
// }


@Operation(summary = "서재 책 상세-추가 정보 조회", description = "사용자의 서재 책의 추가 정보를 상세 조회합니다.(현재 책에 대한 다른 사용자들의 별점&한줄평 목록 3개)")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
package com.mmc.bookduck.domain.book.dto.common;

import com.mmc.bookduck.domain.onelinerating.entity.OneLineRating;
import com.mmc.bookduck.domain.oneline.entity.OneLine;

public record BookRatingUnitDto(
String nickname,
double rating,
// double rating,
String oneLine
) {
public static BookRatingUnitDto from(OneLineRating oneLineRating) {
public static BookRatingUnitDto from(OneLine oneLine) {
return new BookRatingUnitDto(
oneLineRating.getUser().getNickname(),
oneLineRating.getRating(),
oneLineRating.getOneLineContent()
oneLine.getUser().getNickname(),
// oneLine.getRating(),
oneLine.getOneLineContent()
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ public class UserBook extends BaseTimeEntity {
@NotNull
private ReadStatus readStatus;

private double rating;

@ColumnDefault("false")
private boolean isFinishedExpGiven;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,9 @@ public interface UserBookRepository extends JpaRepository<UserBook, Long> {
List<UserBook> findAllByUserOrderByTitle(User user);

//별점순
@Query("SELECT ub From UserBook ub LEFT JOIN OneLineRating r ON r.userBook = ub WHERE ub.user = :user ORDER BY r.rating DESC")
List<UserBook> findByUserOrderByRating(User user);
// 수정 필요
// @Query("SELECT ub From UserBook ub LEFT JOIN OneLineRating r ON r.userBook = ub WHERE ub.user = :user ORDER BY r.rating DESC")
// List<UserBook> findByUserOrderByRating(User user);

List<UserBook> findAllByBookInfo(BookInfo bookInfo);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
import com.mmc.bookduck.domain.book.entity.ReadStatus;
import com.mmc.bookduck.domain.book.entity.UserBook;
import com.mmc.bookduck.domain.book.repository.UserBookRepository;
import com.mmc.bookduck.domain.onelinerating.entity.OneLineRating;
import com.mmc.bookduck.domain.onelinerating.repository.OneLineRatingRepository;
import com.mmc.bookduck.domain.oneline.entity.OneLine;
import com.mmc.bookduck.domain.oneline.repository.OneLineRepository;
import com.mmc.bookduck.domain.user.entity.User;
import com.mmc.bookduck.domain.user.service.UserService;
import com.mmc.bookduck.global.exception.CustomException;
Expand All @@ -35,7 +35,7 @@ public class UserBookService {
private final UserBookRepository userBookRepository;
private final GenreService genreService;
private final UserService userService;
private final OneLineRatingRepository oneLineRatingRepository;
private final OneLineRepository oneLineRepository;

//customBook 추가
public UserBook createCustomBookEntity(CustomBookRequestDto requestDto) {
Expand Down Expand Up @@ -162,74 +162,77 @@ public UserBook findUserBookById(Long userBookId){
}

// 서재 책 전체 조회
public UserBookListResponseDto getAllUserBook(String sort){

User user = userService.getCurrentUser();
List<UserBook> userBookList = sortUserBook(user, sort);

List<UserBookResponseDto> dtos = new ArrayList<>();
for(UserBook book : userBookList){
dtos.add(UserBookResponseDto.from(book));
}
return new UserBookListResponseDto(dtos);
}
// 수정 필요
// public UserBookListResponseDto getAllUserBook(String sort){
//
// User user = userService.getCurrentUser();
// List<UserBook> userBookList = sortUserBook(user, sort);
//
// List<UserBookResponseDto> dtos = new ArrayList<>();
// for(UserBook book : userBookList){
// dtos.add(UserBookResponseDto.from(book));
// }
// return new UserBookListResponseDto(dtos);
// }

// 서재 책 상태별 조회
public UserBookListResponseDto getStatusUserBook(List<String> statusList, String sort){

if(statusList.isEmpty()){
throw new CustomException(ErrorCode.INVALID_ENUM_VALUE);
}

List<ReadStatus> readStatusList = new ArrayList<>();
try {
for(String status : statusList){
readStatusList.add(ReadStatus.valueOf(status));
}
} catch (IllegalArgumentException e) {
throw new CustomException(ErrorCode.INVALID_ENUM_VALUE);
}

User user = userService.getCurrentUser();
List<UserBook> sorteduserBookList = sortUserBook(user, sort);

List<UserBook> userBookList = new ArrayList<>();
for(UserBook userBook : sorteduserBookList){
for(ReadStatus status : readStatusList){
if(userBook.getReadStatus().equals(status)){
userBookList.add(userBook);
}
}
}

List<UserBookResponseDto> dtos = new ArrayList<>();
for(UserBook book : userBookList){
dtos.add(UserBookResponseDto.from(book));
}
return new UserBookListResponseDto(dtos);
}
// 수정 필요
// public UserBookListResponseDto getStatusUserBook(List<String> statusList, String sort){
//
// if(statusList.isEmpty()){
// throw new CustomException(ErrorCode.INVALID_ENUM_VALUE);
// }
//
// List<ReadStatus> readStatusList = new ArrayList<>();
// try {
// for(String status : statusList){
// readStatusList.add(ReadStatus.valueOf(status));
// }
// } catch (IllegalArgumentException e) {
// throw new CustomException(ErrorCode.INVALID_ENUM_VALUE);
// }
//
// User user = userService.getCurrentUser();
// List<UserBook> sorteduserBookList = sortUserBook(user, sort);
//
// List<UserBook> userBookList = new ArrayList<>();
// for(UserBook userBook : sorteduserBookList){
// for(ReadStatus status : readStatusList){
// if(userBook.getReadStatus().equals(status)){
// userBookList.add(userBook);
// }
// }
// }
//
// List<UserBookResponseDto> dtos = new ArrayList<>();
// for(UserBook book : userBookList){
// dtos.add(UserBookResponseDto.from(book));
// }
// return new UserBookListResponseDto(dtos);
// }


// 서재책 상세보기 - 기본정보
@Transactional(readOnly = true)
public BookInfoBasicResponseDto getUserBookInfoBasic(Long userBookId) {
UserBook userBook = findUserBookById(userBookId);

String koreanGenreName = genreService.genreNameToKorean(userBook.getBookInfo().getGenre());
BookInfoDetailDto detailDto = BookInfoDetailDto.from(userBook.getBookInfo(), koreanGenreName);

OneLineRating oneLineRating = oneLineRatingRepository.findByUserBook(userBook)
.orElse(null);

double ratingAverage = getRatingAverage(findAllUserBookByBookInfo(userBook.getBookInfo()));

return new BookInfoBasicResponseDto(
ratingAverage,
oneLineRating!=null ? oneLineRating.getOneLineContent() : null,
oneLineRating!=null ? oneLineRating.getRating() : null,
userBook.getReadStatus(),
detailDto);
}
// 수정필요
// @Transactional(readOnly = true)
// public BookInfoBasicResponseDto getUserBookInfoBasic(Long userBookId) {
// UserBook userBook = findUserBookById(userBookId);
//
// String koreanGenreName = genreService.genreNameToKorean(userBook.getBookInfo().getGenre());
// BookInfoDetailDto detailDto = BookInfoDetailDto.from(userBook.getBookInfo(), koreanGenreName);
//
// OneLine oneLine = oneLineRepository.findByUserBook(userBook)
// .orElse(null);
//
// double ratingAverage = getRatingAverage(findAllUserBookByBookInfo(userBook.getBookInfo()));
//
// return new BookInfoBasicResponseDto(
// ratingAverage,
// oneLine !=null ? oneLine.getOneLineContent() : null,
// oneLine !=null ? oneLine.getRating() : null,
// userBook.getReadStatus(),
// detailDto);
// }

// 서재 책 상세보기 - 추가정보
@Transactional(readOnly = true)
Expand All @@ -241,7 +244,7 @@ public BookInfoAdditionalResponseDto getUserBookInfoAdditional(Long userBookId)
if (!sameBookInfo_userBookList.isEmpty()) {
for (UserBook book : sameBookInfo_userBookList) {
if (!book.equals(userBook)) {
oneLineRatingRepository.findByUserBook(book).ifPresent(oneLineRating -> oneLineList.add(
oneLineRepository.findByUserBook(book).ifPresent(oneLineRating -> oneLineList.add(
BookRatingUnitDto.from(oneLineRating)));
}
}
Expand All @@ -250,40 +253,42 @@ public BookInfoAdditionalResponseDto getUserBookInfoAdditional(Long userBookId)
}


@Transactional(readOnly = true)
public List<UserBook> sortUserBook(User user, String sort){

if(sort.equals("latest")){
return userBookRepository.findAllByUserOrderByCreatedTimeDesc(user);
}else if(sort.equals("rating")){
return userBookRepository.findByUserOrderByRating(user);
}else if(sort.equals("title")){
return userBookRepository.findAllByUserOrderByTitle(user);
}else{
throw new CustomException(ErrorCode.ERROR);
}
}
// 수정 필요
// @Transactional(readOnly = true)
// public List<UserBook> sortUserBook(User user, String sort){
//
// if(sort.equals("latest")){
// return userBookRepository.findAllByUserOrderByCreatedTimeDesc(user);
// }else if(sort.equals("rating")){
// return userBookRepository.findByUserOrderByRating(user);
// }else if(sort.equals("title")){
// return userBookRepository.findAllByUserOrderByTitle(user);
// }else{
// throw new CustomException(ErrorCode.ERROR);
// }
// }

@Transactional(readOnly = true)
public List<UserBook> findAllUserBookByBookInfo(BookInfo bookInfo){
return userBookRepository.findAllByBookInfo(bookInfo);
}

@Transactional(readOnly = true)
public double getRatingAverage(List<UserBook> userBookList) {

double totalRating = 0.0;
int count = 0;

for(UserBook book : userBookList){
Optional<OneLineRating> oneLineRating = oneLineRatingRepository.findByUserBook(book);
if (oneLineRating.isPresent()) {
totalRating += oneLineRating.get().getRating();
count++;
}
}
return count > 0 ? totalRating / count : 0.0;
}
// 수정 필요
// @Transactional(readOnly = true)
// public double getRatingAverage(List<UserBook> userBookList) {
//
// double totalRating = 0.0;
// int count = 0;
//
// for(UserBook book : userBookList){
// Optional<OneLine> oneLineRating = oneLineRepository.findByUserBook(book);
// if (oneLineRating.isPresent()) {
// totalRating += oneLineRating.get().getRating();
// count++;
// }
// }
// return count > 0 ? totalRating / count : 0.0;
// }

@Transactional(readOnly = true)
public List<UserBook> findAllByUser(User user) {
Expand Down
Loading

0 comments on commit dabede8

Please sign in to comment.