Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat : 숨은캐스퍼찾기 전체 게임 정보를 조회하는 api 작성 (CC-138) #27

Merged
merged 4 commits into from
Aug 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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<SuccessResponse<FindingGameInfoResponseDto>> getFindingGameInfo() {
FindingGameInfoResponseDto res = findingGameService.getFindingGameInfo();
return SuccessResponse.of(SuccessCode.OK, res);
}
}
Original file line number Diff line number Diff line change
@@ -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
) {
}
Original file line number Diff line number Diff line change
@@ -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<FindingGameDailyInfo> findingGameInfos,
int recentGameIndex,
int nextGameIndex
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<FindingGame, Integer> {
List<FindingGame> findAllByOrderByStartTime();
}
Original file line number Diff line number Diff line change
@@ -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;

Expand Down Expand Up @@ -64,4 +67,45 @@ private List<FindingGame> initFindingGames() {
}
return findingGames;
}

/**
* 전체 게임 정보와, 최근/다음 게임의 인덱스를 반환하는 로직
*
* @return 전체 게임 정보, 최근/다음 게임의 인덱스
*/
@Transactional(readOnly = true)
public FindingGameInfoResponseDto getFindingGameInfo() {
List<FindingGame> 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<FindingGameDailyInfo> 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();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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("/**")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Loading