From 6532865664566d76cc020bec9b2e4da20cae1bc8 Mon Sep 17 00:00:00 2001 From: bbbang105 <2018111366@dgu.ac.kr> Date: Mon, 10 Jun 2024 03:50:30 +0900 Subject: [PATCH] =?UTF-8?q?#16=20[feat]=20:=20=EB=B0=B1=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8C=85=20=EA=B4=80=EB=A0=A8=20=EC=97=90=EB=9F=AC=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/exception/BackTestingErrorResult.java | 4 +++- .../dgu/backend/service/BackTestingServiceImpl.java | 12 ++++++++++-- .../org/dgu/backend/service/CandleInfoUpdater.java | 10 ++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/backend/src/main/java/org/dgu/backend/exception/BackTestingErrorResult.java b/backend/src/main/java/org/dgu/backend/exception/BackTestingErrorResult.java index 3254c37..5f5a42a 100644 --- a/backend/src/main/java/org/dgu/backend/exception/BackTestingErrorResult.java +++ b/backend/src/main/java/org/dgu/backend/exception/BackTestingErrorResult.java @@ -9,7 +9,9 @@ @Getter @RequiredArgsConstructor public enum BackTestingErrorResult implements BaseErrorCode { - NOT_FOUND_START_INDEX(HttpStatus.NOT_FOUND, "404", "시작 인덱스를 찾을 수 없습니다."); + NOT_FOUND_START_INDEX(HttpStatus.NOT_FOUND, "404", "시작 인덱스를 찾을 수 없습니다."), + START_DATE_AFTER_END_DATE(HttpStatus.BAD_REQUEST, "400", "시작일이 종료일보다 늦습니다."), + N_DAY_LONGER_THAN_M_DAY(HttpStatus.BAD_REQUEST, "400", "N일이 M일보다 큽니다."); private final HttpStatus httpStatus; private final String code; diff --git a/backend/src/main/java/org/dgu/backend/service/BackTestingServiceImpl.java b/backend/src/main/java/org/dgu/backend/service/BackTestingServiceImpl.java index 6bdb26b..d49ac45 100644 --- a/backend/src/main/java/org/dgu/backend/service/BackTestingServiceImpl.java +++ b/backend/src/main/java/org/dgu/backend/service/BackTestingServiceImpl.java @@ -4,8 +4,7 @@ import lombok.RequiredArgsConstructor; import org.dgu.backend.domain.*; import org.dgu.backend.dto.BackTestingDto; -import org.dgu.backend.exception.PortfolioErrorResult; -import org.dgu.backend.exception.PortfolioException; +import org.dgu.backend.exception.*; import org.dgu.backend.repository.*; import org.dgu.backend.util.CandleUtil; import org.dgu.backend.util.DateUtil; @@ -53,8 +52,17 @@ protected BackTestingDto.BackTestingResponse fetchBackTestingResult(String autho Candle candle = candleRepository.findByCandleName(stepInfo.getCandleName()); LocalDateTime startDate = dateUtil.convertToLocalDateTime(stepInfo.getStartDate()); LocalDateTime endDate = dateUtil.convertToLocalDateTime(stepInfo.getEndDate()); + if (startDate.isAfter(endDate)) { + throw new BackTestingException(BackTestingErrorResult.START_DATE_AFTER_END_DATE); + } + if (stepInfo.getNDate() > stepInfo.getMDate()) { + throw new BackTestingException(BackTestingErrorResult.N_DAY_LONGER_THAN_M_DAY); + } List candles = candleInfoRepository.findFilteredCandleInfo(market, candle, startDate, endDate); + if (candles.isEmpty()) { + throw new CandleException(CandleErrorResult.NOT_FOUND_CANDLES); + } candles = candleUtil.removeDuplicatedCandles(candles); // 골든 크로스 지점 찾기 diff --git a/backend/src/main/java/org/dgu/backend/service/CandleInfoUpdater.java b/backend/src/main/java/org/dgu/backend/service/CandleInfoUpdater.java index 149dfdc..5a1a860 100644 --- a/backend/src/main/java/org/dgu/backend/service/CandleInfoUpdater.java +++ b/backend/src/main/java/org/dgu/backend/service/CandleInfoUpdater.java @@ -4,6 +4,10 @@ import org.dgu.backend.domain.Candle; import org.dgu.backend.domain.CandleInfo; import org.dgu.backend.domain.Market; +import org.dgu.backend.exception.CandleErrorResult; +import org.dgu.backend.exception.CandleException; +import org.dgu.backend.exception.MarketErrorResult; +import org.dgu.backend.exception.MarketException; import org.dgu.backend.repository.CandleInfoRepository; import org.dgu.backend.repository.CandleRepository; import org.dgu.backend.repository.MarketRepository; @@ -28,7 +32,13 @@ public class CandleInfoUpdater { // 현재 시각을 기준으로 캔들 정보를 최신화하는 메서드 public void ensureCandleInfoUpToDate(String koreanName, String candleName) { Market market = marketRepository.findByKoreanName(koreanName); + if (Objects.isNull(market)) { + throw new MarketException(MarketErrorResult.NOT_FOUND_MARKET); + } Candle candle = candleRepository.findByCandleName(candleName); + if (Objects.isNull(candle)) { + throw new CandleException(CandleErrorResult.NOT_FOUND_CANDLE); + } // 가장 최근 캔들 차트 CandleInfo latestCandleInfo = candleInfoRepository.findTopByMarketAndCandleOrderByTimestampDesc(market, candle);