From 53b815832031bd9135dd9c151a2761f6bf555410 Mon Sep 17 00:00:00 2001 From: j2noo Date: Tue, 13 Aug 2024 01:31:43 +0900 Subject: [PATCH 1/4] =?UTF-8?q?fix=20:=20=EC=BD=94=EB=93=9C=20=EC=BB=A8?= =?UTF-8?q?=EB=B2=A4=EC=85=98=20=ED=86=B5=EC=9D=BC=20(CC-138)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../caecae/global/config/{CORSConfig.java => CorsConfig.java} | 2 +- .../api/{RacingGameApi.java => RacingGameController.java} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename src/main/java/ai/softeer/caecae/global/config/{CORSConfig.java => CorsConfig.java} (90%) rename src/main/java/ai/softeer/caecae/racinggame/api/{RacingGameApi.java => RacingGameController.java} (98%) diff --git a/src/main/java/ai/softeer/caecae/global/config/CORSConfig.java b/src/main/java/ai/softeer/caecae/global/config/CorsConfig.java similarity index 90% rename from src/main/java/ai/softeer/caecae/global/config/CORSConfig.java rename to src/main/java/ai/softeer/caecae/global/config/CorsConfig.java index 79e8c40..71dee94 100644 --- a/src/main/java/ai/softeer/caecae/global/config/CORSConfig.java +++ b/src/main/java/ai/softeer/caecae/global/config/CorsConfig.java @@ -5,7 +5,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration -public class CORSConfig implements WebMvcConfigurer { +public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") diff --git a/src/main/java/ai/softeer/caecae/racinggame/api/RacingGameApi.java b/src/main/java/ai/softeer/caecae/racinggame/api/RacingGameController.java similarity index 98% rename from src/main/java/ai/softeer/caecae/racinggame/api/RacingGameApi.java rename to src/main/java/ai/softeer/caecae/racinggame/api/RacingGameController.java index 36d89e6..1773aa6 100644 --- a/src/main/java/ai/softeer/caecae/racinggame/api/RacingGameApi.java +++ b/src/main/java/ai/softeer/caecae/racinggame/api/RacingGameController.java @@ -18,7 +18,7 @@ @RestController @RequiredArgsConstructor @RequestMapping("/api/racing") -public class RacingGameApi { +public class RacingGameController { private final RacingGameService racingGameService; private final RacingGameInfoService racingGameInfoService; private final RacingGameParticipantService racingGameParticipantService; From 21495e68855af109dcc1fc3b8f2fd1343287df8e Mon Sep 17 00:00:00 2001 From: j2noo Date: Tue, 13 Aug 2024 01:32:30 +0900 Subject: [PATCH 2/4] =?UTF-8?q?feat=20:=20=EC=A0=84=EC=B2=B4=20=EA=B2=8C?= =?UTF-8?q?=EC=9E=84=20=EC=A0=95=EB=B3=B4=EB=A5=BC=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=ED=95=98=EB=8A=94=20Jpa=20=EB=A9=94=EC=84=9C=EB=93=9C=20(CC-13?= =?UTF-8?q?8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../caecae/findinggame/repository/FindGameDbRepository.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/ai/softeer/caecae/findinggame/repository/FindGameDbRepository.java b/src/main/java/ai/softeer/caecae/findinggame/repository/FindGameDbRepository.java index 876ad08..7e09942 100644 --- a/src/main/java/ai/softeer/caecae/findinggame/repository/FindGameDbRepository.java +++ b/src/main/java/ai/softeer/caecae/findinggame/repository/FindGameDbRepository.java @@ -4,7 +4,10 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.List; + // Redis Repository 도 만들어야 하므로 네이밍에 Db를 붙임 @Repository public interface FindGameDbRepository extends JpaRepository { + List findAllByOrderByStartTime(); } From 367a959119830259f46de977b704447ce2d1bcd2 Mon Sep 17 00:00:00 2001 From: j2noo Date: Tue, 13 Aug 2024 01:32:58 +0900 Subject: [PATCH 3/4] =?UTF-8?q?feat=20:=20=EC=A0=84=EC=B2=B4=20=EA=B2=8C?= =?UTF-8?q?=EC=9E=84=20=EC=A0=95=EB=B3=B4=EB=A5=BC=20=EB=B0=98=ED=99=98?= =?UTF-8?q?=ED=95=98=EB=8A=94=20dto=20=EC=9E=91=EC=84=B1=20(CC-138)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/dto/FindingGameDailyInfo.java | 13 +++++++++++++ .../dto/response/FindingGameInfoResponseDto.java | 15 +++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 src/main/java/ai/softeer/caecae/findinggame/domain/dto/FindingGameDailyInfo.java create mode 100644 src/main/java/ai/softeer/caecae/findinggame/domain/dto/response/FindingGameInfoResponseDto.java diff --git a/src/main/java/ai/softeer/caecae/findinggame/domain/dto/FindingGameDailyInfo.java b/src/main/java/ai/softeer/caecae/findinggame/domain/dto/FindingGameDailyInfo.java new file mode 100644 index 0000000..dec9753 --- /dev/null +++ b/src/main/java/ai/softeer/caecae/findinggame/domain/dto/FindingGameDailyInfo.java @@ -0,0 +1,13 @@ +package ai.softeer.caecae.findinggame.domain.dto; + +import lombok.Builder; + +import java.time.LocalDateTime; + +@Builder +public record FindingGameDailyInfo( + LocalDateTime startTime, + LocalDateTime endTime, + int numberOfWinners +) { +} diff --git a/src/main/java/ai/softeer/caecae/findinggame/domain/dto/response/FindingGameInfoResponseDto.java b/src/main/java/ai/softeer/caecae/findinggame/domain/dto/response/FindingGameInfoResponseDto.java new file mode 100644 index 0000000..7331d9c --- /dev/null +++ b/src/main/java/ai/softeer/caecae/findinggame/domain/dto/response/FindingGameInfoResponseDto.java @@ -0,0 +1,15 @@ +package ai.softeer.caecae.findinggame.domain.dto.response; + +import ai.softeer.caecae.findinggame.domain.dto.FindingGameDailyInfo; +import lombok.Builder; + +import java.util.List; + +// 일주일치 게임 정보 +@Builder +public record FindingGameInfoResponseDto( + List findingGameInfos, + int recentGameIndex, + int nextGameIndex +) { +} From 69df649bf4e8e96df5fba412f307052254f3eda8 Mon Sep 17 00:00:00 2001 From: j2noo Date: Tue, 13 Aug 2024 01:34:08 +0900 Subject: [PATCH 4/4] =?UTF-8?q?feat=20:=20=EC=A0=84=EC=B2=B4=20=EA=B2=8C?= =?UTF-8?q?=EC=9E=84=20=EC=A0=95=EB=B3=B4=EB=A5=BC=20=EB=B0=98=ED=99=98?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EC=84=9C=EB=B9=84=EC=8A=A4=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EB=B0=8F=20api=20=EC=9E=91=EC=84=B1=20(CC-138)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/FindingGameController.java | 29 ++++++++++++ .../service/FindingGameService.java | 44 +++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 src/main/java/ai/softeer/caecae/findinggame/api/FindingGameController.java diff --git a/src/main/java/ai/softeer/caecae/findinggame/api/FindingGameController.java b/src/main/java/ai/softeer/caecae/findinggame/api/FindingGameController.java new file mode 100644 index 0000000..58d364a --- /dev/null +++ b/src/main/java/ai/softeer/caecae/findinggame/api/FindingGameController.java @@ -0,0 +1,29 @@ +package ai.softeer.caecae.findinggame.api; + +import ai.softeer.caecae.findinggame.service.FindingGameService; +import ai.softeer.caecae.global.dto.response.SuccessResponse; +import ai.softeer.caecae.global.enums.SuccessCode; +import ai.softeer.caecae.findinggame.domain.dto.response.FindingGameInfoResponseDto; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +@RequestMapping("/api/finding") +@RequiredArgsConstructor +public class FindingGameController { + private final FindingGameService findingGameService; + + /** + * 숨은캐스퍼찾기 전체 게임 정보와 최근/다음 게임의 인덱스를 반환하는 api + * + * @return 전체 게임 정보, 최근/다음 게임의 인덱스 + */ + @GetMapping("/info") + public ResponseEntity> getFindingGameInfo() { + FindingGameInfoResponseDto res = findingGameService.getFindingGameInfo(); + return SuccessResponse.of(SuccessCode.OK, res); + } +} diff --git a/src/main/java/ai/softeer/caecae/findinggame/service/FindingGameService.java b/src/main/java/ai/softeer/caecae/findinggame/service/FindingGameService.java index e1603ee..db42f4d 100644 --- a/src/main/java/ai/softeer/caecae/findinggame/service/FindingGameService.java +++ b/src/main/java/ai/softeer/caecae/findinggame/service/FindingGameService.java @@ -1,15 +1,18 @@ package ai.softeer.caecae.findinggame.service; +import ai.softeer.caecae.findinggame.domain.dto.FindingGameDailyInfo; import ai.softeer.caecae.findinggame.domain.entity.FindingGame; import ai.softeer.caecae.findinggame.domain.enums.AnswerType; import ai.softeer.caecae.findinggame.repository.FindGameDbRepository; import ai.softeer.caecae.racinggame.domain.dto.request.RegisterFindingGamePeriodRequestDto; +import ai.softeer.caecae.findinggame.domain.dto.response.FindingGameInfoResponseDto; import ai.softeer.caecae.racinggame.domain.dto.response.RegisterFindingGamePeriodResponseDto; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @@ -64,4 +67,45 @@ private List initFindingGames() { } return findingGames; } + + /** + * 전체 게임 정보와, 최근/다음 게임의 인덱스를 반환하는 로직 + * + * @return 전체 게임 정보, 최근/다음 게임의 인덱스 + */ + @Transactional(readOnly = true) + public FindingGameInfoResponseDto getFindingGameInfo() { + List findingGames = findGameDbRepository.findAllByOrderByStartTime(); + + int recentGameIndex = -1; + int nextGameIndex = -1; + for (int i = 0; i < findingGames.size(); i++) { + FindingGame findingGame = findingGames.get(i); + if (findingGame.getStartTime().isBefore(LocalDateTime.now())) { + recentGameIndex = i; + } + } + + // 마지막 게임이 아니라면, nextGameIndex 설정 + if (recentGameIndex != findingGames.size() - 1) { + nextGameIndex = recentGameIndex + 1; + } + + List findingGameDailyInfos = new ArrayList<>(); + for (FindingGame findingGame : findingGames) { + findingGameDailyInfos.add( + FindingGameDailyInfo.builder() + .startTime(findingGame.getStartTime()) + .endTime(findingGame.getEndTime()) + .numberOfWinners(findingGame.getNumberOfWinners()) + .build() + ); + } + + return FindingGameInfoResponseDto.builder() + .findingGameInfos(findingGameDailyInfos) + .recentGameIndex(recentGameIndex) + .nextGameIndex(nextGameIndex) + .build(); + } }