diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/GameBean/GameGetBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/GameBean/GameGetBean.java index 5744844c..3449d60b 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/GameBean/GameGetBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/GameBean/GameGetBean.java @@ -19,13 +19,13 @@ public class GameGetBean { public GameGetByGameIdResponseDTO exec(Long gameId) { - GameDAO gameDAO = gameGetSmallBean.exec(gameId); + GameDAO findGame = gameGetSmallBean.exec(gameId); - gameViewCountUpdateSmallBean.exec(gameDAO); + gameViewCountUpdateSmallBean.exec(findGame); //Review 평균 가져오기 - Double starAvg = reviewGetAvgStarByGameIdSmallBean.exec(gameDAO.getGameId()); + Double starAvg = reviewGetAvgStarByGameIdSmallBean.exec(findGame); - return GameGetByGameIdResponseDTO.of(gameDAO, starAvg); + return GameGetByGameIdResponseDTO.of(findGame, starAvg); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/GameBean/GameGetListByPlayedUser.java b/src/main/java/com/example/jsgamesbackendmain/Bean/GameBean/GameGetListByPlayedUser.java index fba16746..75627a59 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/GameBean/GameGetListByPlayedUser.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/GameBean/GameGetListByPlayedUser.java @@ -1,22 +1,30 @@ package com.example.jsgamesbackendmain.Bean.GameBean; import com.example.jsgamesbackendmain.Bean.SmallBean.GameBean.GameGetListByPlayedUserSmallBean; +import com.example.jsgamesbackendmain.Bean.SmallBean.UserBean.UserGetByIdSmallBean; +import com.example.jsgamesbackendmain.Model.DAO.UserDAO; import com.example.jsgamesbackendmain.Model.DTO.Game.Response.GameListResponseDTO; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Component; import java.util.List; +import java.util.stream.Collectors; @Component @RequiredArgsConstructor public class GameGetListByPlayedUser { private final GameGetListByPlayedUserSmallBean gameGetListByPlayedUserSmallBean; + private final UserGetByIdSmallBean userGetByIdSmallBean; - public List exec(String userId, Long page, Long size) { - PageRequest request = PageRequest.of(page.intValue(), size.intValue()); + public List exec(String userId, Integer page, Integer size) { + PageRequest request = PageRequest.of(page, size); - return gameGetListByPlayedUserSmallBean.exec(userId, request); + UserDAO findUser = userGetByIdSmallBean.exec(userId); + + return gameGetListByPlayedUserSmallBean.exec(findUser, request) + .stream().map(GameListResponseDTO::of) + .collect(Collectors.toList()); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/GameBean/GameListBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/GameBean/GameListBean.java index 8752446e..cd76ec1f 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/GameBean/GameListBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/GameBean/GameListBean.java @@ -1,42 +1,47 @@ package com.example.jsgamesbackendmain.Bean.GameBean; +import com.example.jsgamesbackendmain.Bean.SmallBean.GameBean.GameListOrderByCreateAtSmallBean; +import com.example.jsgamesbackendmain.Bean.SmallBean.GameBean.GameListOrderByLogCountDescSmallBean; +import com.example.jsgamesbackendmain.Bean.SmallBean.GameBean.GameListOrderByReviewCountSmallBean; +import com.example.jsgamesbackendmain.Bean.SmallBean.GameBean.GameListOrderByViewCountSmallBean; +import com.example.jsgamesbackendmain.Model.DAO.GameDAO; import com.example.jsgamesbackendmain.Model.DTO.Game.Response.GameListResponseDTO; -import com.example.jsgamesbackendmain.Repository.GameRepository; +import com.example.jsgamesbackendmain.Model.ENUM.GameSort; import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Component; import java.util.List; -import java.util.stream.Collectors; @Component @RequiredArgsConstructor public class GameListBean { - private final GameRepository gameRepository; - - public List exec() { - return gameRepository.findAll() - .stream() - .map(GameListResponseDTO::of) - .collect(Collectors.toList()); - } - - public List exec(Long page, Long size) { - PageRequest pageRequest = PageRequest.of(page.intValue(), size.intValue()); - - return gameRepository.findAllByOrderByViewCountDescGameIdAsc(pageRequest).toList() - .stream() - .map(GameListResponseDTO::of) - .collect(Collectors.toList()); - } - - public List exec(Long userId, Long page, Long size) { - PageRequest pageRequest = PageRequest.of(page.intValue(), size.intValue()); - - return gameRepository.findAllByOrderByViewCountDescGameIdAsc(pageRequest) - .toList() - .stream() - .map(GameListResponseDTO::of) - .collect(Collectors.toList()); + private final GameListOrderByViewCountSmallBean gameListOrderByViewCountSmallBean; + private final GameListOrderByLogCountDescSmallBean gameListOrderByLogCountDescSmallBean; + private final GameListOrderByCreateAtSmallBean gameListOrderByCreateAtSmallBean; + private final GameListOrderByReviewCountSmallBean gameListOrderByReviewCountSmallBean; + + public List exec(Integer page, Integer size, GameSort sort) { + PageRequest pageRequest = PageRequest.of(page, size); + + Page gamePageList = null; + + switch (sort) { + case VIEW_COUNT: + gamePageList = gameListOrderByViewCountSmallBean.exec(pageRequest); + break; + case LOG_COUNT: + gamePageList = gameListOrderByLogCountDescSmallBean.exec(pageRequest); + break; + case RECENT: + gamePageList = gameListOrderByCreateAtSmallBean.exec(pageRequest); + break; + case REVIEW_COUNT: + gamePageList = gameListOrderByReviewCountSmallBean.exec(pageRequest); + break; + } + + return GameListResponseDTO.listOf(gamePageList); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/GameBean/GamePostBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/GameBean/GamePostBean.java index 9824460e..2097ddad 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/GameBean/GamePostBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/GameBean/GamePostBean.java @@ -1,7 +1,10 @@ package com.example.jsgamesbackendmain.Bean.GameBean; -import com.example.jsgamesbackendmain.Model.DTO.Game.GameDTO; +import com.example.jsgamesbackendmain.Bean.SmallBean.UserBean.UserGetByIdSmallBean; +import com.example.jsgamesbackendmain.Model.DAO.GameDAO; +import com.example.jsgamesbackendmain.Model.DAO.UserDAO; import com.example.jsgamesbackendmain.Model.DTO.Game.Request.GameCreateRequestDTO; +import com.example.jsgamesbackendmain.Model.DTO.Game.Response.GameCreateResultDTO; import com.example.jsgamesbackendmain.Repository.GameRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -10,7 +13,14 @@ @RequiredArgsConstructor public class GamePostBean { private final GameRepository gameRepository; - public GameDTO exec(GameCreateRequestDTO gameCreateRequestDTO) { - return GameDTO.of(gameRepository.save(gameCreateRequestDTO.toDAO())); + private final UserGetByIdSmallBean userGetByIdSmallBean; + public GameCreateResultDTO exec(GameCreateRequestDTO gameCreateRequestDTO) { + UserDAO findUser = userGetByIdSmallBean.exec(gameCreateRequestDTO.getUserId()); + + GameDAO newGame = gameCreateRequestDTO.toDAO(); + + newGame.setUser(findUser); + + return GameCreateResultDTO.of(gameRepository.save(newGame)); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/HelpfulBean/HelpfulDeleteBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/HelpfulBean/HelpfulDeleteBean.java index bbd51415..2749117e 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/HelpfulBean/HelpfulDeleteBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/HelpfulBean/HelpfulDeleteBean.java @@ -1,6 +1,10 @@ package com.example.jsgamesbackendmain.Bean.HelpfulBean; import com.example.jsgamesbackendmain.Bean.SmallBean.HelpfulBean.HelpfulDeleteSmallBean; +import com.example.jsgamesbackendmain.Bean.SmallBean.ReviewBean.ReviewGetByIdSmallBean; +import com.example.jsgamesbackendmain.Bean.SmallBean.UserBean.UserGetByIdSmallBean; +import com.example.jsgamesbackendmain.Model.DAO.ReviewDAO; +import com.example.jsgamesbackendmain.Model.DAO.UserDAO; import com.example.jsgamesbackendmain.Model.DTO.StateResponseDTO; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -9,9 +13,14 @@ @RequiredArgsConstructor public class HelpfulDeleteBean { private final HelpfulDeleteSmallBean helpfulDeleteSmallBean; + private final UserGetByIdSmallBean userGetByIdSmallBean; + private final ReviewGetByIdSmallBean reviewGetByIdSmallBean; public StateResponseDTO exec(String userId, Long reviewId) { - helpfulDeleteSmallBean.exec(userId, reviewId); + UserDAO findUser = userGetByIdSmallBean.exec(userId); + ReviewDAO findReview = reviewGetByIdSmallBean.exec(reviewId); + + helpfulDeleteSmallBean.exec(findUser, findReview); return new StateResponseDTO(true); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/HelpfulBean/HelpfulGetBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/HelpfulBean/HelpfulGetBean.java index 5d46c311..0df1ee0e 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/HelpfulBean/HelpfulGetBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/HelpfulBean/HelpfulGetBean.java @@ -1,6 +1,10 @@ package com.example.jsgamesbackendmain.Bean.HelpfulBean; import com.example.jsgamesbackendmain.Bean.SmallBean.HelpfulBean.HelpfulGetSmallBean; +import com.example.jsgamesbackendmain.Bean.SmallBean.ReviewBean.ReviewGetByIdSmallBean; +import com.example.jsgamesbackendmain.Bean.SmallBean.UserBean.UserGetByIdSmallBean; +import com.example.jsgamesbackendmain.Model.DAO.ReviewDAO; +import com.example.jsgamesbackendmain.Model.DAO.UserDAO; import com.example.jsgamesbackendmain.Model.DTO.Helpful.HelpfulGetResponseDTO; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -9,9 +13,14 @@ @RequiredArgsConstructor public class HelpfulGetBean { private final HelpfulGetSmallBean helpfulGetSmallBean; + private final UserGetByIdSmallBean userGetByIdSmallBean; + private final ReviewGetByIdSmallBean reviewGetByIdSmallBean; public HelpfulGetResponseDTO exec(String userId, Long reviewId) { - boolean exec = helpfulGetSmallBean.exec(userId, reviewId); + UserDAO findUser = userGetByIdSmallBean.exec(userId); + ReviewDAO findReview = reviewGetByIdSmallBean.exec(reviewId); + + boolean exec = helpfulGetSmallBean.exec(findUser, findReview); return HelpfulGetResponseDTO.builder() diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/HelpfulBean/HelpfulPostBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/HelpfulBean/HelpfulPostBean.java index 53f541d2..b2b0a624 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/HelpfulBean/HelpfulPostBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/HelpfulBean/HelpfulPostBean.java @@ -1,6 +1,10 @@ package com.example.jsgamesbackendmain.Bean.HelpfulBean; import com.example.jsgamesbackendmain.Bean.SmallBean.HelpfulBean.HelpfulPostSmallBean; +import com.example.jsgamesbackendmain.Bean.SmallBean.ReviewBean.ReviewGetByIdSmallBean; +import com.example.jsgamesbackendmain.Bean.SmallBean.UserBean.UserGetByIdSmallBean; +import com.example.jsgamesbackendmain.Model.DAO.ReviewDAO; +import com.example.jsgamesbackendmain.Model.DAO.UserDAO; import com.example.jsgamesbackendmain.Model.DTO.StateResponseDTO; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -10,6 +14,7 @@ public class HelpfulPostBean { private final HelpfulPostSmallBean helpfulPostSmallBean; public StateResponseDTO exec(String userId, Long reviewId) { + helpfulPostSmallBean.exec(userId, reviewId); return new StateResponseDTO(true); } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/ImageBean/S3SetImageBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/ImageBean/S3SetImageBean.java new file mode 100644 index 00000000..c0b1b59a --- /dev/null +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/ImageBean/S3SetImageBean.java @@ -0,0 +1,17 @@ +package com.example.jsgamesbackendmain.Bean.ImageBean; + +import com.example.jsgamesbackendmain.Bean.SmallBean.ImageBean.S3SetSmallBean; +import com.example.jsgamesbackendmain.Model.DTO.StateResponseDTO; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class S3SetImageBean { + private final S3SetSmallBean s3SetSmallBean; + + public StateResponseDTO exec() { + s3SetSmallBean.exec(); + return new StateResponseDTO(true); + } +} diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/LogBean/LogGetByGamIdUserIdBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/LogBean/LogGetByGamIdUserIdBean.java index a8fc8fa4..ac7e4eae 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/LogBean/LogGetByGamIdUserIdBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/LogBean/LogGetByGamIdUserIdBean.java @@ -29,7 +29,7 @@ public LogGetByGameIdUserIdResponseDTO exec(Long gameId, String userId) { UserDAO userDAO = userGetByIdSmallBean.exec(userId); // LogDAO 조회 - LogDAO logDAO = logGetByGameIdUserIdSmallBean.exec(gameDAO, userId); + LogDAO logDAO = logGetByGameIdUserIdSmallBean.exec(gameDAO, userDAO); // rank 조회 Long rank = logGetRankSmallBean.exec(gameDAO, logDAO); diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/LogBean/LogGetByGameIdBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/LogBean/LogGetByGameIdBean.java index 4a7725d5..547bfa2e 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/LogBean/LogGetByGameIdBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/LogBean/LogGetByGameIdBean.java @@ -3,11 +3,13 @@ import com.example.jsgamesbackendmain.Bean.SmallBean.GameBean.GameGetSmallBean; import com.example.jsgamesbackendmain.Bean.SmallBean.LogBean.LogGetByGameSmallBean; import com.example.jsgamesbackendmain.Model.DAO.GameDAO; +import com.example.jsgamesbackendmain.Model.DAO.LogDAO; import com.example.jsgamesbackendmain.Model.DTO.Log.Response.LogGetByGameIdResponseDTO; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; import java.util.List; +import java.util.stream.Collectors; @Component @RequiredArgsConstructor @@ -20,7 +22,9 @@ public List exec(Long gameId, Integer page, Integer s GameDAO gameDAO = gameGetSmallBean.exec(gameId); - return logGetByGameSmallBean.exec(gameDAO, page, size); + return logGetByGameSmallBean.exec(gameDAO, page, size).stream() + .map(LogGetByGameIdResponseDTO::of) + .collect(Collectors.toList()); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/LogBean/LogGetByUserIdBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/LogBean/LogGetByUserIdBean.java index 079e11da..02bb1b0e 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/LogBean/LogGetByUserIdBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/LogBean/LogGetByUserIdBean.java @@ -16,7 +16,7 @@ public class LogGetByUserIdBean { private final UserGetByIdSmallBean userValidationSmallBean; - public List exec(String userId, Long page, Long size) { + public List exec(String userId, Integer page, Integer size) { //userId 유효성 확인 UserDAO user = userValidationSmallBean.exec(userId); diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/LogBean/LogPostBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/LogBean/LogPostBean.java index adbb87a2..a70cf19e 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/LogBean/LogPostBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/LogBean/LogPostBean.java @@ -32,25 +32,23 @@ public class LogPostBean { public LogPostResponseDTO exec(LogPostRequestDTO logPostRequestDTO) { // game found - GameDAO game = gameGetSmallBean.exec(logPostRequestDTO.getGameId()); + GameDAO findGame = gameGetSmallBean.exec(logPostRequestDTO.getGameId()); // user found - UserDAO user = userValidationSmallBean.exec(logPostRequestDTO.getUserId()); - - // get top log - Optional preTopLog = logGetByGameSmallBean.exec(game, 0, 1).stream().findAny(); + UserDAO findUser = userValidationSmallBean.exec(logPostRequestDTO.getUserId()); // log save - LogDAO savedLogDAO = logSaveSmallBean.exec(logPostRequestDTO.toDAO()); + LogDAO newLog = logPostRequestDTO.toDAO(); + newLog.setGame(findGame); + newLog.setUser(findUser); + LogDAO savedLog = logSaveSmallBean.exec(newLog); - // get top log - Optional nextTopLog = logGetByGameSmallBean.exec(game, 0, 1).stream().findAny(); // log catch top change - Boolean isChange = logCatchTopChange.exec(preTopLog, nextTopLog); + Boolean isChange = logCatchTopChange.exec(findGame); // 여기서 이벤트 처리하면 됨!!!!! - return LogPostResponseDTO.of(savedLogDAO, user); + return LogPostResponseDTO.of(savedLog); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/RankBean/RankGetBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/RankBean/RankGetBean.java index 6b5cbd51..27066928 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/RankBean/RankGetBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/RankBean/RankGetBean.java @@ -17,7 +17,7 @@ public class RankGetBean { private final RankGetTop100SmallBean rankGetTop100SmallBean; private final RankLastUpdatedSmallBean rankLastUpdatedSmallBean; - public RankGetResponseDTO exec(Long page, Long size) { + public RankGetResponseDTO exec(Integer page, Integer size) { // RankTop100 DAO to Rank return RankGetResponseDTO diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/RankBean/RankGetByMajorBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/RankBean/RankGetByMajorBean.java index 9dcc33d8..a9b1e081 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/RankBean/RankGetByMajorBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/RankBean/RankGetByMajorBean.java @@ -13,11 +13,11 @@ public class RankGetByMajorBean { private final RankMajorLastUpdatedSmallBean rankMajorLastUpdatedSmallBean; private final RankGetByMajorSmallBean rankGetByMajorSmallBean; - public RankByMajorGetResponseDTO exec(Major major) { + public RankByMajorGetResponseDTO exec(Integer page, Integer size, Major major) { return RankByMajorGetResponseDTO .builder() .lastUpdated(rankMajorLastUpdatedSmallBean.getLastUpdated()) - .rankList(rankGetByMajorSmallBean.exec(major)) + .rankList(rankGetByMajorSmallBean.exec(page, size, major)) .build(); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/ReviewBean/ReviewGetMyReviewBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/ReviewBean/ReviewGetMyReviewBean.java index 21ae73ce..a30970d0 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/ReviewBean/ReviewGetMyReviewBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/ReviewBean/ReviewGetMyReviewBean.java @@ -3,6 +3,7 @@ import com.example.jsgamesbackendmain.Bean.SmallBean.GameBean.GameGetSmallBean; import com.example.jsgamesbackendmain.Bean.SmallBean.ReviewBean.ReviewGetByUserIdAndGameIdSmallBean; import com.example.jsgamesbackendmain.Bean.SmallBean.UserBean.UserGetByIdSmallBean; +import com.example.jsgamesbackendmain.Model.DAO.GameDAO; import com.example.jsgamesbackendmain.Model.DAO.ReviewDAO; import com.example.jsgamesbackendmain.Model.DAO.UserDAO; import com.example.jsgamesbackendmain.Model.DTO.Review.Response.ReviewGetByGameIdResponseDTO; @@ -18,12 +19,12 @@ public class ReviewGetMyReviewBean { public ReviewGetByGameIdResponseDTO exec(Long gameId, String userId) { - UserDAO user = userGetByIdSmallBean.exec(userId); + UserDAO findUser = userGetByIdSmallBean.exec(userId); - gameGetSmallBean.exec(gameId); + GameDAO findGame = gameGetSmallBean.exec(gameId); - ReviewDAO dao = reviewGetByUserIdAndGameIdSmallBean.exec(userId, gameId); + ReviewDAO findReview = reviewGetByUserIdAndGameIdSmallBean.exec(findUser, findGame); - return ReviewGetByGameIdResponseDTO.of(dao, user); + return ReviewGetByGameIdResponseDTO.of(findReview); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/ReviewBean/ReviewListByGameBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/ReviewBean/ReviewListByGameBean.java index e5fac06f..c6430695 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/ReviewBean/ReviewListByGameBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/ReviewBean/ReviewListByGameBean.java @@ -1,6 +1,11 @@ package com.example.jsgamesbackendmain.Bean.ReviewBean; -import com.example.jsgamesbackendmain.Bean.SmallBean.ReviewBean.*; +import com.example.jsgamesbackendmain.Bean.SmallBean.GameBean.GameGetSmallBean; +import com.example.jsgamesbackendmain.Bean.SmallBean.ReviewBean.ReviewGetByGameIdOrderByCreateAscSmallBean; +import com.example.jsgamesbackendmain.Bean.SmallBean.ReviewBean.ReviewGetByGameIdOrderByCreateDescSmallBean; +import com.example.jsgamesbackendmain.Bean.SmallBean.ReviewBean.ReviewGetByGameIdOrderByHelpfulSmallBean; +import com.example.jsgamesbackendmain.Bean.SmallBean.ReviewBean.ReviewGetByGameIdOrderByStarDescSmallBean; +import com.example.jsgamesbackendmain.Model.DAO.GameDAO; import com.example.jsgamesbackendmain.Model.DAO.ReviewDAO; import com.example.jsgamesbackendmain.Model.DTO.Review.Response.ReviewGetByGameIdResponseDTO; import com.example.jsgamesbackendmain.Model.ENUM.ReviewSort; @@ -20,31 +25,35 @@ public class ReviewListByGameBean { private final ReviewGetByGameIdOrderByCreateAscSmallBean reviewGetByGameIdOrderByCreateAscSmallBean; private final ReviewGetByGameIdOrderByStarDescSmallBean reviewGetByGameIdOrderByStarDescSmallBean; - private final ReviewDaoToResponseDtoSmallBean reviewDaoToResponseDtoSmallBean; + private final GameGetSmallBean gameGetSmallBean; - public List exec(Long gameId, Long page, Long size, ReviewSort sort) { - PageRequest request = PageRequest.of(page.intValue(), size.intValue()); + public List exec(Long gameId, Integer page, Integer size, ReviewSort sort) { + PageRequest request = PageRequest.of(page, size); - List daos = null; + GameDAO findGame = gameGetSmallBean.exec(gameId); + + + List reviewList = null; switch (sort) { case RECENT: - daos = reviewGetByGameIdOrderByCreateDescSmallBean.exec(gameId, request); + reviewList = reviewGetByGameIdOrderByCreateDescSmallBean.exec(findGame, request); break; case OLDEST: - daos = reviewGetByGameIdOrderByCreateAscSmallBean.exec(gameId, request); + reviewList = reviewGetByGameIdOrderByCreateAscSmallBean.exec(findGame, request); break; case STAR: - daos = reviewGetByGameIdOrderByStarDescSmallBean.exec(gameId, request); + reviewList = reviewGetByGameIdOrderByStarDescSmallBean.exec(findGame, request); break; case HELPFUL: - daos = reviewGetByGameIdOrderByHelpfulSmallBean.exec(gameId, request); + reviewList = reviewGetByGameIdOrderByHelpfulSmallBean.exec(findGame, request); break; } - return daos.stream() - .map(dao -> reviewDaoToResponseDtoSmallBean.exec(dao)).collect(Collectors.toList()); + return reviewList.stream() + .map(ReviewGetByGameIdResponseDTO::of) + .collect(Collectors.toList()); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/ReviewBean/ReviewPostBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/ReviewBean/ReviewPostBean.java index d5ab15b5..5d39d444 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/ReviewBean/ReviewPostBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/ReviewBean/ReviewPostBean.java @@ -3,6 +3,8 @@ import com.example.jsgamesbackendmain.Bean.SmallBean.GameBean.GameGetSmallBean; import com.example.jsgamesbackendmain.Bean.SmallBean.ReviewBean.ReviewSaveSmallBean; import com.example.jsgamesbackendmain.Bean.SmallBean.UserBean.UserGetByIdSmallBean; +import com.example.jsgamesbackendmain.Model.DAO.GameDAO; +import com.example.jsgamesbackendmain.Model.DAO.UserDAO; import com.example.jsgamesbackendmain.Model.DTO.Review.Request.ReviewCreateRequestDTO; import com.example.jsgamesbackendmain.Model.DTO.Review.Response.ReviewCreateResponseDTO; import lombok.RequiredArgsConstructor; @@ -21,11 +23,11 @@ public class ReviewPostBean { public ReviewCreateResponseDTO exec(ReviewCreateRequestDTO requestDTO) { // user validation - userGetByIdSmallBean.exec(requestDTO.getUserId()); + UserDAO findUser = userGetByIdSmallBean.exec(requestDTO.getUserId()); // game validation - gameGetSmallBean.exec(requestDTO.getGameId()); + GameDAO findGame = gameGetSmallBean.exec(requestDTO.getGameId()); - return ReviewCreateResponseDTO.of(reviewSaveSmallBean.exec(requestDTO.toDAO())); + return ReviewCreateResponseDTO.of(reviewSaveSmallBean.exec(requestDTO.toDAO(), findUser, findGame)); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/ReviewBean/ReviewUpdateBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/ReviewBean/ReviewUpdateBean.java index 23b719fd..a21e2278 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/ReviewBean/ReviewUpdateBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/ReviewBean/ReviewUpdateBean.java @@ -20,12 +20,12 @@ public class ReviewUpdateBean { public ReviewUpdateResponseDTO exec(Long reviewId, ReviewUpdateRequestDTO request) { // review validation - ReviewDAO dao = reviewGetByIdSmallBean.exec(reviewId); + ReviewDAO findReview = reviewGetByIdSmallBean.exec(reviewId); // update - reviewUpdateSmallBean.exec(dao, request); + reviewUpdateSmallBean.exec(findReview, request); - return ReviewUpdateResponseDTO.of(dao); + return ReviewUpdateResponseDTO.of(findReview); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/GameBean/GameGetListByPlayedUserSmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/GameBean/GameGetListByPlayedUserSmallBean.java index efd34248..f4e8ccb8 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/GameBean/GameGetListByPlayedUserSmallBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/GameBean/GameGetListByPlayedUserSmallBean.java @@ -1,6 +1,7 @@ package com.example.jsgamesbackendmain.Bean.SmallBean.GameBean; -import com.example.jsgamesbackendmain.Model.DTO.Game.Response.GameListResponseDTO; +import com.example.jsgamesbackendmain.Model.DAO.GameDAO; +import com.example.jsgamesbackendmain.Model.DAO.UserDAO; import com.example.jsgamesbackendmain.Repository.GameRepository; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.PageRequest; @@ -13,10 +14,7 @@ @RequiredArgsConstructor public class GameGetListByPlayedUserSmallBean { private final GameRepository gameRepository; - public List exec(String userId, PageRequest pageRequest) { - return gameRepository.findAllByPlayedUserOrderByViewCountDescGameIdAsc(userId, pageRequest) - .toList() - .stream().map(GameListResponseDTO::of) - .collect(Collectors.toList()); + public List exec(UserDAO user, PageRequest pageRequest) { + return gameRepository.findAllByPlayedUserOrderByCreatedAtDescGameIdAsc(user, pageRequest).toList(); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/GameBean/GameGetPageSmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/GameBean/GameListOrderByCreateAtSmallBean.java similarity index 81% rename from src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/GameBean/GameGetPageSmallBean.java rename to src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/GameBean/GameListOrderByCreateAtSmallBean.java index b32713eb..2bc5e048 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/GameBean/GameGetPageSmallBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/GameBean/GameListOrderByCreateAtSmallBean.java @@ -9,11 +9,9 @@ @Component @RequiredArgsConstructor -public class GameGetPageSmallBean { - +public class GameListOrderByCreateAtSmallBean { private final GameRepository gameRepository; - public Page exec(Pageable pageable) { - return gameRepository.findAll(pageable); +return gameRepository.findAllByOrderByCreatedAtDescGameIdAsc(pageable); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/GameBean/GameListOrderByLogCountDescSmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/GameBean/GameListOrderByLogCountDescSmallBean.java new file mode 100644 index 00000000..39765612 --- /dev/null +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/GameBean/GameListOrderByLogCountDescSmallBean.java @@ -0,0 +1,18 @@ +package com.example.jsgamesbackendmain.Bean.SmallBean.GameBean; + +import com.example.jsgamesbackendmain.Model.DAO.GameDAO; +import com.example.jsgamesbackendmain.Repository.GameRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class GameListOrderByLogCountDescSmallBean { + private final GameRepository gameRepository; + + public Page exec(Pageable pageable) { + return gameRepository.findAllByOrderByLogCountDescGameIdAsc(pageable); + } +} diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/GameBean/GameListOrderByReviewCountSmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/GameBean/GameListOrderByReviewCountSmallBean.java new file mode 100644 index 00000000..cb558a86 --- /dev/null +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/GameBean/GameListOrderByReviewCountSmallBean.java @@ -0,0 +1,18 @@ +package com.example.jsgamesbackendmain.Bean.SmallBean.GameBean; + +import com.example.jsgamesbackendmain.Model.DAO.GameDAO; +import com.example.jsgamesbackendmain.Repository.GameRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class GameListOrderByReviewCountSmallBean { + private final GameRepository gameRepository; + + public Page exec(Pageable pageable) { + return gameRepository.findAllByOrderByReviewCountDescGameIdAsc(pageable); + } +} diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/GameBean/GameListOrderByViewCountSmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/GameBean/GameListOrderByViewCountSmallBean.java new file mode 100644 index 00000000..474d0348 --- /dev/null +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/GameBean/GameListOrderByViewCountSmallBean.java @@ -0,0 +1,18 @@ +package com.example.jsgamesbackendmain.Bean.SmallBean.GameBean; + +import com.example.jsgamesbackendmain.Model.DAO.GameDAO; +import com.example.jsgamesbackendmain.Repository.GameRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class GameListOrderByViewCountSmallBean { + private final GameRepository gameRepository; + + public Page exec(Pageable pageable) { + return gameRepository.findAllByOrderByViewCountDescGameIdAsc(pageable); + } +} diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/GameBean/GameViewCountUpdateSmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/GameBean/GameViewCountUpdateSmallBean.java index 03b516de..857ec55f 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/GameBean/GameViewCountUpdateSmallBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/GameBean/GameViewCountUpdateSmallBean.java @@ -2,11 +2,9 @@ import com.example.jsgamesbackendmain.Model.DAO.GameDAO; import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Transactional; @Component public class GameViewCountUpdateSmallBean { - @Transactional public Long exec(GameDAO gameDAO) { return gameDAO.increaseViewCount(); } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/HelpfulBean/HelpfulDeleteSmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/HelpfulBean/HelpfulDeleteSmallBean.java index dcf04cf8..610aa435 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/HelpfulBean/HelpfulDeleteSmallBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/HelpfulBean/HelpfulDeleteSmallBean.java @@ -2,8 +2,11 @@ import com.example.jsgamesbackendmain.Controller.ExceptionControll.DuplicateException; import com.example.jsgamesbackendmain.Model.DAO.HelpfulDAO; +import com.example.jsgamesbackendmain.Model.DAO.ReviewDAO; +import com.example.jsgamesbackendmain.Model.DAO.UserDAO; import com.example.jsgamesbackendmain.Repository.HelpfulRepository; import com.example.jsgamesbackendmain.Repository.ReviewRepository; +import com.example.jsgamesbackendmain.Repository.UserRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -16,16 +19,16 @@ public class HelpfulDeleteSmallBean { private final HelpfulRepository helpfulRepository; private final ReviewRepository reviewRepository; - public void exec(String userId, Long reviewId) { + public void exec(UserDAO user, ReviewDAO review) { Optional helpfulDAOCheck = - helpfulRepository.findByUserIdAndReviewId(userId, reviewId); + helpfulRepository.findByUserAndReview(user, review); if (!helpfulDAOCheck.isPresent()) { throw new DuplicateException("존재하지 않는 helpful입니다."); } if (helpfulDAOCheck.get().getHelpfulTime().plusNanos(100000000).isAfter(LocalDateTime.now())) { throw new DuplicateException("0.1초 이내에는 helpful을 취소할 수 없습니다."); } - helpfulRepository.deleteByUserIdAndReviewId(userId, reviewId); - reviewRepository.updateHelpfulMinus(reviewId); + helpfulRepository.deleteByUserAndReview(user, review); + reviewRepository.updateHelpfulMinus(review.getReviewId()); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/HelpfulBean/HelpfulGetSmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/HelpfulBean/HelpfulGetSmallBean.java index 8eea32ea..a81b308d 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/HelpfulBean/HelpfulGetSmallBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/HelpfulBean/HelpfulGetSmallBean.java @@ -1,6 +1,8 @@ package com.example.jsgamesbackendmain.Bean.SmallBean.HelpfulBean; import com.example.jsgamesbackendmain.Model.DAO.HelpfulDAO; +import com.example.jsgamesbackendmain.Model.DAO.ReviewDAO; +import com.example.jsgamesbackendmain.Model.DAO.UserDAO; import com.example.jsgamesbackendmain.Repository.HelpfulRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -12,9 +14,9 @@ public class HelpfulGetSmallBean { private final HelpfulRepository helpfulRepository; - public boolean exec(String userId, Long reviewId) { + public boolean exec(UserDAO user, ReviewDAO review) { Optional helpfulDAO = - helpfulRepository.findByUserIdAndReviewId(userId, reviewId); + helpfulRepository.findByUserAndReview(user, review); return helpfulDAO.isPresent(); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/HelpfulBean/HelpfulPostSmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/HelpfulBean/HelpfulPostSmallBean.java index c48a0c0b..238a2a74 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/HelpfulBean/HelpfulPostSmallBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/HelpfulBean/HelpfulPostSmallBean.java @@ -2,8 +2,11 @@ import com.example.jsgamesbackendmain.Controller.ExceptionControll.DuplicateException; import com.example.jsgamesbackendmain.Model.DAO.HelpfulDAO; +import com.example.jsgamesbackendmain.Model.DAO.ReviewDAO; +import com.example.jsgamesbackendmain.Model.DAO.UserDAO; import com.example.jsgamesbackendmain.Repository.HelpfulRepository; import com.example.jsgamesbackendmain.Repository.ReviewRepository; +import com.example.jsgamesbackendmain.Repository.UserRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -14,16 +17,23 @@ public class HelpfulPostSmallBean { private final HelpfulRepository helpfulRepository; private final ReviewRepository reviewRepository; + private final UserRepository userRepository; public void exec(String userId, Long reviewId) { + UserDAO findUser = userRepository.findById(userId).get(); + ReviewDAO findReview = reviewRepository.findById(reviewId).get(); + + Optional helpfulDAOCheck = - helpfulRepository.findByUserIdAndReviewId(userId, reviewId); + helpfulRepository.findByUserAndReview(findUser, findReview); + if (helpfulDAOCheck.isPresent()) { throw new DuplicateException("이미 존재하는 helpful입니다."); } + HelpfulDAO helpfulDAO = HelpfulDAO.builder().build(); - helpfulDAO.setUserId(userId); - helpfulDAO.setReviewId(reviewId); + helpfulDAO.setUser(findUser); + helpfulDAO.setReview(findReview); helpfulRepository.save(helpfulDAO); reviewRepository.updateHelpfulPlus(reviewId); diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ImageBean/S3SetSmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ImageBean/S3SetSmallBean.java new file mode 100644 index 00000000..d33c89d6 --- /dev/null +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ImageBean/S3SetSmallBean.java @@ -0,0 +1,41 @@ +package com.example.jsgamesbackendmain.Bean.SmallBean.ImageBean; + +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.model.ListObjectsV2Request; +import com.amazonaws.services.s3.model.ListObjectsV2Result; +import com.amazonaws.services.s3.model.S3ObjectSummary; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class S3SetSmallBean { + + private final AmazonS3 amazonS3Client; + + @Value("${cloud.aws.s3.bucket}") + + private String bucket; + public void exec() { + //S3 초기화 + ListObjectsV2Request req = new ListObjectsV2Request().withBucketName(bucket); + ListObjectsV2Result result; + + do { + result = amazonS3Client.listObjectsV2(req); + + for (S3ObjectSummary objectSummary : result.getObjectSummaries()) { + String key = objectSummary.getKey(); + amazonS3Client.deleteObject(bucket, key); + } + + // 다음 페이지의 객체들을 가져오기 위한 토큰 설정 + String token = result.getNextContinuationToken(); + req.setContinuationToken(token); + } while (result.isTruncated()); + + //".\\src\\main\\resources\\static\\default_image\\default_user_image.png" 이미지 S3에 업로드 + amazonS3Client.putObject(bucket, "default_user_image.png", new java.io.File(".\\src\\main\\resources\\static\\default_image\\default_user_image.png")); + } +} diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogCatchTopChange.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogCatchTopChange.java index 4f01afd7..8cb77fd8 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogCatchTopChange.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogCatchTopChange.java @@ -1,35 +1,38 @@ package com.example.jsgamesbackendmain.Bean.SmallBean.LogBean; +import com.example.jsgamesbackendmain.Bean.LogBean.LogGetByGameIdBean; +import com.example.jsgamesbackendmain.Model.DAO.GameDAO; import com.example.jsgamesbackendmain.Model.DTO.Log.Response.LogGetByGameIdResponseDTO; +import com.example.jsgamesbackendmain.Model.DTO.User.Reponse.UserLogResponseDTO; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; -import java.util.Optional; +import java.util.List; @Component @RequiredArgsConstructor public class LogCatchTopChange { private final LogGetByGameSmallBean logGetByGameSmallBean; + private final LogGetByGameIdBean logGetByGameIdBean; - public Boolean exec(Optional preTopLogOpt, Optional nextTopLogOpt) { - //if preTopLog not exist return false - if (!preTopLogOpt.isPresent()) - return false; - - - // get top log - LogGetByGameIdResponseDTO preTopLog = preTopLogOpt.get(); - LogGetByGameIdResponseDTO nextTopLog = nextTopLogOpt.get(); - + public Boolean exec(GameDAO game) { // get log count - Long logCount = logGetByGameSmallBean.count(preTopLog.getGameId()); + Long logCount = logGetByGameSmallBean.count(game); // if count <= 100 return false if(logCount <= 100) return false; - // if preTopLog != nextTopLog and different user return true - return !preTopLog.getLogId().equals(nextTopLog.getLogId()) - && !preTopLog.getUser().getUserId().equals(nextTopLog.getUser().getUserId()); + List logList + = logGetByGameIdBean.exec(game.getGameId(), 0, 2); + + LogGetByGameIdResponseDTO firstLog = logList.get(0); + UserLogResponseDTO firstLogUser = firstLog.getUser(); + + LogGetByGameIdResponseDTO secondLog = logList.get(1); + UserLogResponseDTO secondLogUser = secondLog.getUser(); + + // 100번째 로그의 유저와 101번째 로그의 유저가 다르면 true + return !firstLogUser.getUserId().equals(secondLogUser.getUserId()); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogGetByGameIdUserIdSmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogGetByGameIdUserIdSmallBean.java index 42bcfd11..1151f416 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogGetByGameIdUserIdSmallBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogGetByGameIdUserIdSmallBean.java @@ -2,6 +2,7 @@ import com.example.jsgamesbackendmain.Model.DAO.GameDAO; import com.example.jsgamesbackendmain.Model.DAO.LogDAO; +import com.example.jsgamesbackendmain.Model.DAO.UserDAO; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -14,17 +15,16 @@ public class LogGetByGameIdUserIdSmallBean { private final LogGetOrderInfiniteScoreSmallBean logGetOrderInfiniteScoreSmallBean; private final LogGetOrderTargetSmallBean logGetOrderTargetSmallBean; - public LogDAO exec(GameDAO gameDAO, String userId) { + public LogDAO exec(GameDAO gameDAO, UserDAO userDAO) { - Optional optional = logValidationSmallBean.exec(gameDAO, userId); - ; + Optional optional = logValidationSmallBean.exec(gameDAO, userDAO); switch (gameDAO.getScoreType()) { case INFINITE: - optional = logGetOrderInfiniteScoreSmallBean.exec(gameDAO.getGameId(), userId); + optional = logGetOrderInfiniteScoreSmallBean.exec(gameDAO, userDAO); break; case GOAL: - optional = logGetOrderTargetSmallBean.exec(gameDAO.getGameId(), userId, gameDAO.getTargetScore()); + optional = logGetOrderTargetSmallBean.exec(gameDAO, userDAO, gameDAO.getTargetScore()); break; } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogGetByGameSmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogGetByGameSmallBean.java index 28a7c794..934ac4f8 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogGetByGameSmallBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogGetByGameSmallBean.java @@ -1,10 +1,12 @@ package com.example.jsgamesbackendmain.Bean.SmallBean.LogBean; +import com.example.jsgamesbackendmain.Bean.SmallBean.GameBean.GameGetSmallBean; import com.example.jsgamesbackendmain.Bean.SmallBean.UserBean.UserGetByIdSmallBean; import com.example.jsgamesbackendmain.Model.DAO.GameDAO; import com.example.jsgamesbackendmain.Model.DAO.LogDAO; import com.example.jsgamesbackendmain.Model.DTO.Log.Response.LogGetByGameIdResponseDTO; +import com.example.jsgamesbackendmain.Repository.GameRepository; import com.example.jsgamesbackendmain.Repository.LogRepository; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; @@ -20,32 +22,28 @@ public class LogGetByGameSmallBean { private final LogRepository logRepository; private final UserGetByIdSmallBean userGetByIdSmallBean; + private final GameRepository gameRepository; // INFINITE - public List exec(GameDAO gameDAO, Integer page, Integer size) { + public List exec(GameDAO gameDAO, Integer page, Integer size) { Pageable pageable = PageRequest.of(page, size); Page order = null; switch (gameDAO.getScoreType()) { case INFINITE: - order = logRepository.findByGameIdOrderByGameScoreDesc(gameDAO.getGameId(), pageable); + order = logRepository.findByGameOrderByGameScoreDesc(gameDAO, pageable); break; case GOAL: - order = logRepository.findByGameIdOrderByGameScoreWithTargetScore(gameDAO.getGameId(), gameDAO.getTargetScore(), pageable); + order = logRepository.findByGameOrderByGameScoreWithTargetScore(gameDAO, gameDAO.getTargetScore(), pageable); break; } - return order.toList().stream().map(logDAO -> - LogGetByGameIdResponseDTO.of( - logDAO, - userGetByIdSmallBean.exec(logDAO.getUserId()) - ) - ).collect(Collectors.toList()); + return order.toList(); } - public Long count(Long gameId) { - return logRepository.countByGameId(gameId); + public Long count(GameDAO game) { + return logRepository.countByGame(game); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogGetByUserIdSmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogGetByUserIdSmallBean.java index d2a7cae9..573ba808 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogGetByUserIdSmallBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogGetByUserIdSmallBean.java @@ -16,12 +16,12 @@ public class LogGetByUserIdSmallBean { private final LogRepository logRepository; - public List exec(UserDAO user, Long page, Long size) { - Pageable pageable = PageRequest.of(page.intValue(), size.intValue()); + public List exec(UserDAO user, Integer page, Integer size) { + Pageable pageable = PageRequest.of(page, size); - return logRepository.findByUserIdOrderByGameScoreDesc(user.getUserId(), pageable) + return logRepository.findByUserOrderByGameScoreDesc(user, pageable) .stream() - .map(logDAO -> LogGetByUserIdResponseDTO.of(logDAO, user)) + .map(LogGetByUserIdResponseDTO::of) .collect(Collectors.toList()); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogGetOrderInfiniteScoreSmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogGetOrderInfiniteScoreSmallBean.java index e7f719e2..0a6d9b06 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogGetOrderInfiniteScoreSmallBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogGetOrderInfiniteScoreSmallBean.java @@ -1,6 +1,8 @@ package com.example.jsgamesbackendmain.Bean.SmallBean.LogBean; +import com.example.jsgamesbackendmain.Model.DAO.GameDAO; import com.example.jsgamesbackendmain.Model.DAO.LogDAO; +import com.example.jsgamesbackendmain.Model.DAO.UserDAO; import com.example.jsgamesbackendmain.Repository.LogRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -13,7 +15,7 @@ public class LogGetOrderInfiniteScoreSmallBean { private final LogRepository logRepository; - public Optional exec(Long gameId, String userId) { - return logRepository.findFirstByGameIdAndUserIdOrderByGameScoreDesc(gameId, userId); + public Optional exec(GameDAO game, UserDAO user) { + return logRepository.findFirstByGameAndUserOrderByGameScoreDesc(game, user); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogGetOrderTargetSmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogGetOrderTargetSmallBean.java index 0fa414e5..a2ffd523 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogGetOrderTargetSmallBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogGetOrderTargetSmallBean.java @@ -1,6 +1,8 @@ package com.example.jsgamesbackendmain.Bean.SmallBean.LogBean; +import com.example.jsgamesbackendmain.Model.DAO.GameDAO; import com.example.jsgamesbackendmain.Model.DAO.LogDAO; +import com.example.jsgamesbackendmain.Model.DAO.UserDAO; import com.example.jsgamesbackendmain.Repository.LogRepository; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.PageRequest; @@ -13,9 +15,9 @@ public class LogGetOrderTargetSmallBean { private final LogRepository logRepository; - public Optional exec(Long gameId, String userId, Double targetScore) { + public Optional exec(GameDAO game, UserDAO user, Double targetScore) { return logRepository.findFirstByGameIdAndUserIdOrderByGameScoreWithTargetScore( - gameId, userId, targetScore, PageRequest.of(0, 1) + game, user, targetScore, PageRequest.of(0, 1) ).stream().findAny(); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogGetRankSmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogGetRankSmallBean.java index b17d2327..3644a398 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogGetRankSmallBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogGetRankSmallBean.java @@ -15,10 +15,10 @@ public Long exec(GameDAO gameDAO, LogDAO logDAO) { Long rank = 0L; switch (gameDAO.getScoreType()) { case INFINITE: - rank = logRepository.getRankInfinite(logDAO.getGameScore(), logDAO.getGameId()); + rank = logRepository.getRankInfinite(logDAO.getGameScore(), logDAO.getGame()); break; case GOAL: - rank = logRepository.getRankGoal(gameDAO.getTargetScore(), logDAO.getGameScore(), logDAO.getGameId()); + rank = logRepository.getRankGoal(gameDAO.getTargetScore(), logDAO.getGameScore(), logDAO.getGame()); break; } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogValidationSmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogValidationSmallBean.java index 1ac98041..0704b69d 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogValidationSmallBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/LogBean/LogValidationSmallBean.java @@ -3,7 +3,9 @@ import com.example.jsgamesbackendmain.Controller.ExceptionControll.ResourceNotFoundException; import com.example.jsgamesbackendmain.Model.DAO.GameDAO; import com.example.jsgamesbackendmain.Model.DAO.LogDAO; +import com.example.jsgamesbackendmain.Model.DAO.UserDAO; import com.example.jsgamesbackendmain.Repository.LogRepository; +import com.example.jsgamesbackendmain.Repository.UserRepository; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Component; @@ -15,18 +17,19 @@ @RequiredArgsConstructor public class LogValidationSmallBean { private final LogRepository logRepository; + private final UserRepository userRepository; - public Optional exec(GameDAO gameDAO, String userId) { + public Optional exec(GameDAO gameDAO, UserDAO userDAO) { - List list = logRepository.findByGameIdAndUserId( - gameDAO.getGameId(), userId + List list = logRepository.findByGameAndUser( + gameDAO, userDAO , PageRequest.of(0, 1) ).toList(); Optional optional = list.stream().findAny(); if (!optional.isPresent()) { - throw new ResourceNotFoundException("Log not found for this GameId And UserId :: " + gameDAO.getGameId() + " And " + userId); + throw new ResourceNotFoundException("Log not found for this GameId And UserId :: " + gameDAO.getGameId() + " And " + userDAO.getUserId()); } else { return optional; } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/RankBean/RankGetByMajorSmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/RankBean/RankGetByMajorSmallBean.java index bb39509d..d170f59c 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/RankBean/RankGetByMajorSmallBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/RankBean/RankGetByMajorSmallBean.java @@ -5,6 +5,7 @@ import com.example.jsgamesbackendmain.Model.ENUM.Major; import com.example.jsgamesbackendmain.Repository.RankMajorRepository; import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Component; import java.util.List; @@ -16,8 +17,9 @@ public class RankGetByMajorSmallBean { private final RankMajorRepository rankMajorRepository; private final UserGetByIdSmallBean userGetByIdSmallBean; - public List exec(Major major) { - return rankMajorRepository.findAllByMajorOrderByTotalRankAsc(major) + public List exec(Integer page, Integer size, Major major) { + PageRequest pageRequest = PageRequest.of(page, size); + return rankMajorRepository.findAllByMajorOrderByTotalRankAsc(pageRequest, major).toList() .stream() .map(rankMajorDAO -> RankByMajorUserResponseDTO.of( rankMajorDAO, userGetByIdSmallBean.exec(rankMajorDAO.getUserId())) diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/RankBean/RankGetTop100SmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/RankBean/RankGetTop100SmallBean.java index 590a8472..adebc8f5 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/RankBean/RankGetTop100SmallBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/RankBean/RankGetTop100SmallBean.java @@ -16,8 +16,8 @@ public class RankGetTop100SmallBean { private final RankTop100Repository rankRepository; private final UserGetByIdSmallBean userGetByIdSmallBean; - public List exec(Long page, Long size) { - PageRequest pageRequest = PageRequest.of(page.intValue(), size.intValue()); + public List exec(Integer page, Integer size) { + PageRequest pageRequest = PageRequest.of(page, size); return rankRepository.findAllByOrderByTotalRankAsc(pageRequest).toList() .stream() .map(rankTop100DAO -> RankTop100UserResponseDTO.of( diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewDaoToResponseDtoSmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewDaoToResponseDtoSmallBean.java deleted file mode 100644 index 48fa8221..00000000 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewDaoToResponseDtoSmallBean.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.example.jsgamesbackendmain.Bean.SmallBean.ReviewBean; - -import com.example.jsgamesbackendmain.Bean.SmallBean.UserBean.UserGetByIdSmallBean; -import com.example.jsgamesbackendmain.Model.DAO.ReviewDAO; -import com.example.jsgamesbackendmain.Model.DAO.UserDAO; -import com.example.jsgamesbackendmain.Model.DTO.Review.Response.ReviewGetByGameIdResponseDTO; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Component; - -@Component -@RequiredArgsConstructor -public class ReviewDaoToResponseDtoSmallBean { - - private final UserGetByIdSmallBean userGetByIdSmallBean; - - public ReviewGetByGameIdResponseDTO exec(ReviewDAO reviewDAO) { - - UserDAO userDAO = userGetByIdSmallBean.exec(reviewDAO.getUserId()); - - return ReviewGetByGameIdResponseDTO.of(reviewDAO, userDAO); - } -} diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewGetAvgStarByGameIdSmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewGetAvgStarByGameIdSmallBean.java index 912f6384..cf593446 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewGetAvgStarByGameIdSmallBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewGetAvgStarByGameIdSmallBean.java @@ -1,5 +1,6 @@ package com.example.jsgamesbackendmain.Bean.SmallBean.ReviewBean; +import com.example.jsgamesbackendmain.Model.DAO.GameDAO; import com.example.jsgamesbackendmain.Repository.ReviewRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -11,8 +12,8 @@ public class ReviewGetAvgStarByGameIdSmallBean { private final ReviewRepository reviewRepository; - public Double exec(Long gameId) { - Optional optional = reviewRepository.findAvgStarByGameId(gameId); + public Double exec(GameDAO game) { + Optional optional = reviewRepository.findAvgStarByGame(game); return optional.orElse(0.0); } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewGetByGameIdOrderByCreateAscSmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewGetByGameIdOrderByCreateAscSmallBean.java index 7352d9fb..24de080d 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewGetByGameIdOrderByCreateAscSmallBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewGetByGameIdOrderByCreateAscSmallBean.java @@ -1,5 +1,6 @@ package com.example.jsgamesbackendmain.Bean.SmallBean.ReviewBean; +import com.example.jsgamesbackendmain.Model.DAO.GameDAO; import com.example.jsgamesbackendmain.Model.DAO.ReviewDAO; import com.example.jsgamesbackendmain.Repository.ReviewRepository; import lombok.RequiredArgsConstructor; @@ -14,8 +15,8 @@ public class ReviewGetByGameIdOrderByCreateAscSmallBean { private final ReviewRepository reviewRepository; - public List exec(Long gameId, PageRequest pageRequest) { - Page order = reviewRepository.findByGameIdOrderByDateTimeAscReviewIdDesc(gameId, pageRequest); + public List exec(GameDAO game, PageRequest pageRequest) { + Page order = reviewRepository.findByGameOrderByDateTimeAscReviewIdDesc(game, pageRequest); return order.toList(); } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewGetByGameIdOrderByCreateDescSmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewGetByGameIdOrderByCreateDescSmallBean.java index 3af1c71f..05a10ce6 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewGetByGameIdOrderByCreateDescSmallBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewGetByGameIdOrderByCreateDescSmallBean.java @@ -1,5 +1,6 @@ package com.example.jsgamesbackendmain.Bean.SmallBean.ReviewBean; +import com.example.jsgamesbackendmain.Model.DAO.GameDAO; import com.example.jsgamesbackendmain.Model.DAO.ReviewDAO; import com.example.jsgamesbackendmain.Repository.ReviewRepository; import lombok.RequiredArgsConstructor; @@ -14,8 +15,8 @@ public class ReviewGetByGameIdOrderByCreateDescSmallBean { private final ReviewRepository reviewRepository; - public List exec(Long gameId, PageRequest pageRequest) { - Page order = reviewRepository.findByGameIdOrderByDateTimeDescReviewIdDesc(gameId, pageRequest); + public List exec(GameDAO game, PageRequest pageRequest) { + Page order = reviewRepository.findByGameOrderByDateTimeDescReviewIdDesc(game, pageRequest); return order.toList(); } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewGetByGameIdOrderByHelpfulSmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewGetByGameIdOrderByHelpfulSmallBean.java index 82337949..7bdb47fc 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewGetByGameIdOrderByHelpfulSmallBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewGetByGameIdOrderByHelpfulSmallBean.java @@ -1,5 +1,6 @@ package com.example.jsgamesbackendmain.Bean.SmallBean.ReviewBean; +import com.example.jsgamesbackendmain.Model.DAO.GameDAO; import com.example.jsgamesbackendmain.Model.DAO.ReviewDAO; import com.example.jsgamesbackendmain.Repository.ReviewRepository; import lombok.RequiredArgsConstructor; @@ -15,8 +16,8 @@ public class ReviewGetByGameIdOrderByHelpfulSmallBean { private final ReviewRepository reviewRepository; - public List exec(Long gameId, PageRequest pageRequest) { - Page order = reviewRepository.findByGameIdOrderByHelpfulDescDateTimeDescReviewIdDesc(gameId, pageRequest); + public List exec(GameDAO game, PageRequest pageRequest) { + Page order = reviewRepository.findByGameOrderByHelpfulDescDateTimeDescReviewIdDesc(game, pageRequest); return order.toList(); } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewGetByGameIdOrderByStarDescSmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewGetByGameIdOrderByStarDescSmallBean.java index 40fcec90..629f6a64 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewGetByGameIdOrderByStarDescSmallBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewGetByGameIdOrderByStarDescSmallBean.java @@ -1,5 +1,6 @@ package com.example.jsgamesbackendmain.Bean.SmallBean.ReviewBean; +import com.example.jsgamesbackendmain.Model.DAO.GameDAO; import com.example.jsgamesbackendmain.Model.DAO.ReviewDAO; import com.example.jsgamesbackendmain.Repository.ReviewRepository; import lombok.RequiredArgsConstructor; @@ -14,9 +15,9 @@ public class ReviewGetByGameIdOrderByStarDescSmallBean { private final ReviewRepository reviewRepository; - public List exec(Long gameId, PageRequest pageRequest) { + public List exec(GameDAO game, PageRequest pageRequest) { - Page order = reviewRepository.findByGameIdOrderByStarDescDateTimeDescReviewIdDesc(gameId, pageRequest); + Page order = reviewRepository.findByGameOrderByStarDescDateTimeDescReviewIdDesc(game, pageRequest); return order.toList(); } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewGetByUserIdAndGameIdSmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewGetByUserIdAndGameIdSmallBean.java index 00cad3de..27a1439e 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewGetByUserIdAndGameIdSmallBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewGetByUserIdAndGameIdSmallBean.java @@ -1,7 +1,9 @@ package com.example.jsgamesbackendmain.Bean.SmallBean.ReviewBean; import com.example.jsgamesbackendmain.Controller.ExceptionControll.ResourceNotFoundException; +import com.example.jsgamesbackendmain.Model.DAO.GameDAO; import com.example.jsgamesbackendmain.Model.DAO.ReviewDAO; +import com.example.jsgamesbackendmain.Model.DAO.UserDAO; import com.example.jsgamesbackendmain.Repository.ReviewRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -13,11 +15,11 @@ public class ReviewGetByUserIdAndGameIdSmallBean { private final ReviewRepository reviewRepository; - public ReviewDAO exec(String userId, Long gameId) { - Optional optional = reviewRepository.findByUserIdAndGameId(userId, gameId); + public ReviewDAO exec(UserDAO user, GameDAO game) { + Optional optional = reviewRepository.findByUserAndGame(user, game); // 존재하지 않는다면 if (!optional.isPresent()) { - throw new ResourceNotFoundException("Review not found for Game id,UserId :: " + gameId + "," + userId); + throw new ResourceNotFoundException("Review not found for Game id,UserId :: " + game.getGameId() + "," + user.getUserId()); } return optional.get(); diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewSaveSmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewSaveSmallBean.java index 5abc2a2c..b2a983f3 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewSaveSmallBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewSaveSmallBean.java @@ -1,7 +1,9 @@ package com.example.jsgamesbackendmain.Bean.SmallBean.ReviewBean; import com.example.jsgamesbackendmain.Controller.ExceptionControll.InvalidException; +import com.example.jsgamesbackendmain.Model.DAO.GameDAO; import com.example.jsgamesbackendmain.Model.DAO.ReviewDAO; +import com.example.jsgamesbackendmain.Model.DAO.UserDAO; import com.example.jsgamesbackendmain.Repository.ReviewRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -13,14 +15,18 @@ public class ReviewSaveSmallBean { private final ReviewRepository reviewRepository; - public ReviewDAO exec(ReviewDAO dao) { - Optional optional = reviewRepository.findByUserIdAndGameId(dao.getUserId(), dao.getGameId()); + public ReviewDAO exec(ReviewDAO review, UserDAO user, GameDAO game) { + Optional optional = reviewRepository.findByUserAndGame(user, game); //존재한다면 이미 존재하는 리뷰 에러 if (optional.isPresent()) { - throw new InvalidException("Review already exists for Game id,UserId :: " + dao.getGameId() + "," + dao.getUserId()); + ReviewDAO findReview = optional.get(); + throw new InvalidException("Review already exists for Game id,UserId :: " + findReview.getGame().getGameId() + "," + findReview.getUser().getUserId()); } - return reviewRepository.save(dao); + review.setUser(user); + review.setGame(game); + + return reviewRepository.save(review); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewUpdateSmallBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewUpdateSmallBean.java index 1c754362..0d8defaf 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewUpdateSmallBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/SmallBean/ReviewBean/ReviewUpdateSmallBean.java @@ -14,18 +14,10 @@ public class ReviewUpdateSmallBean { private final ReviewRepository reviewRepository; - public ReviewDAO exec(ReviewDAO dao, ReviewUpdateRequestDTO request) { - Optional optional = reviewRepository.findByUserIdAndGameId(dao.getUserId(), dao.getGameId()); - - //존재하지 않는다면 리뷰 업데이트 에러 - if (!optional.isPresent()) { - throw new InvalidException("Review not exists for Game id,UserId :: " + dao.getGameId() + "," + dao.getUserId()); - } - + public ReviewDAO exec(ReviewDAO review, ReviewUpdateRequestDTO request) { // 리뷰 내용 업데이트 - dao.update(request); - - return reviewRepository.save(dao); + review.update(request); + return reviewRepository.save(review); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Bean/UserBean/UserDeleteBean.java b/src/main/java/com/example/jsgamesbackendmain/Bean/UserBean/UserDeleteBean.java index 40f192e9..ef4956b1 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Bean/UserBean/UserDeleteBean.java +++ b/src/main/java/com/example/jsgamesbackendmain/Bean/UserBean/UserDeleteBean.java @@ -20,7 +20,7 @@ public class UserDeleteBean { public StateResponseDTO exec(String userId) { UserDAO user = UserGetByIdSmallBean.exec(userId); - if (!user.getProfileImageURL().equals("https://tinos-images-storage.s3.ap-northeast-2.amazonaws.com/default_user_image.png")) { + if (!user.getProfileImageURL().equals(UserDAO.builder().build().getProfileImageURL())) { s3DeleteSmallBeam.exec(user.getProfileImageURL()); } userDeleteSmallBean.exec(userId); diff --git a/src/main/java/com/example/jsgamesbackendmain/Controller/ExceptionControll/ExceptionController.java b/src/main/java/com/example/jsgamesbackendmain/Controller/ExceptionControll/ExceptionController.java index 1d586eed..e36ebe43 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Controller/ExceptionControll/ExceptionController.java +++ b/src/main/java/com/example/jsgamesbackendmain/Controller/ExceptionControll/ExceptionController.java @@ -1,14 +1,42 @@ package com.example.jsgamesbackendmain.Controller.ExceptionControll; import org.springframework.http.ResponseEntity; +import org.springframework.validation.BindingResult; +import org.springframework.validation.FieldError; +import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; +import javax.validation.ConstraintViolationException; import java.util.HashMap; import java.util.Map; @ControllerAdvice public class ExceptionController { + // @Validated 어노테이션을 사용한 유효성 검사에서 에러가 발생하면 + @ExceptionHandler(ConstraintViolationException.class) + public ResponseEntity> handlingToInValidException(ConstraintViolationException e) { + HashMap map = new HashMap<>(); + e.getConstraintViolations().forEach(error -> { + String key = error.getPropertyPath().toString(); + String message = error.getMessage(); + map.put(key, message); + }); + return ResponseEntity.status(404).body(map); + } + + + // @Valid 어노테이션을 사용한 유효성 검사에서 에러가 발생하면 + @ExceptionHandler(MethodArgumentNotValidException.class) + public ResponseEntity> handlingToInValidException(BindingResult result) { + HashMap map = new HashMap<>(); + result.getAllErrors().forEach(error -> { + String key = ((FieldError)error).getField(); + String message = error.getDefaultMessage(); + map.put(key, message); + }); + return ResponseEntity.status(404).body(map); + } @ExceptionHandler(ResourceNotFoundException.class) public ResponseEntity> resourceNotFoundException(ResourceNotFoundException e) { return exceptionHandler(e); diff --git a/src/main/java/com/example/jsgamesbackendmain/Controller/GameController.java b/src/main/java/com/example/jsgamesbackendmain/Controller/GameController.java index dbb9d515..95ba076a 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Controller/GameController.java +++ b/src/main/java/com/example/jsgamesbackendmain/Controller/GameController.java @@ -1,20 +1,25 @@ package com.example.jsgamesbackendmain.Controller; -import com.example.jsgamesbackendmain.Model.DTO.Game.GameDTO; import com.example.jsgamesbackendmain.Model.DTO.Game.Request.GameCreateRequestDTO; +import com.example.jsgamesbackendmain.Model.DTO.Game.Response.GameCreateResultDTO; import com.example.jsgamesbackendmain.Model.DTO.Game.Response.GameGetByGameIdResponseDTO; import com.example.jsgamesbackendmain.Model.DTO.Game.Response.GameListResponseDTO; +import com.example.jsgamesbackendmain.Model.ENUM.GameSort; import com.example.jsgamesbackendmain.Service.GameService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; import java.util.List; @RestController @RequiredArgsConstructor +@Validated @CrossOrigin("*") public class GameController { @@ -26,10 +31,31 @@ public class GameController { "scoreType이 GOAL인 경우 targetScore는 따로 지정하지 않으면 0입니다." ) @PostMapping("/game") - public GameDTO postGame(@Valid @RequestBody GameCreateRequestDTO gameCreateRequestDTO) { + public GameCreateResultDTO postGame(@Valid @RequestBody GameCreateRequestDTO gameCreateRequestDTO) { return gameService.postGame(gameCreateRequestDTO); } + // 게임 목록 조회 API + @Operation(summary = "게임 목록 조회 (페이징) ", description = + "# 게임 목록 조회 \n" + + "## 기본은 조회수 순으로 내림차순 정렬됩니다. \n" + + "### 지원되는 정렬 옵션은 `VIEW_COUNT`, `LOG_COUNT`, `RECENT`, `REVIEW_COUNT` 입니다. \n" + + "### 또한 모든 정렬은 내림차순으로 정렬됩니다." + + "정렬 옵션은 `sort` query string으로 전달해주세요. \n" + + "- VIEW_COUNT: 조회수 높은 순 \n" + + "- LOG_COUNT: 로그가 많은 순 \n" + + "- RECENT: 최신순 \n" + + "- REVIEW_COUNT: 리뷰 많은 순" + ) + @GetMapping("/games") + public List listGames( + @RequestParam @Min(0) Integer page, + @RequestParam @Min(0) @Max(10) Integer size, + @RequestParam(defaultValue = "VIEW_COUNT")GameSort sort + ) { + return gameService.listGames(page, size, sort); + } + // 특정 게임 조회 API @Operation(summary = "GameId로 게임 조회", description = "# GameId로 게임 조회시 조회수가 1 증가합니다." @@ -40,10 +66,15 @@ public GameGetByGameIdResponseDTO getGame(@PathVariable Long gameId) { } @Operation(summary = "특정 유저의 플레이한 게임 리스트 조회", description = - "# 특정 유저의 플레이한 게임 리스트 조회" + "# 특정 유저의 플레이한 게임 리스트 조회 \n " + + "본인이 했던 게임중 최근에 했던 게임부터 조회됩니다." ) @GetMapping("/game/user/{userId}") - public List listGamesByUser(@PathVariable String userId, @Parameter Long page, @Parameter Long size) { + public List listGamesByUser( + @PathVariable String userId, + @Parameter @Min(0) Integer page, + @Parameter @Min(0) @Max(10) Integer size + ) { return gameService.listGamesByUser(userId, page, size); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Controller/LogController.java b/src/main/java/com/example/jsgamesbackendmain/Controller/LogController.java index 6ed22de9..de7946ec 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Controller/LogController.java +++ b/src/main/java/com/example/jsgamesbackendmain/Controller/LogController.java @@ -8,12 +8,16 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; import java.util.List; @RestController @RequiredArgsConstructor +@Validated @CrossOrigin("*") public class LogController { @@ -26,7 +30,11 @@ public class LogController { "## scoreType이 `GOAL`인 경우 Log 조회시 targetScore와 가장 가까운 점수 순서대로 조회" ) @GetMapping("/logs/game/{gameId}") - public List getLogsByGameId(@PathVariable Long gameId, @Parameter Integer page, @Parameter Integer size) { + public List getLogsByGameId( + @PathVariable Long gameId, + @Parameter @Min(0) Integer page, + @Parameter @Min(0) @Max(10) Integer size + ) { return logService.getLogsByGameId(gameId, page, size); } diff --git a/src/main/java/com/example/jsgamesbackendmain/Controller/RankController.java b/src/main/java/com/example/jsgamesbackendmain/Controller/RankController.java index 053810b4..7484e198 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Controller/RankController.java +++ b/src/main/java/com/example/jsgamesbackendmain/Controller/RankController.java @@ -14,6 +14,8 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; import java.util.List; @RestController @@ -34,25 +36,20 @@ public class RankController { " (10등)270점 ~ (1등)450점" ) @GetMapping("/rank/users") - public RankGetResponseDTO getRank(@RequestParam Long page, @RequestParam Long size) { + public RankGetResponseDTO getRank( + @RequestParam @Min(0) Integer page, + @RequestParam @Min(0) @Max(10) Integer size + ) { return rankService.rankGet(page, size); } - - // 게임 목록 조회 API - @Operation(summary = "게임 랭킹 조회 (페이징) ", description = - "# 게임 랭킹 조회 \n" + - "## 조회수 순으로 내림차순 정렬됩니다." - ) - @GetMapping("/games") - public List listGames(@Parameter Long page, @Parameter Long size) { - return rankService.listGames(page, size); - } - @Operation(summary = "학과내 랭킹 조회") @GetMapping("/rank/major") - public RankByMajorGetResponseDTO getRankMajor(@RequestParam Major major) { - return rankService.rankGetByMajor(major); + public RankByMajorGetResponseDTO getRankMajor( + @RequestParam @Min(0) Integer page, + @RequestParam @Min(0) @Max(10) Integer size, + @RequestParam Major major) { + return rankService.rankGetByMajor(page, size, major); } @Operation(summary = "학과별 랭킹 조회") diff --git a/src/main/java/com/example/jsgamesbackendmain/Controller/ReviewController.java b/src/main/java/com/example/jsgamesbackendmain/Controller/ReviewController.java index 48502371..4ea90357 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Controller/ReviewController.java +++ b/src/main/java/com/example/jsgamesbackendmain/Controller/ReviewController.java @@ -15,13 +15,17 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; import java.util.List; import java.util.Map; @RestController @RequiredArgsConstructor +@Validated @CrossOrigin("*") public class ReviewController { @@ -74,8 +78,8 @@ public ReviewCreateResponseDTO postReview(@RequestBody ReviewCreateRequestDTO re @GetMapping("/review/game/{gameId}") public List listReviewsByGame( @PathVariable Long gameId, - @RequestParam Long page, - @RequestParam Long size, + @RequestParam @Min(0) Integer page, + @RequestParam @Min(0) @Max(10) Integer size, @RequestParam(defaultValue = "RECENT") ReviewSort sort) { return reviewService.listReviewsByGame(gameId, page, size, sort); } diff --git a/src/main/java/com/example/jsgamesbackendmain/Controller/TestController.java b/src/main/java/com/example/jsgamesbackendmain/Controller/TestController.java index 544562f6..0ecfb2fb 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Controller/TestController.java +++ b/src/main/java/com/example/jsgamesbackendmain/Controller/TestController.java @@ -29,6 +29,7 @@ public class TestController { public String emailClear(){ return testService.emailClear(); } + @Operation(summary = "Top100 테이블에 유저 세팅 (여러번 금지)", description = "# 여러번금지! (서버 과부하 걸릴수도) \n" + "## 또한 자동으로 오후 11시 50분 마다 자동으로 실행됨 \n" + @@ -44,12 +45,29 @@ public String emailClear(){ content = @Content(examples = @ExampleObject(value = "{'result': 'success'}"))) @PostMapping("/users/rank/set") - public Map setTop100Users() { + public StateResponseDTO setTop100Users() { return testService.setRank(); } + @Operation(summary = "전공의 따른 랭킹 세팅 (여러번 금지)", description = + "# 여러번금지! (서버 과부하 걸릴수도) \n" + + "## 또한 자동으로 오후 11시 55분 마다 자동으로 실행됨 \n" + + "### 각 Game마다 1~100등까지 결과들에 점수를 매겨 전체 게임 유저 랭킹을 조회 \n" + + "- 게임마다 100등부터 51등까지는 (50명) \n" + + " (100등)1점~(51등)50점 \n" + + "- 게임마다 50등부터 11등까지 5의 배수로 증가 (40명) \n" + + " (50등)55점~ (11등)250점 \n" + + "- 게임마다 10등 부터 1등까지 20의 배수로 증가 (10명) \n" + + " (10등)270점 ~ (1등)450점" + ) @PostMapping("/users/rank/set/major") public StateResponseDTO setMajor() { return testService.setMajor(); } + + @Operation(summary = "이미지 초기화") + @PostMapping("/image/set") + public StateResponseDTO setImage() { + return testService.setImage(); + } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Model/DAO/GameDAO.java b/src/main/java/com/example/jsgamesbackendmain/Model/DAO/GameDAO.java index ebc729cf..d14d4138 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Model/DAO/GameDAO.java +++ b/src/main/java/com/example/jsgamesbackendmain/Model/DAO/GameDAO.java @@ -2,8 +2,12 @@ import com.example.jsgamesbackendmain.Model.ENUM.ScoreType; import lombok.*; +import org.hibernate.annotations.CreationTimestamp; import javax.persistence.*; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; @Entity @Builder @@ -18,8 +22,13 @@ public class GameDAO { private String gameName; - @Setter - private String userId; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private UserDAO user; + + @OneToMany(mappedBy = "game", cascade = CascadeType.ALL) + @Builder.Default + private List reviews = new ArrayList<>(); @Builder.Default private String gameImage = "https://pbs.twimg.com/media/EA9UJBjU4AAdkCm.jpg"; @@ -34,12 +43,30 @@ public class GameDAO { //조회수 private Long viewCount = 0L; + //게임 생성일 + @CreationTimestamp + @Column(updatable = false) + private LocalDateTime createdAt; + + @OneToMany(mappedBy = "game", cascade = CascadeType.ALL) + @Builder.Default + private List logs = new ArrayList<>(); + + public void setUser(UserDAO user) { + this.user = user; + + List games = user.getGames(); + + if (!games.contains(this)) + games.add(this); + } + public Long increaseViewCount() { return ++viewCount; } - public static GameDAO createTest(int i) { - return GameDAO.builder() + public static GameDAO createTest(int i, UserDAO user) { + GameDAO newGame = GameDAO.builder() .gameName(String.valueOf(i)) .gameUrl(String.valueOf(i)) .targetScore((double) (i * 3 % 100)) @@ -47,5 +74,9 @@ public static GameDAO createTest(int i) { .description(String.valueOf(i)) .viewCount(((long) i)) .build(); + + newGame.setUser(user); + + return newGame; } } \ No newline at end of file diff --git a/src/main/java/com/example/jsgamesbackendmain/Model/DAO/HelpfulDAO.java b/src/main/java/com/example/jsgamesbackendmain/Model/DAO/HelpfulDAO.java index a098ab19..46f274a7 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Model/DAO/HelpfulDAO.java +++ b/src/main/java/com/example/jsgamesbackendmain/Model/DAO/HelpfulDAO.java @@ -17,10 +17,16 @@ public class HelpfulDAO { private Long helpfulId; @Setter - private String userId; + @OneToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private UserDAO user; + @Setter - private Long reviewId; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "review_id") + private ReviewDAO review; @Builder.Default private LocalDateTime helpfulTime = LocalDateTime.now(); + } diff --git a/src/main/java/com/example/jsgamesbackendmain/Model/DAO/LogDAO.java b/src/main/java/com/example/jsgamesbackendmain/Model/DAO/LogDAO.java index 85a2af35..5cf117ce 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Model/DAO/LogDAO.java +++ b/src/main/java/com/example/jsgamesbackendmain/Model/DAO/LogDAO.java @@ -1,8 +1,11 @@ package com.example.jsgamesbackendmain.Model.DAO; import lombok.*; +import org.hibernate.annotations.CreationTimestamp; import javax.persistence.*; +import java.time.LocalDateTime; +import java.util.List; @Entity @Table(name = "Logs") @@ -16,15 +19,46 @@ public class LogDAO { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long logId; - @Setter - private String userId; - @Setter - private Long gameId; + @ManyToOne + @JoinColumn(name = "user_id") + private UserDAO user; + + @ManyToOne + @JoinColumn(name = "game_id") + private GameDAO game; + + @CreationTimestamp + @Column(updatable = false) + private LocalDateTime createdAt; + private Double gameScore; - public static LogDAO createTest(int i) { - return LogDAO.builder() + public void setUser(UserDAO user) { + this.user = user; + + List logs = user.getLogs(); + + if (!logs.contains(this)) + logs.add(this); + } + + public void setGame(GameDAO game) { + this.game = game; + + List logs = game.getLogs(); + + if (!logs.contains(this)) + logs.add(this); + } + + public static LogDAO createTest(int i, GameDAO game, UserDAO user) { + LogDAO newLog = LogDAO.builder() .gameScore((double) i) .build(); + + newLog.setUser(user); + newLog.setGame(game); + + return newLog; } } \ No newline at end of file diff --git a/src/main/java/com/example/jsgamesbackendmain/Model/DAO/ReviewDAO.java b/src/main/java/com/example/jsgamesbackendmain/Model/DAO/ReviewDAO.java index 377c0822..2f5d8748 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Model/DAO/ReviewDAO.java +++ b/src/main/java/com/example/jsgamesbackendmain/Model/DAO/ReviewDAO.java @@ -7,6 +7,8 @@ import javax.persistence.*; import javax.validation.constraints.Max; import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; @Entity @Table(name = "reviews") @@ -20,10 +22,15 @@ public class ReviewDAO { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long reviewId; - @Setter - private String userId; - @Setter - private Long gameId; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private UserDAO user; + + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "game_id") + private GameDAO game; + private String reviewContent; // 별점 @@ -31,23 +38,49 @@ public class ReviewDAO { private Float star; // helpful + @Builder.Default private Long helpful = 0L; @CreationTimestamp @Column(updatable = false) private LocalDateTime dateTime; + @Builder.Default + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL) + private List helpfuls = new ArrayList<>(); + + public void setUser(UserDAO user) { + this.user = user; + + List reviews = user.getReviews(); + + if (!reviews.contains(this)) + reviews.add(this); + } + + public void setGame(GameDAO game) { + this.game = game; + + List reviews = game.getReviews(); + + if (!reviews.contains(this)) + reviews.add(this); + } + public void update(ReviewUpdateRequestDTO request) { this.reviewContent = request.getReviewContent(); } - public static ReviewDAO createTest(int i){ - return ReviewDAO.builder() - .userId("" + i) - .gameId((long) i) + public static ReviewDAO createTest(int i, GameDAO game, UserDAO user) { + ReviewDAO newReview = ReviewDAO.builder() .reviewContent(String.valueOf(i)) .star((float) i % 5 + 1) .helpful((long) i) .build(); + + newReview.setUser(user); + newReview.setGame(game); + + return newReview; } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Model/DAO/UserDAO.java b/src/main/java/com/example/jsgamesbackendmain/Model/DAO/UserDAO.java index 34b408f5..27d76e7b 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Model/DAO/UserDAO.java +++ b/src/main/java/com/example/jsgamesbackendmain/Model/DAO/UserDAO.java @@ -8,6 +8,8 @@ import lombok.*; import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; @Entity @Table(name = "users") @@ -30,6 +32,18 @@ public class UserDAO { @Enumerated(EnumType.STRING) private Major major; + @Builder.Default + @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) + private List games = new ArrayList<>(); + + @Builder.Default + @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) + private List logs = new ArrayList<>(); + + @Builder.Default + @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) + private List reviews = new ArrayList<>(); + public UserDAO update(UserUpdateRequestDTO request, ParentMajor parentMajor) { if (request.getNickname() != null) { this.nickname = request.getNickname(); diff --git a/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Game/GameDTO.java b/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Game/GameDTO.java deleted file mode 100644 index e9903939..00000000 --- a/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Game/GameDTO.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.example.jsgamesbackendmain.Model.DTO.Game; - -import com.example.jsgamesbackendmain.Model.DAO.GameDAO; -import com.example.jsgamesbackendmain.Model.ENUM.ScoreType; -import lombok.*; - -@Getter -@Builder -@AllArgsConstructor -@NoArgsConstructor -public class GameDTO { - - private Long gameId; - private String gameName; - private String userId; - private String imageUrl; - private String gameUrl; - private Double targetScore; - private ScoreType scoreType; - private String description; - - public static GameDTO of(GameDAO gameDAO) { - return GameDTO.builder() - .gameId(gameDAO.getGameId()) - .gameName(gameDAO.getGameName()) - .userId(gameDAO.getUserId()) - .imageUrl(gameDAO.getGameImage()) - .gameUrl(gameDAO.getGameUrl()) - .targetScore(gameDAO.getTargetScore()) - .scoreType(gameDAO.getScoreType()) - .description(gameDAO.getDescription()) - .build(); - } -} diff --git a/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Game/Request/GameCreateRequestDTO.java b/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Game/Request/GameCreateRequestDTO.java index 034e752f..75462279 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Game/Request/GameCreateRequestDTO.java +++ b/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Game/Request/GameCreateRequestDTO.java @@ -24,7 +24,6 @@ public class GameCreateRequestDTO { public GameDAO toDAO() { return GameDAO.builder() .gameName(this.getGameName()) - .userId(this.getUserId()) .gameImage(this.getImageUrl()) .gameUrl(this.getGameUrl()) .targetScore(this.getTargetScore()) @@ -36,7 +35,7 @@ public GameDAO toDAO() { public static GameCreateRequestDTO of(GameDAO gameDAO) { return GameCreateRequestDTO.builder() .gameName(gameDAO.getGameName()) - .userId(gameDAO.getUserId()) + .userId(gameDAO.getUser().getUserId()) .imageUrl(gameDAO.getGameImage()) .gameUrl(gameDAO.getGameUrl()) .targetScore(gameDAO.getTargetScore()) diff --git a/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Game/Response/GameCreateResultDTO.java b/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Game/Response/GameCreateResultDTO.java new file mode 100644 index 00000000..33fe2776 --- /dev/null +++ b/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Game/Response/GameCreateResultDTO.java @@ -0,0 +1,44 @@ +package com.example.jsgamesbackendmain.Model.DTO.Game.Response; + +import com.example.jsgamesbackendmain.Model.DAO.GameDAO; +import com.example.jsgamesbackendmain.Model.ENUM.ScoreType; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Getter +public class GameCreateResultDTO { + private Long gameId; + private String gameName; + private String userId; + private String imageUrl; + private String gameUrl; + private Double targetScore; + private ScoreType scoreType; + private String description; + private Long viewCount; + private LocalDateTime createdAt; + private Double star; + + public static GameCreateResultDTO of(GameDAO gameDAO){ + return GameCreateResultDTO.builder() + .gameId(gameDAO.getGameId()) + .gameName(gameDAO.getGameName()) + .userId(gameDAO.getUser().getUserId()) + .imageUrl(gameDAO.getGameImage()) + .gameUrl(gameDAO.getGameUrl()) + .targetScore(gameDAO.getTargetScore()) + .scoreType(gameDAO.getScoreType()) + .description(gameDAO.getDescription()) + .viewCount(gameDAO.getViewCount()) + .createdAt(gameDAO.getCreatedAt()) + .star(0.0) + .build(); + } +} diff --git a/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Game/Response/GameGetByGameIdResponseDTO.java b/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Game/Response/GameGetByGameIdResponseDTO.java index a59c9d7f..44bd1485 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Game/Response/GameGetByGameIdResponseDTO.java +++ b/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Game/Response/GameGetByGameIdResponseDTO.java @@ -4,6 +4,8 @@ import com.example.jsgamesbackendmain.Model.ENUM.ScoreType; import lombok.*; +import java.time.LocalDateTime; + @Getter @Builder @NoArgsConstructor @@ -18,19 +20,21 @@ public class GameGetByGameIdResponseDTO { private ScoreType scoreType; private String description; private Long viewCount; + private LocalDateTime createdAt; private Double star; public static GameGetByGameIdResponseDTO of(GameDAO gameDAO, Double star){ return GameGetByGameIdResponseDTO.builder() .gameId(gameDAO.getGameId()) .gameName(gameDAO.getGameName()) - .userId(gameDAO.getUserId()) + .userId(gameDAO.getUser().getUserId()) .imageUrl(gameDAO.getGameImage()) .gameUrl(gameDAO.getGameUrl()) .targetScore(gameDAO.getTargetScore()) .scoreType(gameDAO.getScoreType()) .description(gameDAO.getDescription()) .viewCount(gameDAO.getViewCount()) + .createdAt(gameDAO.getCreatedAt()) .star(star) .build(); } diff --git a/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Game/Response/GameListResponseDTO.java b/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Game/Response/GameListResponseDTO.java index 777e1973..9e4976d4 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Game/Response/GameListResponseDTO.java +++ b/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Game/Response/GameListResponseDTO.java @@ -3,6 +3,11 @@ import com.example.jsgamesbackendmain.Model.DAO.GameDAO; import com.example.jsgamesbackendmain.Model.ENUM.ScoreType; import lombok.*; +import org.springframework.data.domain.Page; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.stream.Collectors; @Getter @Builder @@ -17,19 +22,28 @@ public class GameListResponseDTO { private Double targetScore; private ScoreType scoreType; private String description; + private LocalDateTime createdAt; private Long viewCount; public static GameListResponseDTO of(GameDAO gameDAO){ return GameListResponseDTO.builder() .gameId(gameDAO.getGameId()) .gameName(gameDAO.getGameName()) - .userId(gameDAO.getUserId()) + .userId(gameDAO.getUser().getUserId()) .gameImage(gameDAO.getGameImage()) .gameUrl(gameDAO.getGameUrl()) .targetScore(gameDAO.getTargetScore()) .scoreType(gameDAO.getScoreType()) .description(gameDAO.getDescription()) + .createdAt(gameDAO.getCreatedAt()) .viewCount(gameDAO.getViewCount()) .build(); } + + public static List listOf(Page page){ + return page.toList() + .stream() + .map(GameListResponseDTO::of) + .collect(Collectors.toList()); + } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Log/Request/LogPostRequestDTO.java b/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Log/Request/LogPostRequestDTO.java index 56e6df0d..78ac0d3e 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Log/Request/LogPostRequestDTO.java +++ b/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Log/Request/LogPostRequestDTO.java @@ -18,16 +18,14 @@ public class LogPostRequestDTO { public LogDAO toDAO() { return LogDAO.builder() - .userId(this.getUserId()) - .gameId(this.getGameId()) .gameScore(this.getGameScore()) .build(); } public static LogPostRequestDTO of(LogDAO logDAO) { return LogPostRequestDTO.builder() - .userId(logDAO.getUserId()) - .gameId(logDAO.getGameId()) + .userId(logDAO.getUser().getUserId()) + .gameId(logDAO.getGame().getGameId()) .gameScore(logDAO.getGameScore()) .build(); } diff --git a/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Log/Response/LogGetByGameIdResponseDTO.java b/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Log/Response/LogGetByGameIdResponseDTO.java index a4660f13..b454b635 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Log/Response/LogGetByGameIdResponseDTO.java +++ b/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Log/Response/LogGetByGameIdResponseDTO.java @@ -5,6 +5,8 @@ import com.example.jsgamesbackendmain.Model.DTO.User.Reponse.UserLogResponseDTO; import lombok.*; +import java.time.LocalDateTime; + @Getter @Builder @NoArgsConstructor @@ -13,14 +15,16 @@ public class LogGetByGameIdResponseDTO { private Long logId; private Long gameId; private Double gameScore; + private LocalDateTime createdAt; private UserLogResponseDTO user; - public static LogGetByGameIdResponseDTO of(LogDAO logDAO, UserDAO userDAO) { + public static LogGetByGameIdResponseDTO of(LogDAO logDAO) { return LogGetByGameIdResponseDTO.builder() .logId(logDAO.getLogId()) - .gameId(logDAO.getGameId()) + .gameId(logDAO.getGame().getGameId()) .gameScore(logDAO.getGameScore()) - .user(UserLogResponseDTO.of(userDAO)) + .createdAt(logDAO.getCreatedAt()) + .user(UserLogResponseDTO.of(logDAO.getUser())) .build(); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Log/Response/LogGetByGameIdUserIdResponseDTO.java b/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Log/Response/LogGetByGameIdUserIdResponseDTO.java index 6e9198b5..79076d26 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Log/Response/LogGetByGameIdUserIdResponseDTO.java +++ b/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Log/Response/LogGetByGameIdUserIdResponseDTO.java @@ -8,6 +8,8 @@ import lombok.Getter; import lombok.NoArgsConstructor; +import java.time.LocalDateTime; + @Getter @Builder @AllArgsConstructor @@ -16,14 +18,16 @@ public class LogGetByGameIdUserIdResponseDTO { private Long logId; private Long gameId; private Double gameScore; + private LocalDateTime createdAt; private UserLogResponseDTO user; private Long ranking; public static LogGetByGameIdUserIdResponseDTO of(LogDAO logDAO, UserDAO userDAO, Long ranking) { return LogGetByGameIdUserIdResponseDTO.builder() .logId(logDAO.getLogId()) - .gameId(logDAO.getGameId()) + .gameId(logDAO.getGame().getGameId()) .gameScore(logDAO.getGameScore()) + .createdAt(logDAO.getCreatedAt()) .user(UserLogResponseDTO.of(userDAO)) .ranking(ranking) .build(); diff --git a/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Log/Response/LogGetByUserIdResponseDTO.java b/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Log/Response/LogGetByUserIdResponseDTO.java index ac2fe0dc..696f0bae 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Log/Response/LogGetByUserIdResponseDTO.java +++ b/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Log/Response/LogGetByUserIdResponseDTO.java @@ -1,13 +1,14 @@ package com.example.jsgamesbackendmain.Model.DTO.Log.Response; import com.example.jsgamesbackendmain.Model.DAO.LogDAO; -import com.example.jsgamesbackendmain.Model.DAO.UserDAO; import com.example.jsgamesbackendmain.Model.DTO.User.Reponse.UserLogResponseDTO; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import java.time.LocalDateTime; + @Getter @Builder @AllArgsConstructor @@ -16,14 +17,16 @@ public class LogGetByUserIdResponseDTO { private Long logId; private Long gameId; private Double gameScore; + private LocalDateTime createdAt; private UserLogResponseDTO user; - public static LogGetByUserIdResponseDTO of(LogDAO logDAO, UserDAO userDAO) { + public static LogGetByUserIdResponseDTO of(LogDAO log) { return LogGetByUserIdResponseDTO.builder() - .logId(logDAO.getLogId()) - .gameId(logDAO.getGameId()) - .gameScore(logDAO.getGameScore()) - .user(UserLogResponseDTO.of(userDAO)) + .logId(log.getLogId()) + .gameId(log.getGame().getGameId()) + .gameScore(log.getGameScore()) + .createdAt(log.getCreatedAt()) + .user(UserLogResponseDTO.of(log.getUser())) .build(); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Log/Response/LogPostResponseDTO.java b/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Log/Response/LogPostResponseDTO.java index a784e591..4b187575 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Log/Response/LogPostResponseDTO.java +++ b/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Log/Response/LogPostResponseDTO.java @@ -8,6 +8,8 @@ import lombok.Getter; import lombok.NoArgsConstructor; +import java.time.LocalDateTime; + @Getter @Builder @NoArgsConstructor @@ -16,14 +18,16 @@ public class LogPostResponseDTO { private Long logId; private Long gameId; private Double gameScore; + private LocalDateTime createdAt; private UserLogResponseDTO user; - public static LogPostResponseDTO of(LogDAO logDAO, UserDAO userDAO) { + public static LogPostResponseDTO of(LogDAO logDAO) { return LogPostResponseDTO.builder() .logId(logDAO.getLogId()) - .gameId(logDAO.getGameId()) + .gameId(logDAO.getGame().getGameId()) .gameScore(logDAO.getGameScore()) - .user(UserLogResponseDTO.of(userDAO)) + .createdAt(logDAO.getCreatedAt()) + .user(UserLogResponseDTO.of(logDAO.getUser())) .build(); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Review/Request/ReviewCreateRequestDTO.java b/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Review/Request/ReviewCreateRequestDTO.java index eb099e65..0196aa0f 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Review/Request/ReviewCreateRequestDTO.java +++ b/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Review/Request/ReviewCreateRequestDTO.java @@ -19,8 +19,6 @@ public class ReviewCreateRequestDTO { public ReviewDAO toDAO() { return ReviewDAO.builder() - .userId(this.getUserId()) - .gameId(this.getGameId()) .reviewContent(this.getReviewContent()) .star(this.getStar()) .build(); @@ -28,8 +26,8 @@ public ReviewDAO toDAO() { public static ReviewCreateRequestDTO of(ReviewDAO reviewDAO) { return ReviewCreateRequestDTO.builder() - .userId(reviewDAO.getUserId()) - .gameId(reviewDAO.getGameId()) + .userId(reviewDAO.getUser().getUserId()) + .gameId(reviewDAO.getGame().getGameId()) .reviewContent(reviewDAO.getReviewContent()) .star(reviewDAO.getStar()) .build(); diff --git a/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Review/Response/ReviewCreateResponseDTO.java b/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Review/Response/ReviewCreateResponseDTO.java index 559a967e..5483b01a 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Review/Response/ReviewCreateResponseDTO.java +++ b/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Review/Response/ReviewCreateResponseDTO.java @@ -35,8 +35,8 @@ public static ReviewCreateResponseDTO of(ReviewDAO review) { .star(review.getStar()) .helpful(review.getHelpful()) .dateTime(review.getDateTime()) - .userId(review.getUserId()) - .gameId(review.getGameId()) + .userId(review.getUser().getUserId()) + .gameId(review.getGame().getGameId()) .build(); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Review/Response/ReviewGetByGameIdResponseDTO.java b/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Review/Response/ReviewGetByGameIdResponseDTO.java index 97cbd9f0..c349ecd3 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Review/Response/ReviewGetByGameIdResponseDTO.java +++ b/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Review/Response/ReviewGetByGameIdResponseDTO.java @@ -29,15 +29,15 @@ public class ReviewGetByGameIdResponseDTO { private Long gameId; - public static ReviewGetByGameIdResponseDTO of(ReviewDAO reviewDAO, UserDAO userDAO) { + public static ReviewGetByGameIdResponseDTO of(ReviewDAO reviewDAO) { return ReviewGetByGameIdResponseDTO.builder() .reviewId(reviewDAO.getReviewId()) .reviewContent(reviewDAO.getReviewContent()) .star(reviewDAO.getStar()) .helpful(reviewDAO.getHelpful()) .dateTime(reviewDAO.getDateTime()) - .user(UserGetResponseDTO.of(userDAO)) - .gameId(reviewDAO.getGameId()) + .user(UserGetResponseDTO.of(reviewDAO.getUser())) + .gameId(reviewDAO.getGame().getGameId()) .build(); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Review/Response/ReviewUpdateResponseDTO.java b/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Review/Response/ReviewUpdateResponseDTO.java index 1363fb7b..3d0e164b 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Review/Response/ReviewUpdateResponseDTO.java +++ b/src/main/java/com/example/jsgamesbackendmain/Model/DTO/Review/Response/ReviewUpdateResponseDTO.java @@ -33,8 +33,8 @@ public static ReviewUpdateResponseDTO of(ReviewDAO review) { .star(review.getStar()) .helpful(review.getHelpful()) .dateTime(review.getDateTime()) - .userId(review.getUserId()) - .gameId(review.getGameId()) + .userId(review.getUser().getUserId()) + .gameId(review.getGame().getGameId()) .build(); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Model/ENUM/GameSort.java b/src/main/java/com/example/jsgamesbackendmain/Model/ENUM/GameSort.java new file mode 100644 index 00000000..5bb0b00f --- /dev/null +++ b/src/main/java/com/example/jsgamesbackendmain/Model/ENUM/GameSort.java @@ -0,0 +1,5 @@ +package com.example.jsgamesbackendmain.Model.ENUM; + +public enum GameSort { + VIEW_COUNT, LOG_COUNT, RECENT, REVIEW_COUNT, +} diff --git a/src/main/java/com/example/jsgamesbackendmain/Repository/GameRepository.java b/src/main/java/com/example/jsgamesbackendmain/Repository/GameRepository.java index 0e3272c9..6eb2bf1c 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Repository/GameRepository.java +++ b/src/main/java/com/example/jsgamesbackendmain/Repository/GameRepository.java @@ -1,24 +1,33 @@ package com.example.jsgamesbackendmain.Repository; import com.example.jsgamesbackendmain.Model.DAO.GameDAO; +import com.example.jsgamesbackendmain.Model.DAO.UserDAO; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public interface GameRepository extends JpaRepository { // 게임 조회수 순으로 정렬 Page findAllByOrderByViewCountDescGameIdAsc(Pageable pageable); - // GameDAO 의 logDAO중 userId가 일치하는 게임 조회 - @Query("select g from GameDAO g where g.gameId in " + - "(select l.gameId from LogDAO l where l.userId = ?1) " + - "order by g.viewCount desc, g.gameId") - Page findAllByPlayedUserOrderByViewCountDescGameIdAsc(String userId, Pageable pageable); + // 게임 Log 갯수순으로 정렬 + @Query("select g from GameDAO g order by g.logs.size desc, g.gameId") + Page findAllByOrderByLogCountDescGameIdAsc(Pageable pageable); + + // 게임 생성일 순으로 정렬 + Page findAllByOrderByCreatedAtDescGameIdAsc(Pageable pageable); + + // 게임 리뷰 갯수순으로 정렬 + @Query("select g from GameDAO g order by g.reviews.size desc, g.gameId") + Page findAllByOrderByReviewCountDescGameIdAsc(Pageable pageable); - // 게임 전체 페이징 조회 - Page findAll(Pageable pageable); + // userId가 플레이한 게임 의 log중 가장 최근에 gameId 조회 + @Query("select g from GameDAO g left join g.logs l where l.user = ?1 group by g.gameId order by max(l.createdAt) desc, g.gameId asc") + Page findAllByPlayedUserOrderByCreatedAtDescGameIdAsc(UserDAO user, Pageable pageable); } \ No newline at end of file diff --git a/src/main/java/com/example/jsgamesbackendmain/Repository/HelpfulRepository.java b/src/main/java/com/example/jsgamesbackendmain/Repository/HelpfulRepository.java index a746dfe9..5cdfdeef 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Repository/HelpfulRepository.java +++ b/src/main/java/com/example/jsgamesbackendmain/Repository/HelpfulRepository.java @@ -1,6 +1,8 @@ package com.example.jsgamesbackendmain.Repository; import com.example.jsgamesbackendmain.Model.DAO.HelpfulDAO; +import com.example.jsgamesbackendmain.Model.DAO.ReviewDAO; +import com.example.jsgamesbackendmain.Model.DAO.UserDAO; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.transaction.annotation.Transactional; @@ -8,8 +10,8 @@ public interface HelpfulRepository extends JpaRepository { //userId, reviewId로 조회 - Optional findByUserIdAndReviewId(String userId, Long reviewId); + Optional findByUserAndReview(UserDAO user, ReviewDAO review); //userId, reviewId로 삭제 @Transactional - void deleteByUserIdAndReviewId(String userId, Long reviewId); + void deleteByUserAndReview(UserDAO user, ReviewDAO review); } diff --git a/src/main/java/com/example/jsgamesbackendmain/Repository/LogRepository.java b/src/main/java/com/example/jsgamesbackendmain/Repository/LogRepository.java index 413f61b6..e7ec5c0d 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Repository/LogRepository.java +++ b/src/main/java/com/example/jsgamesbackendmain/Repository/LogRepository.java @@ -1,44 +1,45 @@ package com.example.jsgamesbackendmain.Repository; +import com.example.jsgamesbackendmain.Model.DAO.GameDAO; import com.example.jsgamesbackendmain.Model.DAO.LogDAO; +import com.example.jsgamesbackendmain.Model.DAO.UserDAO; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; -import java.util.List; import java.util.Optional; @Repository public interface LogRepository extends JpaRepository { // GameId for Count - Long countByGameId(Long gameId); + Long countByGame(GameDAO game); //GameId, UserId 조회 - Page findByGameIdAndUserId(Long gameId, String userId, Pageable pageable); + Page findByGameAndUser(GameDAO game, UserDAO user, Pageable pageable); // INFINITE GameId로 페이징후 가져오기 - Page findByGameIdOrderByGameScoreDesc(Long gameId, Pageable pageable); + Page findByGameOrderByGameScoreDesc(GameDAO game, Pageable pageable); // GOAL GameId로 페이징후 가져오기 // 목표 점수와 가까운 순으로 정렬 - @Query(value = "SELECT r FROM LogDAO r WHERE r.gameId = ?1 ORDER BY ABS(r.gameScore - ?2) ASC, r.logId ASC") - Page findByGameIdOrderByGameScoreWithTargetScore(Long gameId, Double targetScore, Pageable pageable); + @Query(value = "SELECT r FROM LogDAO r WHERE r.game = ?1 ORDER BY ABS(r.gameScore - ?2) ASC, r.logId ASC") + Page findByGameOrderByGameScoreWithTargetScore(GameDAO game, Double targetScore, Pageable pageable); // UserId로 페이징후 가져오기 - Page findByUserIdOrderByGameScoreDesc(String userId, Pageable pageable); + Page findByUserOrderByGameScoreDesc(UserDAO user, Pageable pageable); // GameId UserId 중 gameScore가 가장큰 튜플 가져오기 - Optional findFirstByGameIdAndUserIdOrderByGameScoreDesc(Long gameId, String userId); + Optional findFirstByGameAndUserOrderByGameScoreDesc(GameDAO game, UserDAO user); // GameId UserId 중 targetScore와 gameScore의 차이가 가장 적은 튜플 가져오기 - @Query("SELECT r FROM LogDAO r WHERE r.gameId = ?1 AND r.userId = ?2 ORDER BY ABS(r.gameScore - ?3)") - Page findFirstByGameIdAndUserIdOrderByGameScoreWithTargetScore(Long gameId, String userId, Double targetScore, Pageable pageable); - @Query("select count(r) from LogDAO r where r.gameScore >= ?1 and r.gameId = ?2") - Long getRankInfinite(Double gameScore, Long gameId); + @Query("SELECT r FROM LogDAO r WHERE r.game = ?1 AND r.user = ?2 ORDER BY ABS(r.gameScore - ?3)") + Page findFirstByGameIdAndUserIdOrderByGameScoreWithTargetScore(GameDAO game, UserDAO user, Double targetScore, Pageable pageable); + @Query("select count(r) from LogDAO r where r.gameScore >= ?1 and r.game = ?2") + Long getRankInfinite(Double gameScore, GameDAO game); - @Query("select count(r) from LogDAO r where abs(?1 - r.gameScore) <= abs(?1 - ?2) and r.gameId = ?3") - Long getRankGoal(Double targetScore, Double gameScore, Long gameId); + @Query("select count(r) from LogDAO r where abs(?1 - r.gameScore) <= abs(?1 - ?2) and r.game = ?3") + Long getRankGoal(Double targetScore, Double gameScore, GameDAO game); } diff --git a/src/main/java/com/example/jsgamesbackendmain/Repository/RankMajorRepository.java b/src/main/java/com/example/jsgamesbackendmain/Repository/RankMajorRepository.java index 92b358cf..2faf1fd3 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Repository/RankMajorRepository.java +++ b/src/main/java/com/example/jsgamesbackendmain/Repository/RankMajorRepository.java @@ -2,6 +2,8 @@ import com.example.jsgamesbackendmain.Model.DAO.RankMajorDAO; import com.example.jsgamesbackendmain.Model.ENUM.Major; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; @@ -18,7 +20,7 @@ public interface RankMajorRepository extends JpaRepository { "ORDER BY rankWeight desc;\n", nativeQuery = true) List> findAllByMajorASC(); - List findAllByMajorOrderByTotalRankAsc(Major major); + Page findAllByMajorOrderByTotalRankAsc(Pageable pageable, Major major); @Query(value = "SELECT user_id, major\n" + // 모든 게임의 1등부터 100등까지의 가중치를 더함 diff --git a/src/main/java/com/example/jsgamesbackendmain/Repository/ReviewRepository.java b/src/main/java/com/example/jsgamesbackendmain/Repository/ReviewRepository.java index b15ac9e9..a99296fd 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Repository/ReviewRepository.java +++ b/src/main/java/com/example/jsgamesbackendmain/Repository/ReviewRepository.java @@ -1,6 +1,8 @@ package com.example.jsgamesbackendmain.Repository; +import com.example.jsgamesbackendmain.Model.DAO.GameDAO; import com.example.jsgamesbackendmain.Model.DAO.ReviewDAO; +import com.example.jsgamesbackendmain.Model.DAO.UserDAO; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; @@ -14,11 +16,11 @@ public interface ReviewRepository extends JpaRepository { //gameId 로 review의 star 평균 - @Query("SELECT AVG(r.star) FROM ReviewDAO r WHERE r.gameId = ?1") - Optional findAvgStarByGameId(Long gameId); + @Query("SELECT AVG(r.star) FROM ReviewDAO r WHERE r.game = ?1") + Optional findAvgStarByGame(GameDAO game); //userId 와 gameId 로 review 찾기 - Optional findByUserIdAndGameId(String userId, Long gameId); + Optional findByUserAndGame(UserDAO user, GameDAO game); //reviewID 의 helpful +1 @Modifying @Query("UPDATE ReviewDAO r SET r.helpful = r.helpful + 1 WHERE r.reviewId = ?1") @@ -30,8 +32,8 @@ public interface ReviewRepository extends JpaRepository { void updateHelpfulMinus(Long reviewId); - Page findByGameIdOrderByHelpfulDescDateTimeDescReviewIdDesc(Long gameId, Pageable pageable); - Page findByGameIdOrderByStarDescDateTimeDescReviewIdDesc(Long gameId, Pageable pageable); - Page findByGameIdOrderByDateTimeDescReviewIdDesc(Long gameId, Pageable pageable); - Page findByGameIdOrderByDateTimeAscReviewIdDesc(Long gameId, Pageable pageable); + Page findByGameOrderByHelpfulDescDateTimeDescReviewIdDesc(GameDAO game, Pageable pageable); + Page findByGameOrderByStarDescDateTimeDescReviewIdDesc(GameDAO game, Pageable pageable); + Page findByGameOrderByDateTimeDescReviewIdDesc(GameDAO game, Pageable pageable); + Page findByGameOrderByDateTimeAscReviewIdDesc(GameDAO game, Pageable pageable); } \ No newline at end of file diff --git a/src/main/java/com/example/jsgamesbackendmain/Service/GameService.java b/src/main/java/com/example/jsgamesbackendmain/Service/GameService.java index 7b5531a7..90237f6e 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Service/GameService.java +++ b/src/main/java/com/example/jsgamesbackendmain/Service/GameService.java @@ -2,13 +2,16 @@ import com.example.jsgamesbackendmain.Bean.GameBean.GameGetBean; import com.example.jsgamesbackendmain.Bean.GameBean.GameGetListByPlayedUser; +import com.example.jsgamesbackendmain.Bean.GameBean.GameListBean; import com.example.jsgamesbackendmain.Bean.GameBean.GamePostBean; -import com.example.jsgamesbackendmain.Model.DTO.Game.GameDTO; import com.example.jsgamesbackendmain.Model.DTO.Game.Request.GameCreateRequestDTO; +import com.example.jsgamesbackendmain.Model.DTO.Game.Response.GameCreateResultDTO; import com.example.jsgamesbackendmain.Model.DTO.Game.Response.GameGetByGameIdResponseDTO; import com.example.jsgamesbackendmain.Model.DTO.Game.Response.GameListResponseDTO; +import com.example.jsgamesbackendmain.Model.ENUM.GameSort; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -16,19 +19,26 @@ @RequiredArgsConstructor public class GameService { private final GamePostBean gamePostBean; + private final GameListBean gameListBean; private final GameGetBean gameGetBean; private final GameGetListByPlayedUser gameGetListByPlayedUser; - - public GameDTO postGame(GameCreateRequestDTO gameCreateRequestDTO) { + @Transactional + public GameCreateResultDTO postGame(GameCreateRequestDTO gameCreateRequestDTO) { return gamePostBean.exec(gameCreateRequestDTO); } + @Transactional + public List listGames(Integer page, Integer size, GameSort sort) { + return gameListBean.exec(page, size, sort); + } + @Transactional public GameGetByGameIdResponseDTO getGame(Long gameId) { return gameGetBean.exec(gameId); } - public List listGamesByUser(String userId, Long page, Long size) { + @Transactional + public List listGamesByUser(String userId, Integer page, Integer size) { return gameGetListByPlayedUser.exec(userId, page, size); } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Service/HelpfulService.java b/src/main/java/com/example/jsgamesbackendmain/Service/HelpfulService.java index fbce28c4..44512c8f 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Service/HelpfulService.java +++ b/src/main/java/com/example/jsgamesbackendmain/Service/HelpfulService.java @@ -7,6 +7,7 @@ import com.example.jsgamesbackendmain.Model.DTO.StateResponseDTO; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Service @RequiredArgsConstructor @@ -16,16 +17,19 @@ public class HelpfulService { private final HelpfulDeleteBean helpfulDeleteBean; // 특정 유저와 특정 리뷰의 도움이 되었는지 여부 조회 API + @Transactional public HelpfulGetResponseDTO getHelpful(String userId, Long reviewId) { return helpfulGetBean.exec(userId, reviewId); } // 특정 유저와 특정 리뷰의 도움이 되었는지 여부 추가 API + @Transactional public StateResponseDTO postHelpful(String userId, Long reviewId) { return helpfulPostBean.exec(userId, reviewId); } // 특정 유저와 특정 리뷰의 도움이 되었는지 여부 삭제 API + @Transactional public StateResponseDTO deleteHelpful(String userId, Long reviewId) { return helpfulDeleteBean.exec(userId, reviewId); } diff --git a/src/main/java/com/example/jsgamesbackendmain/Service/ImageService.java b/src/main/java/com/example/jsgamesbackendmain/Service/ImageService.java index 86217f45..6d919cfe 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Service/ImageService.java +++ b/src/main/java/com/example/jsgamesbackendmain/Service/ImageService.java @@ -6,6 +6,7 @@ import com.example.jsgamesbackendmain.Model.DTO.StateResponseDTO; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; @@ -17,10 +18,11 @@ public class ImageService { private final S3DeletImageBean s3DeletImageBean; + @Transactional public S3UrlResponseDTO uploadImage(MultipartFile file) throws IOException { return s3UploadImageBean.exec(file); } - + @Transactional public StateResponseDTO deleteImage(String fileUrl) { return s3DeletImageBean.exec(fileUrl); } diff --git a/src/main/java/com/example/jsgamesbackendmain/Service/LogService.java b/src/main/java/com/example/jsgamesbackendmain/Service/LogService.java index e103aa0b..a2116d1b 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Service/LogService.java +++ b/src/main/java/com/example/jsgamesbackendmain/Service/LogService.java @@ -11,6 +11,7 @@ import com.example.jsgamesbackendmain.Model.DTO.Log.Response.LogPostResponseDTO; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -23,18 +24,22 @@ public class LogService { private final LogGetByGamIdUserIdBean logGetByGamIdUserIdBean; private final LogPostBean logPostBean; + @Transactional public LogPostResponseDTO postLog(LogPostRequestDTO logPostRequestDTO) { return logPostBean.exec(logPostRequestDTO); } + @Transactional public List getLogsByGameId(Long gameId, Integer page, Integer size) { return logGetByGameIdBean.exec(gameId, page, size); } - public List getLogsByUserId(String userId, Long page, Long size) { + @Transactional + public List getLogsByUserId(String userId, Integer page, Integer size) { return logGetByUserIdBean.exec(userId, page, size); } + @Transactional public LogGetByGameIdUserIdResponseDTO getLogByGameIdUserId(Long gameId, String userId) { return logGetByGamIdUserIdBean.exec(gameId, userId); } diff --git a/src/main/java/com/example/jsgamesbackendmain/Service/RankService.java b/src/main/java/com/example/jsgamesbackendmain/Service/RankService.java index 8179104a..bb181d95 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Service/RankService.java +++ b/src/main/java/com/example/jsgamesbackendmain/Service/RankService.java @@ -1,40 +1,35 @@ package com.example.jsgamesbackendmain.Service; -import com.example.jsgamesbackendmain.Bean.GameBean.GameListBean; import com.example.jsgamesbackendmain.Bean.RankBean.RankGetBean; import com.example.jsgamesbackendmain.Bean.RankBean.RankGetByMajorBean; import com.example.jsgamesbackendmain.Bean.RankBean.RankGetRankMajorBean; -import com.example.jsgamesbackendmain.Model.DTO.Game.Response.GameListResponseDTO; -import com.example.jsgamesbackendmain.Model.DTO.Rank.Response.RankGetResponseDTO; import com.example.jsgamesbackendmain.Model.DTO.Rank.Response.RankByMajorGetResponseDTO; +import com.example.jsgamesbackendmain.Model.DTO.Rank.Response.RankGetResponseDTO; import com.example.jsgamesbackendmain.Model.DTO.Rank.Response.RankMajorGetResponseDTO; import com.example.jsgamesbackendmain.Model.ENUM.Major; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; - -import java.util.List; +import org.springframework.transaction.annotation.Transactional; @Service @RequiredArgsConstructor public class RankService { private final RankGetBean rankGetBean; - private final GameListBean gameListBean; private final RankGetByMajorBean rankGetByMajorBean; private final RankGetRankMajorBean rankGetRankMajor; - public RankGetResponseDTO rankGet(Long page, Long size) { + @Transactional + public RankGetResponseDTO rankGet(Integer page, Integer size) { return rankGetBean.exec(page, size); } - public List listGames(Long page, Long size) { - return gameListBean.exec(page, size); - } - - public RankByMajorGetResponseDTO rankGetByMajor(Major major) { - return rankGetByMajorBean.exec(major); + @Transactional + public RankByMajorGetResponseDTO rankGetByMajor(Integer page, Integer size, Major major) { + return rankGetByMajorBean.exec(page, size, major); } + @Transactional public RankMajorGetResponseDTO getRankMajor() { return rankGetRankMajor.exec(); } diff --git a/src/main/java/com/example/jsgamesbackendmain/Service/ReviewService.java b/src/main/java/com/example/jsgamesbackendmain/Service/ReviewService.java index 3aa5ca8b..46a7bc0f 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Service/ReviewService.java +++ b/src/main/java/com/example/jsgamesbackendmain/Service/ReviewService.java @@ -12,6 +12,7 @@ import com.example.jsgamesbackendmain.Model.ENUM.ReviewSort; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -28,21 +29,25 @@ public class ReviewService { private final ReviewGetMyReviewBean reviewGetMyReviewBean; // 본인이 작성한 리뷰 조회 + @Transactional public ReviewGetByGameIdResponseDTO getMyReview(Long gameId, String userId) { return reviewGetMyReviewBean.exec(gameId, userId); } // 리뷰 작성 + @Transactional public ReviewCreateResponseDTO postReview(ReviewCreateRequestDTO requestDTO) { return reviewCreateBean.exec(requestDTO); } // 게임 별 리뷰 조회 - public List listReviewsByGame(Long gameId, Long page, Long size, ReviewSort sort) { + @Transactional + public List listReviewsByGame(Long gameId, Integer page, Integer size, ReviewSort sort) { return reviewListByGameBean.exec(gameId, page, size, sort); } // 리뷰 수정 + @Transactional public ReviewUpdateResponseDTO updateReview(Long reviewId, ReviewUpdateRequestDTO requestDTO) { return reviewUpdateBean.exec(reviewId, requestDTO); } diff --git a/src/main/java/com/example/jsgamesbackendmain/Service/TestService.java b/src/main/java/com/example/jsgamesbackendmain/Service/TestService.java index 67a3d9a2..db61aa5d 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Service/TestService.java +++ b/src/main/java/com/example/jsgamesbackendmain/Service/TestService.java @@ -1,14 +1,13 @@ package com.example.jsgamesbackendmain.Service; import com.example.jsgamesbackendmain.Bean.EmailBean.EmailSetBean; +import com.example.jsgamesbackendmain.Bean.ImageBean.S3SetImageBean; import com.example.jsgamesbackendmain.Bean.RankBean.RankSetMajorBean; import com.example.jsgamesbackendmain.Bean.RankBean.RankSetTop100UserBean; import com.example.jsgamesbackendmain.Model.DTO.StateResponseDTO; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; - -import java.util.HashMap; -import java.util.Map; +import org.springframework.transaction.annotation.Transactional; @Service @RequiredArgsConstructor @@ -19,19 +18,27 @@ public class TestService { private final RankSetMajorBean rankSetMajorBean; + private final S3SetImageBean s3SetImageBean; + + @Transactional public String emailClear() { emailClearBean.exec(); return "success"; } - public Map setRank() { + @Transactional + public StateResponseDTO setRank() { rankSetTop100UserBean.exec(); - HashMap map = new HashMap<>(); - map.put("result", "success"); - return map; + return StateResponseDTO.builder().state(true).build(); } + @Transactional public StateResponseDTO setMajor() { return rankSetMajorBean.exec(); } + + @Transactional + public StateResponseDTO setImage() { + return s3SetImageBean.exec(); + } } diff --git a/src/main/java/com/example/jsgamesbackendmain/Service/UserService.java b/src/main/java/com/example/jsgamesbackendmain/Service/UserService.java index 85852c69..9798a614 100644 --- a/src/main/java/com/example/jsgamesbackendmain/Service/UserService.java +++ b/src/main/java/com/example/jsgamesbackendmain/Service/UserService.java @@ -11,6 +11,7 @@ import com.example.jsgamesbackendmain.Model.DTO.User.Request.UserUpdateRequestDTO; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Service @RequiredArgsConstructor @@ -26,22 +27,27 @@ public class UserService { private final UserLoginBean userLoginBean; + @Transactional public UserGetResponseDTO getUser(String userId) { return userGetBean.exec(userId); } + @Transactional public UserUpdateResponseDTO updateUser(UserUpdateRequestDTO userUpdateRequestDTO) { return userUpdateBean.exec(userUpdateRequestDTO); } + @Transactional public StateResponseDTO deleteUser(String userId) { return userDeleteBean.exec(userId); } + @Transactional public UserSignUpResponseDTO signUpUser(UserSignUpRequestDTO userSignUpRequestDTO) { return userSignUpBean.signUpUser(userSignUpRequestDTO); } + @Transactional public UserLoginResponseDTO loginUser(UserLoginRequestDTO userLoginRequestDTO) { return userLoginBean.exec(userLoginRequestDTO); } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 0d735ad7..b4a53bd1 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -20,6 +20,8 @@ spring: properties: hibernate: format_sql: true + # batch_size: 100 + default_batch_fetch_size: 100 datasource: driver-class-name: ${DB_DRIVER} url: ${DB_URL} diff --git a/src/main/resources/static/default_image/default_user_image.png b/src/main/resources/static/default_image/default_user_image.png new file mode 100644 index 00000000..6efa156c Binary files /dev/null and b/src/main/resources/static/default_image/default_user_image.png differ diff --git a/src/test/java/com/example/jsgamesbackendmain/Bean/GameBean/GameBeanTest.java b/src/test/java/com/example/jsgamesbackendmain/Bean/GameBean/GameBeanTest.java index d932320a..df161497 100644 --- a/src/test/java/com/example/jsgamesbackendmain/Bean/GameBean/GameBeanTest.java +++ b/src/test/java/com/example/jsgamesbackendmain/Bean/GameBean/GameBeanTest.java @@ -4,10 +4,11 @@ import com.example.jsgamesbackendmain.Model.DAO.GameDAO; import com.example.jsgamesbackendmain.Model.DAO.LogDAO; import com.example.jsgamesbackendmain.Model.DAO.UserDAO; -import com.example.jsgamesbackendmain.Model.DTO.Game.GameDTO; import com.example.jsgamesbackendmain.Model.DTO.Game.Request.GameCreateRequestDTO; +import com.example.jsgamesbackendmain.Model.DTO.Game.Response.GameCreateResultDTO; import com.example.jsgamesbackendmain.Model.DTO.Game.Response.GameGetByGameIdResponseDTO; import com.example.jsgamesbackendmain.Model.DTO.Game.Response.GameListResponseDTO; +import com.example.jsgamesbackendmain.Model.ENUM.GameSort; import com.example.jsgamesbackendmain.Repository.GameRepository; import com.example.jsgamesbackendmain.Repository.LogRepository; import com.example.jsgamesbackendmain.Repository.UserRepository; @@ -21,6 +22,7 @@ import java.util.ArrayList; import java.util.Comparator; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -38,6 +40,7 @@ class GameBeanTest { @Autowired private GameGetListByPlayedUserSmallBean gameGetListByPlayedUserSmallBean; + @Test void GameGetListByPlayedUserSmallBeanTest() { //given @@ -47,19 +50,17 @@ void GameGetListByPlayedUserSmallBeanTest() { UserDAO user2 = UserDAO.createTest(0); user2.setUserId("2"); - userRepository.save(user1); + userRepository.save(user2); ArrayList userList = new ArrayList<>(); userList.add(user1); userList.add(user2); - GameDAO game1 = GameDAO.createTest(0); - game1.setUserId(user1.getUserId()); + GameDAO game1 = GameDAO.createTest(0, user1); gameRepository.save(game1); - GameDAO game2 = GameDAO.createTest(0); - game2.setUserId(user2.getUserId()); + GameDAO game2 = GameDAO.createTest(0, user2); gameRepository.save(game2); ArrayList gameList = new ArrayList<>(); @@ -67,36 +68,34 @@ void GameGetListByPlayedUserSmallBeanTest() { gameList.add(game1); gameList.add(game2); - for (int i = 0; i < 3; i++) { - LogDAO log = LogDAO.createTest(0); - log.setGameId(game1.getGameId()); - log.setUserId(user1.getUserId()); - logRepository.save(log); + for (int i = 0; i < 4; i++) { + logRepository.save(LogDAO.createTest(0, game1, user1)); } - for (int i = 0; i < 2; i++) { - LogDAO log = LogDAO.createTest(0); - log.setGameId(game2.getGameId()); - log.setUserId(user2.getUserId()); - logRepository.save(log); + for (int i = 0; i < 6; i++) { + logRepository.save(LogDAO.createTest(0, game2, user2)); } - ArrayList logList = new ArrayList<>(logRepository.findAll()); - + List logList = logRepository.findAll(); //when PageRequest request = PageRequest.of(0, 10); - List actual = gameGetListByPlayedUserSmallBean.exec(user1.getUserId(), request); + List actual = gameGetListByPlayedUserSmallBean.exec(user1, request); - List gameIdList = logList.stream().filter(logDAO -> logDAO.getUserId() == user1.getUserId()) - .map(LogDAO::getGameId) - .collect(Collectors.toList()); + // Create Comparator + Comparator createAtDesc = Comparator.comparing(LogDAO::getCreatedAt).reversed(); + + // Create Grouping By gameId + Map> collect = logList.stream() + .filter(logDAO -> logDAO.getUser().getUserId().equals(user1.getUserId())) + .collect(Collectors.groupingBy(logDAO -> logDAO.getGame().getGameId())); - List expect = gameList.stream().filter(gameDAO -> gameIdList.contains(gameDAO.getGameId())) - .sorted(Comparator.comparing(GameDAO::getViewCount).reversed() - .thenComparing(GameDAO::getGameId) - ) + + // Find Max CreatedAt Logs and Get Games + List expect = collect.keySet().stream() + .map(key -> collect.get(key).stream().max(createAtDesc).get().getGame()) + .sorted(Comparator.comparing(GameDAO::getGameId)) .collect(Collectors.toList()); //then @@ -109,12 +108,13 @@ void GameGetListByPlayedUserSmallBeanTest() { @Autowired private GameGetBean gameGetBean; + @Test void GameGetBeanTest() { //given UserDAO user = UserDAO.createTest(0); userRepository.save(user); - GameDAO game = GameDAO.createTest(0); + GameDAO game = GameDAO.createTest(0, user); gameRepository.save(game); //when @@ -125,14 +125,14 @@ void GameGetBeanTest() { @Autowired private GameListBean gameListBean; + @Test void GameListBeanTest() { //given UserDAO user = UserDAO.createTest(0); userRepository.save(user); for (int i = 0; i < 12; i++) { - GameDAO game = GameDAO.createTest(i); - game.setUserId(user.getUserId()); + GameDAO game = GameDAO.createTest(i, user); gameRepository.save(game); } @@ -141,7 +141,7 @@ void GameListBeanTest() { .limit(10) .collect(Collectors.toList()); //when - List exec = gameListBean.exec(0L,10L); + List exec = gameListBean.exec(0, 10, GameSort.VIEW_COUNT); //then assertEquals(gameList.size(), exec.size()); @@ -157,12 +157,12 @@ void GameListBeanTest() { void GamePostBeanTest() { //given UserDAO user = UserDAO.createTest(0); + userRepository.save(user); - GameDAO dao = GameDAO.createTest(0); - dao.setUserId(user.getUserId()); + GameDAO dao = GameDAO.createTest(0, user); //when - GameDTO exec = gamePostBean.exec(GameCreateRequestDTO.of(dao)); + GameCreateResultDTO exec = gamePostBean.exec(GameCreateRequestDTO.of(dao)); //then List all = gameRepository.findAll(); diff --git a/src/test/java/com/example/jsgamesbackendmain/Bean/GameBean/SmallBean/GameListBeanTest.java b/src/test/java/com/example/jsgamesbackendmain/Bean/GameBean/SmallBean/GameListBeanTest.java new file mode 100644 index 00000000..52691ba5 --- /dev/null +++ b/src/test/java/com/example/jsgamesbackendmain/Bean/GameBean/SmallBean/GameListBeanTest.java @@ -0,0 +1,239 @@ +package com.example.jsgamesbackendmain.Bean.GameBean.SmallBean; + +import com.example.jsgamesbackendmain.Bean.SmallBean.GameBean.GameListOrderByCreateAtSmallBean; +import com.example.jsgamesbackendmain.Bean.SmallBean.GameBean.GameListOrderByLogCountDescSmallBean; +import com.example.jsgamesbackendmain.Bean.SmallBean.GameBean.GameListOrderByReviewCountSmallBean; +import com.example.jsgamesbackendmain.Bean.SmallBean.GameBean.GameListOrderByViewCountSmallBean; +import com.example.jsgamesbackendmain.Model.DAO.GameDAO; +import com.example.jsgamesbackendmain.Model.DAO.LogDAO; +import com.example.jsgamesbackendmain.Model.DAO.ReviewDAO; +import com.example.jsgamesbackendmain.Model.DAO.UserDAO; +import com.example.jsgamesbackendmain.Repository.GameRepository; +import com.example.jsgamesbackendmain.Repository.LogRepository; +import com.example.jsgamesbackendmain.Repository.ReviewRepository; +import com.example.jsgamesbackendmain.Repository.UserRepository; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.domain.PageRequest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.function.Function; +import java.util.stream.Collectors; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@SpringBootTest +@ActiveProfiles("test") +public class GameListBeanTest { + private final GameListOrderByViewCountSmallBean gameListOrderByViewCountSmallBean; + private final GameListOrderByLogCountDescSmallBean gameListOrderByLogCountDescSmallBean; + private final GameListOrderByCreateAtSmallBean gameListOrderByCreateAtSmallBean; + private final GameListOrderByReviewCountSmallBean gameListOrderByReviewCountSmallBean; + private final UserRepository userRepository; + private final GameRepository gameRepository; + private final LogRepository logRepository; + private final ReviewRepository reviewRepository; + + @Autowired + public GameListBeanTest( + GameListOrderByViewCountSmallBean gameListOrderByViewCountSmallBean, + GameListOrderByLogCountDescSmallBean gameListOrderByLogCountDescSmallBean, + GameListOrderByCreateAtSmallBean gameListOrderByCreateAtSmallBean, + GameListOrderByReviewCountSmallBean gameListOrderByReviewCountSmallBean, + UserRepository userRepository, + GameRepository gameRepository, + LogRepository logRepository, + ReviewRepository reviewRepository + ) { + this.gameListOrderByViewCountSmallBean = gameListOrderByViewCountSmallBean; + this.gameListOrderByLogCountDescSmallBean = gameListOrderByLogCountDescSmallBean; + this.gameListOrderByCreateAtSmallBean = gameListOrderByCreateAtSmallBean; + this.gameListOrderByReviewCountSmallBean = gameListOrderByReviewCountSmallBean; + this.userRepository = userRepository; + this.gameRepository = gameRepository; + this.logRepository = logRepository; + this.reviewRepository = reviewRepository; + } + + @Test + @Transactional + void GameListOrderByViewCountSmallBeanTest() { + //given + UserDAO newUser = UserDAO.builder() + .userId("1") + .build(); + userRepository.save(newUser); + + ArrayList gameList = new ArrayList<>(); + + for (int i = 1; i <= 10; i++) { + GameDAO newGame = GameDAO.builder() + .user(newUser) + .viewCount(((long) i)) + .build(); + + gameRepository.save(newGame); + gameList.add(newGame); + } + + //when + List exec = gameListOrderByViewCountSmallBean.exec(PageRequest.of(0, 10)).toList(); + + Comparator comparator = Comparator.comparing(GameDAO::getViewCount).reversed(); + + List expect = gameList.stream() + .sorted(comparator.thenComparing(GameDAO::getGameId)) + .collect(Collectors.toList()); + + //then + for (int i = 0; i < 10; i++) { + assertEquals(expect.get(i).getGameId(), exec.get(i).getGameId()); + } + } + + @Test + @Transactional + void GameListOrderByLogCountDescSmallBeanTest() { + //given + UserDAO newUser = UserDAO.builder() + .userId("1") + .build(); + userRepository.save(newUser); + + ArrayList gameList = new ArrayList<>(); + + for (int i = 1; i <= 10; i++) { + GameDAO newGame = GameDAO.builder() + .user(newUser) + .build(); + + newGame.setUser(newUser); + + gameRepository.save(newGame); + gameList.add(newGame); + } + + for (int i = 0; i < gameList.size(); i++) { + GameDAO findGame = gameList.get(i); + for (int j = 0; j < i; j++) { + LogDAO newLog = LogDAO.createTest(j, findGame, newUser); + logRepository.save(newLog); + } + + } + + //when + List exec = gameListOrderByLogCountDescSmallBean.exec(PageRequest.of(0, 10)).toList(); + + Function logCount = gameDAO -> gameDAO.getLogs().size(); + Comparator comparator = Comparator.comparing(logCount).reversed(); + + List expect = gameList.stream() + .sorted(comparator.thenComparing(GameDAO::getGameId)) + .collect(Collectors.toList()); + + //then + for (int i = 0; i < 10; i++) { + assertEquals(expect.get(i).getGameId(), exec.get(i).getGameId()); + } + } + + @Test + @Transactional + void GameListOrderByCreateAtSmallBeanTest() { + //given + UserDAO newUser = UserDAO.builder() + .userId("1") + .build(); + userRepository.save(newUser); + + ArrayList gameList = new ArrayList<>(); + + for (int i = 1; i <= 10; i++) { + GameDAO newGame = GameDAO.builder() + .user(newUser) + .build(); + + newGame.setUser(newUser); + + gameRepository.save(newGame); + gameList.add(newGame); + } + + //when + List exec = gameListOrderByCreateAtSmallBean.exec(PageRequest.of(0, 10)).toList(); + + Comparator comparator = Comparator.comparing(GameDAO::getCreatedAt).reversed(); + + List expect = gameList.stream() + .sorted(comparator.thenComparing(GameDAO::getGameId)) + .collect(Collectors.toList()); + + //then + for (int i = 0; i < 10; i++) { + assertEquals(expect.get(i).getGameId(), exec.get(i).getGameId()); + } + } + + @Test + @Transactional + void GameListOrderByReviewCountSmallBeanTest() { + //given + ArrayList userList = new ArrayList<>(); + + for (int i = 0; i < 10; i++) { + UserDAO newUser = UserDAO.builder() + .userId(i + "") + .build(); + userRepository.save(newUser); + userList.add(newUser); + } + + ArrayList gameList = new ArrayList<>(); + + for (int i = 1; i <= 10; i++) { + UserDAO findUser = userList.get(0); + GameDAO newGame = GameDAO.builder() + .user(findUser) + .build(); + + newGame.setUser(findUser); + + gameRepository.save(newGame); + gameList.add(newGame); + } + + for (int i = 0; i < gameList.size(); i++) { + GameDAO findGame = gameList.get(i); + for (int j = 0; j < i; j++) { + ReviewDAO newReview = ReviewDAO.createTest(j, findGame, userList.get(j)); + reviewRepository.save(newReview); + } + } + + //when + List exec = gameListOrderByReviewCountSmallBean.exec(PageRequest.of(0, 10)).toList(); + + Function reviewSizeFunction = gameDAO -> gameDAO.getReviews().size(); + + Comparator compareReviewSizeReverse = Comparator.comparing(reviewSizeFunction).reversed(); + Comparator compareGameId = Comparator.comparing(GameDAO::getGameId); + + List expect = gameList.stream() + .sorted( + compareReviewSizeReverse + .thenComparing(compareGameId) + ) + .collect(Collectors.toList()); + + //then + for (int i = 0; i < 10; i++) { + assertEquals(expect.get(i).getGameId(), exec.get(i).getGameId()); + } + } +} diff --git a/src/test/java/com/example/jsgamesbackendmain/Bean/HelpfulBean/HelpfulBeanTest.java b/src/test/java/com/example/jsgamesbackendmain/Bean/HelpfulBean/HelpfulBeanTest.java index 5b5d50e7..bb8bca34 100644 --- a/src/test/java/com/example/jsgamesbackendmain/Bean/HelpfulBean/HelpfulBeanTest.java +++ b/src/test/java/com/example/jsgamesbackendmain/Bean/HelpfulBean/HelpfulBeanTest.java @@ -1,10 +1,14 @@ package com.example.jsgamesbackendmain.Bean.HelpfulBean; +import com.example.jsgamesbackendmain.Model.DAO.GameDAO; import com.example.jsgamesbackendmain.Model.DAO.HelpfulDAO; import com.example.jsgamesbackendmain.Model.DAO.ReviewDAO; +import com.example.jsgamesbackendmain.Model.DAO.UserDAO; import com.example.jsgamesbackendmain.Model.DTO.Helpful.HelpfulGetResponseDTO; +import com.example.jsgamesbackendmain.Repository.GameRepository; import com.example.jsgamesbackendmain.Repository.HelpfulRepository; import com.example.jsgamesbackendmain.Repository.ReviewRepository; +import com.example.jsgamesbackendmain.Repository.UserRepository; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -21,20 +25,41 @@ public class HelpfulBeanTest { private HelpfulRepository helpfulRepository; @Autowired private ReviewRepository reviewRepository; + @Autowired + private UserRepository userRepository; + @Autowired + private GameRepository gameRepository; @Autowired private HelpfulGetBean helpfulGetBean; + @Test void HelpfulGetBeanTest() { + UserDAO newUser1 = UserDAO.createTest(1); + newUser1.setUserId("test01"); + userRepository.save(newUser1); + + UserDAO newUser2 = UserDAO.createTest(2); + newUser2.setUserId("test02"); + userRepository.save(newUser2); + + GameDAO newGame = GameDAO.createTest(1, newUser1); + gameRepository.save(newGame); + + ReviewDAO newReview = ReviewDAO.createTest(1, newGame, newUser1); + reviewRepository.save(newReview); + //given - HelpfulDAO helpfulDAO = new HelpfulDAO(); - helpfulDAO.setUserId("test01"); - helpfulDAO.setReviewId(1L); - helpfulRepository.save(helpfulDAO); + HelpfulDAO newHelpful = HelpfulDAO.builder() + .build(); + + newHelpful.setUser(newUser1); + newHelpful.setReview(newReview); + helpfulRepository.save(newHelpful); //when - HelpfulGetResponseDTO helpfulGetResponseDTO1 = helpfulGetBean.exec("test01", 1L); - HelpfulGetResponseDTO helpfulGetResponseDTO2 = helpfulGetBean.exec("test02", 1L); + HelpfulGetResponseDTO helpfulGetResponseDTO1 = helpfulGetBean.exec(newUser1.getUserId(), newReview.getReviewId()); + HelpfulGetResponseDTO helpfulGetResponseDTO2 = helpfulGetBean.exec(newUser2.getUserId(), newReview.getReviewId()); //then assertTrue(helpfulGetResponseDTO1.isHelpful()); assertFalse(helpfulGetResponseDTO2.isHelpful()); @@ -42,28 +67,52 @@ void HelpfulGetBeanTest() { @Autowired private HelpfulPostBean helpfulPostBean; + @Test void HelpfulPostBeanTest() { + UserDAO newUser1 = UserDAO.createTest(1); + newUser1.setUserId("test01"); + UserDAO newUser2 = UserDAO.createTest(2); + newUser2.setUserId("test02"); + userRepository.save(newUser1); + userRepository.save(newUser2); + + GameDAO newGame = GameDAO.createTest(1, newUser1); + gameRepository.save(newGame); + //given - ReviewDAO newReview = ReviewDAO.createTest(1); + ReviewDAO newReview = ReviewDAO.createTest(1, newGame, newUser1); reviewRepository.save(newReview); //when - helpfulPostBean.exec("test01", 1L); - helpfulPostBean.exec("test02", 1L); + helpfulPostBean.exec(newUser1.getUserId(), newReview.getReviewId()); + helpfulPostBean.exec(newUser2.getUserId(), newReview.getReviewId()); //then assertEquals(2, helpfulRepository.count()); } @Autowired private HelpfulDeleteBean helpfulDeleteBean; + @Test void HelpfulDeleteBeanTest() { //given - ReviewDAO newReview = ReviewDAO.createTest(1); + UserDAO newUser1 = UserDAO.createTest(1); + newUser1.setUserId("test01"); + userRepository.save(newUser1); + + UserDAO newUser2 = UserDAO.createTest(2); + newUser2.setUserId("test02"); + userRepository.save(newUser2); + + GameDAO newGame = GameDAO.createTest(1, newUser1); + gameRepository.save(newGame); + + ReviewDAO newReview = ReviewDAO.createTest(1, newGame, newUser1); reviewRepository.save(newReview); - helpfulPostBean.exec("test01", 1L); - helpfulPostBean.exec("test02", 1L); + + helpfulPostBean.exec(newUser1.getUserId(), newReview.getReviewId()); + helpfulPostBean.exec(newUser2.getUserId(), newReview.getReviewId()); //2초 대기 try { @@ -73,8 +122,8 @@ void HelpfulDeleteBeanTest() { } //when - helpfulDeleteBean.exec("test01", 1L); - helpfulDeleteBean.exec("test02", 1L); + helpfulDeleteBean.exec(newUser1.getUserId(), newReview.getReviewId()); + helpfulDeleteBean.exec(newUser2.getUserId(), newReview.getReviewId()); //then assertEquals(0, helpfulRepository.count()); } diff --git a/src/test/java/com/example/jsgamesbackendmain/Bean/LogBean/LogBeanTest.java b/src/test/java/com/example/jsgamesbackendmain/Bean/LogBean/LogBeanTest.java index 2ee13901..6bd6153d 100644 --- a/src/test/java/com/example/jsgamesbackendmain/Bean/LogBean/LogBeanTest.java +++ b/src/test/java/com/example/jsgamesbackendmain/Bean/LogBean/LogBeanTest.java @@ -1,6 +1,7 @@ package com.example.jsgamesbackendmain.Bean.LogBean; import com.example.jsgamesbackendmain.Bean.SmallBean.LogBean.LogCatchTopChange; +import com.example.jsgamesbackendmain.Bean.SmallBean.LogBean.LogGetByGameSmallBean; import com.example.jsgamesbackendmain.Model.DAO.GameDAO; import com.example.jsgamesbackendmain.Model.DAO.LogDAO; import com.example.jsgamesbackendmain.Model.DAO.UserDAO; @@ -39,7 +40,6 @@ class LogBeanTest { @Autowired private LogCatchTopChange logCatchTopChange; - @Test void LogCatchTopChangeTest() { UserDAO user1 = UserDAO.createTest(1); @@ -51,54 +51,36 @@ void LogCatchTopChangeTest() { userRepository.save(user1); userRepository.save(user2); - GameDAO game1 = GameDAO.createTest(1); - game1.setUserId(user1.getUserId()); + GameDAO game1 = GameDAO.createTest(1, user1); game1.setScoreType(ScoreType.INFINITE); gameRepository.save(game1); for (int i = 1; i <= 50; i++) { - LogDAO logDAO = LogDAO.createTest(1); - logDAO.setGameId(game1.getGameId()); - logDAO.setUserId(user1.getUserId()); - Optional preTopLogOpt = logGetByGameIdBean.exec(game1.getGameId(), 0, 1).stream().findAny(); - - logRepository.save(logDAO); + LogDAO newLog = LogDAO.createTest(i, game1, user1); - Optional nextTopLogOpt = logGetByGameIdBean.exec(game1.getGameId(), 0, 1).stream().findAny(); + logRepository.save(newLog); - Boolean isChange = logCatchTopChange.exec(preTopLogOpt, nextTopLogOpt); + Boolean isChange = logCatchTopChange.exec(game1); assertFalse(isChange); } for (int i = 51; i <= 100; i++) { - LogDAO logDAO = LogDAO.createTest(i); - logDAO.setGameId(game1.getGameId()); - logDAO.setUserId(user2.getUserId()); - - Optional preTopLogOpt = logGetByGameIdBean.exec(game1.getGameId(), 0, 1).stream().findAny(); + LogDAO newLog = LogDAO.createTest(i, game1, user2); - logRepository.save(logDAO); + logRepository.save(newLog); - Optional nextTopLogOpt = logGetByGameIdBean.exec(game1.getGameId(), 0, 1).stream().findAny(); - - Boolean isChange = logCatchTopChange.exec(preTopLogOpt, nextTopLogOpt); + Boolean isChange = logCatchTopChange.exec(game1); assertFalse(isChange); } - LogDAO logDAO = LogDAO.createTest(101); - logDAO.setGameId(game1.getGameId()); - logDAO.setUserId(user1.getUserId()); - - Optional preTopLogOpt = logGetByGameIdBean.exec(game1.getGameId(), 0, 1).stream().findAny(); + LogDAO newLog = LogDAO.createTest(101, game1, user1); - logRepository.save(logDAO); - - Optional nextTopLogOpt = logGetByGameIdBean.exec(game1.getGameId(), 0, 1).stream().findAny(); + logRepository.save(newLog); - Boolean isChange = logCatchTopChange.exec(preTopLogOpt, nextTopLogOpt); + Boolean isChange = logCatchTopChange.exec(game1); assertTrue(isChange); @@ -106,37 +88,32 @@ void LogCatchTopChangeTest() { @Autowired private LogGetByGameIdBean logGetByGameIdBean; + @Test void LogGetByGameIdBeanTest() { //given UserDAO user = UserDAO.createTest(0); userRepository.save(user); - GameDAO game1 = GameDAO.createTest(0); + GameDAO game1 = GameDAO.createTest(0, user); game1.setScoreType(ScoreType.INFINITE); - game1.setUserId(user.getUserId()); gameRepository.save(game1); - GameDAO game2 = GameDAO.createTest(3); - game2.setUserId(user.getUserId()); + GameDAO game2 = GameDAO.createTest(3, user); game2.setScoreType(ScoreType.GOAL); game2.setTargetScore(((double) 5)); gameRepository.save(game2); for (int i = 0; i < 12; i++) { - LogDAO log1 = LogDAO.createTest(i); - log1.setGameId(game1.getGameId()); - log1.setUserId(user.getUserId()); + LogDAO log1 = LogDAO.createTest(i, game1, user); logRepository.save(log1); - LogDAO log2 = LogDAO.createTest(i); - log2.setGameId(game2.getGameId()); - log2.setUserId(user.getUserId()); + LogDAO log2 = LogDAO.createTest(i, game2, user); logRepository.save(log2); } List game1List = logRepository.findAll().stream() - .filter(logDAO -> logDAO.getGameId().equals(game1.getGameId())) + .filter(logDAO -> logDAO.getGame().getGameId().equals(game1.getGameId())) .sorted(Comparator.comparing(LogDAO::getGameScore).reversed().thenComparing(LogDAO::getLogId)) .limit(10) .collect(Collectors.toList()); @@ -144,7 +121,7 @@ void LogGetByGameIdBeanTest() { Double targetScore = game2.getTargetScore(); List game2List = logRepository.findAll().stream() - .filter(logDAO -> logDAO.getGameId().equals(game2.getGameId())) + .filter(logDAO -> logDAO.getGame().getGameId().equals(game2.getGameId())) .sorted((o1, o2) -> { double g1 = targetScore - o1.getGameScore(); double g2 = targetScore - o2.getGameScore(); @@ -184,44 +161,39 @@ void LogGetByGameIdBeanTest() { @Autowired private LogGetByGamIdUserIdBean logGetByGamIdUserIdBean; + @Test void LogGetByGamIdUserIdBeanTest() { //given UserDAO user = UserDAO.createTest(0); userRepository.save(user); - GameDAO game1 = GameDAO.createTest(0); + GameDAO game1 = GameDAO.createTest(0, user); game1.setScoreType(ScoreType.INFINITE); - game1.setUserId(user.getUserId()); gameRepository.save(game1); - GameDAO game2 = GameDAO.createTest(3); - game2.setUserId(user.getUserId()); + GameDAO game2 = GameDAO.createTest(3, user); game2.setScoreType(ScoreType.GOAL); game2.setTargetScore(((double) 5)); gameRepository.save(game2); for (int i = 0; i < 12; i++) { - LogDAO log1 = LogDAO.createTest(i); - log1.setGameId(game1.getGameId()); - log1.setUserId(user.getUserId()); + LogDAO log1 = LogDAO.createTest(i, game1, user); logRepository.save(log1); - LogDAO log2 = LogDAO.createTest(i); - log2.setGameId(game2.getGameId()); - log2.setUserId(user.getUserId()); + LogDAO log2 = LogDAO.createTest(i, game2, user); logRepository.save(log2); } LogDAO expect1 = logRepository.findAll().stream() - .filter(logDAO -> logDAO.getGameId().equals(game1.getGameId())) + .filter(logDAO -> logDAO.getGame().getGameId().equals(game1.getGameId())) .sorted(Comparator.comparing(LogDAO::getGameScore).reversed().thenComparing(LogDAO::getLogId)) .limit(1).findAny().orElse(new LogDAO()); Double targetScore = game2.getTargetScore(); LogDAO expect2 = logRepository.findAll().stream() - .filter(logDAO -> logDAO.getGameId().equals(game2.getGameId())) + .filter(logDAO -> logDAO.getGame().getGameId().equals(game2.getGameId())) .sorted((o1, o2) -> { double g1 = targetScore - o1.getGameScore(); double g2 = targetScore - o2.getGameScore(); @@ -242,28 +214,26 @@ void LogGetByGamIdUserIdBeanTest() { @Autowired private LogPostBean logPostBean; + @Test void LogPostBeanTest() { //given UserDAO user = UserDAO.createTest(0); userRepository.save(user); - GameDAO game1 = GameDAO.createTest(0); + GameDAO game1 = GameDAO.createTest(0, user); game1.setScoreType(ScoreType.INFINITE); - game1.setUserId(user.getUserId()); gameRepository.save(game1); - LogDAO logDAO = LogDAO.createTest(0); - logDAO.setUserId(user.getUserId()); - logDAO.setGameId(game1.getGameId()); + LogDAO logDAO = LogDAO.createTest(0, game1, user); logRepository.save(logDAO); //when LogPostResponseDTO exec = logPostBean.exec(LogPostRequestDTO.of(logDAO)); //then - assertEquals(logDAO.getGameId(), exec.getGameId()); + assertEquals(logDAO.getGame().getGameId(), exec.getGameId()); } @Test @@ -272,34 +242,28 @@ void GetRankTest() { UserDAO user = UserDAO.createTest(0); userRepository.save(user); - GameDAO game1 = GameDAO.createTest(0); + GameDAO game1 = GameDAO.createTest(0, user); game1.setScoreType(ScoreType.INFINITE); - game1.setUserId(user.getUserId()); gameRepository.save(game1); - GameDAO game2 = GameDAO.createTest(3); - game2.setUserId(user.getUserId()); + GameDAO game2 = GameDAO.createTest(3, user); game2.setScoreType(ScoreType.GOAL); game2.setTargetScore(((double) 5)); gameRepository.save(game2); for (int i = 0; i < 12; i++) { - LogDAO log1 = LogDAO.createTest(i); - log1.setGameId(game1.getGameId()); - log1.setUserId(user.getUserId()); + LogDAO log1 = LogDAO.createTest(i, game1, user); logRepository.save(log1); - LogDAO log2 = LogDAO.createTest(i); - log2.setGameId(game2.getGameId()); - log2.setUserId(user.getUserId()); + LogDAO log2 = LogDAO.createTest(i, game2, user); logRepository.save(log2); } - List expect1 = logRepository.findAll().stream().filter(logDAO -> logDAO.getGameId() == game1.getGameId()) + List expect1 = logRepository.findAll().stream().filter(logDAO -> logDAO.getGame().getGameId() == game1.getGameId()) .sorted(Comparator.comparing(LogDAO::getGameScore).reversed().thenComparing(LogDAO::getLogId)) .collect(Collectors.toList()); - List expect2 = logRepository.findAll().stream().filter(logDAO -> logDAO.getGameId() == game2.getGameId()) + List expect2 = logRepository.findAll().stream().filter(logDAO -> logDAO.getGame().getGameId() == game2.getGameId()) .sorted((o1, o2) -> { double g1 = game2.getTargetScore() - o1.getGameScore(); double g2 = game2.getTargetScore() - o2.getGameScore(); @@ -309,11 +273,11 @@ void GetRankTest() { }).collect(Collectors.toList()); - LogDAO findDAO1 = logRepository.findFirstByGameIdAndUserIdOrderByGameScoreDesc(game1.getGameId(), user.getUserId()).get(); - LogDAO findDAO2 = logRepository.findByGameIdOrderByGameScoreWithTargetScore(game2.getGameId(), game2.getTargetScore(), PageRequest.of(0, 1)).stream().findAny().get(); + LogDAO findDAO1 = logRepository.findFirstByGameAndUserOrderByGameScoreDesc(game1, user).get(); + LogDAO findDAO2 = logRepository.findByGameOrderByGameScoreWithTargetScore(game2, game2.getTargetScore(), PageRequest.of(0, 1)).stream().findAny().get(); - Long rank1 = logRepository.getRankInfinite(findDAO1.getGameScore(), findDAO1.getGameId()); - Long rank2 = logRepository.getRankGoal(game2.getTargetScore(), findDAO2.getGameScore(), game2.getGameId()); + Long rank1 = logRepository.getRankInfinite(findDAO1.getGameScore(), findDAO1.getGame()); + Long rank2 = logRepository.getRankGoal(game2.getTargetScore(), findDAO2.getGameScore(), game2); long cnt1 = expect1.stream().filter(logDAO -> logDAO.getGameScore() >= findDAO1.getGameScore()).count(); long cnt2 = expect2.stream().filter(logDAO -> Math.abs(game2.getTargetScore() - logDAO.getGameScore()) <= Math.abs(game2.getTargetScore() - findDAO2.getGameScore())).count(); diff --git a/src/test/java/com/example/jsgamesbackendmain/Bean/ReviewBean/ReviewBeanTest.java b/src/test/java/com/example/jsgamesbackendmain/Bean/ReviewBean/ReviewBeanTest.java index ad7a6819..ac15f049 100644 --- a/src/test/java/com/example/jsgamesbackendmain/Bean/ReviewBean/ReviewBeanTest.java +++ b/src/test/java/com/example/jsgamesbackendmain/Bean/ReviewBean/ReviewBeanTest.java @@ -45,13 +45,10 @@ void ReviewGetMyReviewBeanTest() { UserDAO user = UserDAO.createTest(0); userRepository.save(user); - GameDAO game = GameDAO.createTest(0); - game.setUserId(user.getUserId()); + GameDAO game = GameDAO.createTest(0, user); gameRepository.save(game); - ReviewDAO review = ReviewDAO.createTest(0); - review.setGameId(game.getGameId()); - review.setUserId(user.getUserId()); + ReviewDAO review = ReviewDAO.createTest(0, game, user); reviewRepository.save(review); //when @@ -72,8 +69,7 @@ void ReviewListByGameBeanTest() { userRepository.save(user); for (int i = 0; i < 2; i++) { - GameDAO game = GameDAO.createTest(i); - game.setUserId(user.getUserId()); + GameDAO game = GameDAO.createTest(i, user); gameRepository.save(game); } GameDAO game = gameRepository.findAll().stream().findAny().orElse(new GameDAO()); @@ -82,9 +78,7 @@ void ReviewListByGameBeanTest() { List list = new ArrayList<>(); for (int i = 0; i < 12; i++) { - ReviewDAO review = ReviewDAO.createTest(i); - review.setGameId(gameId); - review.setUserId(user.getUserId()); + ReviewDAO review = ReviewDAO.createTest(i, game, user); reviewRepository.save(review); list.add(review); } @@ -92,7 +86,7 @@ void ReviewListByGameBeanTest() { Comparator reversed = Comparator.comparing(ReviewDAO::getReviewId).reversed(); List recent = list.stream() - .filter(reviewDAO -> reviewDAO.getGameId() == gameId) + .filter(reviewDAO -> reviewDAO.getGame().getGameId() == gameId) .sorted( Comparator.comparing(ReviewDAO::getDateTime).reversed() .thenComparing(reversed) @@ -101,7 +95,7 @@ void ReviewListByGameBeanTest() { .collect(Collectors.toList()); //when - List exec = reviewListByGameBean.exec(gameId, 0L, 10L, ReviewSort.RECENT); + List exec = reviewListByGameBean.exec(gameId, 0, 10, ReviewSort.RECENT); System.out.println("recent = " + recent); System.out.println("exec = " + exec); @@ -119,14 +113,14 @@ void ReviewListByGameBeanTest() { List oldest = list.stream() - .filter(reviewDAO -> reviewDAO.getGameId() == gameId) + .filter(reviewDAO -> reviewDAO.getGame().getGameId() == gameId) .sorted(Comparator.comparing(ReviewDAO::getDateTime) .thenComparing(reversed) ) .limit(10) .collect(Collectors.toList()); - exec = reviewListByGameBean.exec(gameId, 0L, 10L, ReviewSort.OLDEST); + exec = reviewListByGameBean.exec(gameId, 0, 10, ReviewSort.OLDEST); assertEquals(oldest.size(), exec.size()); for (int i = 0; i < oldest.size(); i++) { @@ -134,12 +128,12 @@ void ReviewListByGameBeanTest() { } List star = list.stream() - .filter(reviewDAO -> reviewDAO.getGameId() == gameId) + .filter(reviewDAO -> reviewDAO.getGame().getGameId() == gameId) .sorted(Comparator.comparing(ReviewDAO::getStar) .thenComparing(ReviewDAO::getDateTime).reversed() ).limit(10).collect(Collectors.toList()); - exec = reviewListByGameBean.exec(gameId, 0L, 10L, ReviewSort.STAR); + exec = reviewListByGameBean.exec(gameId, 0, 10, ReviewSort.STAR); assertEquals(star.size(), exec.size()); for (int i = 0; i < star.size(); i++) { @@ -147,12 +141,12 @@ void ReviewListByGameBeanTest() { } List helpful = list.stream() - .filter(reviewDAO -> reviewDAO.getGameId() == gameId) + .filter(reviewDAO -> reviewDAO.getGame().getGameId() == gameId) .sorted(Comparator.comparing(ReviewDAO::getHelpful) .thenComparing(ReviewDAO::getDateTime).reversed() ).limit(10).collect(Collectors.toList()); - exec = reviewListByGameBean.exec(gameId, 0L, 10L, ReviewSort.HELPFUL); + exec = reviewListByGameBean.exec(gameId, 0, 10, ReviewSort.HELPFUL); assertEquals(helpful.size(), exec.size()); for (int i = 0; i < helpful.size(); i++) { @@ -168,19 +162,22 @@ void ReviewListByGameBeanTest() { void ReviewPostBeanTest() { //given UserDAO user = UserDAO.createTest(0); + user.setUserId("1"); userRepository.save(user); - GameDAO game = GameDAO.createTest(0); - game.setUserId(user.getUserId()); + GameDAO game = GameDAO.createTest(0, user); gameRepository.save(game); - ReviewDAO review = ReviewDAO.createTest(0); - review.setGameId(game.getGameId()); - review.setUserId(user.getUserId()); + ReviewCreateRequestDTO request = ReviewCreateRequestDTO.builder() + .userId(user.getUserId()) + .gameId(game.getGameId()) + .reviewContent("test") + .star(5f) + .build(); //when - ReviewCreateResponseDTO exec = reviewPostBean.exec(ReviewCreateRequestDTO.of(review)); + ReviewCreateResponseDTO exec = reviewPostBean.exec(request); //then ReviewDAO expect = reviewRepository.findAll().stream().findAny().orElse(new ReviewDAO()); @@ -197,14 +194,11 @@ void ReviewUpdateBeanTest() { UserDAO user = UserDAO.createTest(0); userRepository.save(user); - GameDAO game = GameDAO.createTest(0); - game.setUserId(user.getUserId()); + GameDAO game = GameDAO.createTest(0, user); gameRepository.save(game); - ReviewDAO review = ReviewDAO.createTest(0); + ReviewDAO review = ReviewDAO.createTest(0, game, user); - review.setGameId(game.getGameId()); - review.setUserId(user.getUserId()); reviewRepository.save(review); ReviewUpdateRequestDTO requestDTO = ReviewUpdateRequestDTO.builder() diff --git a/src/test/java/com/example/jsgamesbackendmain/SetTestData/SetTestData.java b/src/test/java/com/example/jsgamesbackendmain/SetTestData/SetTestData.java index c75128bd..9f4e9700 100644 --- a/src/test/java/com/example/jsgamesbackendmain/SetTestData/SetTestData.java +++ b/src/test/java/com/example/jsgamesbackendmain/SetTestData/SetTestData.java @@ -96,7 +96,6 @@ public SetTestData( ScoreType scoreType = scoreTypes[i % scoreTypes.length]; GameDAO gameDAO = GameDAO.builder() - .userId(userDAOList.get((int) (Math.random() * userSize)).getUserId()) .gameName(String.valueOf(i)) .gameUrl(String.valueOf(i)) .scoreType(scoreType) @@ -106,22 +105,27 @@ public SetTestData( ) .description(String.valueOf(i)) .viewCount(((long) i)) + .createdAt(LocalDateTime.now().minusDays(i)) .build(); + + gameDAO.setUser(userDAOList.get((int) (Math.random() * userSize))); + gameDAOList.add(gameDAO); gameRepository.save(gameDAO); } for (int j = 0; j < reviewSize; j++) { ReviewDAO reviewDAO = ReviewDAO.builder() - .userId(userDAOList.get((int) (Math.random() * userSize)).getUserId()) - .gameId(gameDAOList.get((int) (Math.random() * gameSize)).getGameId()) .reviewContent("reviewContent " + j) .star((float) (j % 5) + 1) .dateTime(LocalDateTime.now().minusDays(j)) .helpful((long) j) .build(); + reviewDAO.setUser(userDAOList.get((int) (Math.random() * userSize))); + reviewDAO.setGame(gameDAOList.get((int) (Math.random() * gameSize))); + reviewDAOList.add(reviewDAO); reviewRepository.save(reviewDAO); } @@ -131,10 +135,11 @@ public SetTestData( for (int i = 0; i < logSize; i++) { LogDAO newLog = LogDAO.builder() .gameScore((double) ((int) (Math.random() * 100))) + .createdAt(LocalDateTime.now().minusDays(i)) .build(); - newLog.setGameId(gameDAOList.get((int) (Math.random() * gameSize)).getGameId()); - newLog.setUserId(userDAOList.get((int) (Math.random() * userSize)).getUserId()); + newLog.setGame(gameDAOList.get((int) (Math.random() * gameSize))); + newLog.setUser(userDAOList.get((int) (Math.random() * userSize))); logRepository.save(newLog); }