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/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 +) { +} 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(); } 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(); + } } 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;