Skip to content

Conversation

@discipline24
Copy link
Contributor

@discipline24 discipline24 commented Nov 1, 2025

Summary by CodeRabbit

  • 새로운 기능

    • 템플릿 조회 시 관련 백테스트 실행 결과를 함께 확인할 수 있습니다.
    • 티커 기반 주가 데이터 조회 기능이 확장되었습니다.
  • 문서화

    • 백테스트·포인트·템플릿 관련 OpenAPI/Swagger 설명과 예제가 대폭 보강되었습니다.
  • 개선 사항

    • 템플릿 접근 시 소유권 검증이 강화되어 권한 관리가 개선되었습니다.
    • 내부 DB 설정이 최적화되고 H2 런타임 의존성이 제거되었습니다.

@coderabbitai
Copy link

coderabbitai bot commented Nov 1, 2025

Walkthrough

백엔드에서 OpenAPI 주석을 추가하고 몇몇 DTO에 스키마 기본값을 명시했으며, H2 런타임 의존성을 제거, 저장소 쿼드 확장 및 TemplateService에 BacktestRun 통합과 소유권 검증을 추가하고 JPA 속성을 설정에 적용했습니다.

Changes

코호트 / 파일(s) 변경 요약
빌드 및 Git 설정
backend/build.gradle, .gitignore
runtimeOnly로 선언된 com.h2database:h2 의존성 제거; backend/src/main/java/org/sejongisc/backend/stock/TestController.java.gitignore에 추가.
컨트롤러 OpenAPI 주석
backend/src/main/java/org/sejongisc/backend/backtest/controller/BacktestController.java, backend/src/main/java/org/sejongisc/backend/point/controller/PointHistoryController.java, backend/src/main/java/org/sejongisc/backend/template/controller/TemplateController.java
클래스 레벨 @Tag 및 각 엔드포인트에 @Operation 등 OpenAPI/Swagger 주석 추가. 비즈니스 로직/시그니처 변경 없음.
DTO 스키마 주석 및 기본값
backend/src/main/java/org/sejongisc/backend/backtest/dto/BacktestRunRequest.java, .../BacktestRequest.java, .../StrategyCondition.java, .../StrategyOperand.java
필드에 @Schema 주석 추가 및 initialCapital, ticker, note, title 등에 defaultValue 메타데이터 추가. 타입/동작 변경 없음.
저장소 쿼리 확장
backend/src/main/java/org/sejongisc/backend/backtest/repository/BacktestRunRepository.java, backend/src/main/java/org/sejongisc/backend/stock/repository/PriceDataRepository.java
BacktestRunRepositoryfindByTemplate_TemplateIdWithTemplate(UUID)(@query, JOIN FETCH 포함) 추가, PriceDataRepositoryfindByTicker(String) 추가.
TemplateService 및 응답 확장
backend/src/main/java/org/sejongisc/backend/template/service/TemplateService.java, backend/src/main/java/org/sejongisc/backend/template/dto/TemplateResponse.java
TemplateService.findById 시그니처가 (UUID templateId, UUID userId)로 변경되어 소유권 검증 호출 추가 및 BacktestRunRepository로부터 BacktestRun 목록을 조회하여 응답에 포함. TemplateResponseList<BacktestRun> backtestRuns 필드 추가.
JPA 설정 보강
backend/src/main/java/org/sejongisc/backend/common/config/PrimaryDataSourceConfig.java, backend/src/main/java/org/sejongisc/backend/common/config/StockDataSourceConfig.java
EntityManagerFactory에 적용되는 JPA 프로퍼티 맵 추가(hibernate.dialect, hbm2ddl.auto 등) 및 hibernate.default_schema 설정 추가.

Sequence Diagram(s)

sequenceDiagram
    participant Client
    participant TemplateController
    participant TemplateService
    participant TemplateRepository
    participant BacktestRunRepository

    Client->>TemplateController: GET /templates/{templateId}
    TemplateController->>TemplateService: findById(templateId, userId)
    TemplateService->>TemplateService: authorizeTemplateOwner(templateId, userId)
    alt 소유권 검증 성공
        TemplateService->>TemplateRepository: findById(templateId)
        TemplateRepository-->>TemplateService: Template
        TemplateService->>BacktestRunRepository: findByTemplate_TemplateIdWithTemplate(templateId)
        BacktestRunRepository-->>TemplateService: List<BacktestRun>
        TemplateService-->>TemplateController: TemplateResponse (backtestRuns 포함)
        TemplateController-->>Client: HTTP 200 + TemplateResponse
    else 소유권 검증 실패
        TemplateService-->>TemplateController: 권한/예외 전달
        TemplateController-->>Client: HTTP 403/404
    end
Loading

Estimated code review effort

🎯 3 (중간) | ⏱️ ~20분

  • 주의 깊게 검토할 영역:
    • TemplateService.findById(UUID, UUID) 시그니처 변경에 따른 호출자(컨트롤러 등) 영향 확인
    • BacktestRunRepository의 JPQL (JOIN FETCH, 정렬)이 N+1 또는 페이징 영향이 없는지 확인
    • JPA 프로퍼티 추가가 기존 환경(다중 데이터소스, 스키마)과 충돌 없는지 확인
    • TemplateResponse에 추가된 backtestRuns의 직렬화/보안(민감 정보 포함 여부) 검토

Possibly related PRs

Poem

🐰 깡총 깡총 코드 밭을 헤치며,
문서 한 줌, 스키마 한 줌, 쿼리도 척척,
템플릿에 백테스트 담아 주머니 가득,
JPA 단장하고 소유권도 단단히,
춤추는 데이터에 당근 한 토막 🥕

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 63.64% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed PR 제목 "[BE] SISC1-56 [DOCS] 스웨거 관련 코드 추가"는 변경 사항의 실질적인 부분과 관련이 있습니다. Swagger/OpenAPI 주석 추가가 BacktestController, PointHistoryController, TemplateController, BacktestRunRequest, StrategyCondition, StrategyOperand 등 여러 파일에서 광범위하게 진행되었으며, 이는 확실히 PR의 중요한 부분입니다. 다만 PR에는 Swagger 문서화 외에도 BacktestRunRepository의 새로운 쿼리 메서드 추가, TemplateResponse의 backtestRuns 필드 추가, TemplateService의 메서드 서명 변경 등 함수적 변경사항도 포함되어 있습니다. 제목이 완전히 모든 변경 사항을 포괄하지는 않지만, PR의 실제 측면(Swagger 문서화)을 정확하게 지칭하고 있습니다.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch SISC1-56-BE-백테스팅-실행-API-구현

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (1)
backend/src/main/java/org/sejongisc/backend/stock/repository/PriceDataRepository.java (1)

14-14: 페이징 처리를 고려해 주세요.

findByTicker 메서드는 특정 티커에 대한 모든 가격 데이터를 반환합니다. 주식 데이터는 수년간의 일별 데이터가 축적될 수 있어 결과 세트가 상당히 클 수 있습니다.

프로덕션 환경에서 사용할 경우 페이징 또는 날짜 범위 제한을 추가하는 것을 권장합니다:

Page<PriceData> findByTicker(String ticker, Pageable pageable);

또는

List<PriceData> findByTickerOrderByDateDesc(String ticker, Pageable pageable);
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 561a240 and 5a7a15c.

📒 Files selected for processing (14)
  • backend/build.gradle (0 hunks)
  • backend/src/main/java/org/sejongisc/backend/backtest/controller/BacktestController.java (5 hunks)
  • backend/src/main/java/org/sejongisc/backend/backtest/dto/BacktestRunRequest.java (2 hunks)
  • backend/src/main/java/org/sejongisc/backend/backtest/dto/StrategyCondition.java (2 hunks)
  • backend/src/main/java/org/sejongisc/backend/backtest/dto/StrategyOperand.java (2 hunks)
  • backend/src/main/java/org/sejongisc/backend/backtest/repository/BacktestRunRepository.java (1 hunks)
  • backend/src/main/java/org/sejongisc/backend/common/config/PrimaryDataSourceConfig.java (3 hunks)
  • backend/src/main/java/org/sejongisc/backend/common/config/StockDataSourceConfig.java (1 hunks)
  • backend/src/main/java/org/sejongisc/backend/point/controller/PointHistoryController.java (2 hunks)
  • backend/src/main/java/org/sejongisc/backend/stock/TestController.java (1 hunks)
  • backend/src/main/java/org/sejongisc/backend/stock/repository/PriceDataRepository.java (1 hunks)
  • backend/src/main/java/org/sejongisc/backend/template/controller/TemplateController.java (3 hunks)
  • backend/src/main/java/org/sejongisc/backend/template/dto/TemplateResponse.java (2 hunks)
  • backend/src/main/java/org/sejongisc/backend/template/service/TemplateService.java (3 hunks)
💤 Files with no reviewable changes (1)
  • backend/build.gradle
🧰 Additional context used
🧬 Code graph analysis (1)
backend/src/main/java/org/sejongisc/backend/backtest/controller/BacktestController.java (1)
backend/src/main/java/org/sejongisc/backend/common/auth/springsecurity/CustomUserDetailsService.java (1)
  • RequiredArgsConstructor (16-38)
🔇 Additional comments (8)
backend/src/main/java/org/sejongisc/backend/common/config/StockDataSourceConfig.java (1)

48-57: JPA 설정이 적절하게 구성되었습니다.

Stock 데이터 소스에 대한 JPA 속성 설정이 올바르게 추가되었습니다. hibernate.hbm2ddl.auto=none 설정은 주식 데이터와 같은 읽기 전용 데이터 소스에 적합합니다.

backend/src/main/java/org/sejongisc/backend/common/config/PrimaryDataSourceConfig.java (1)

55-73: Primary 데이터 소스 JPA 설정이 올바릅니다.

Hibernate 속성이 적절하게 추가되었으며, hbm2ddl.auto=update는 애플리케이션이 관리하는 Primary 데이터베이스에 적합한 설정입니다.

backend/src/main/java/org/sejongisc/backend/point/controller/PointHistoryController.java (1)

21-45: Swagger 문서화가 잘 추가되었습니다.

API 문서화를 위한 @Tag@Operation 어노테이션이 명확하고 적절하게 추가되었습니다.

backend/src/main/java/org/sejongisc/backend/template/dto/TemplateResponse.java (1)

16-16: Entity를 DTO에서 직접 노출하는 것을 검토해 주세요.

BacktestRun 엔티티가 응답 DTO에 직접 포함되어 있습니다. 일반적으로 API 응답에서는 엔티티를 직접 노출하지 않고 별도의 DTO로 변환하여 사용하는 것이 권장됩니다. 이는 엔티티의 모든 필드가 노출되거나 순환 참조 문제가 발생할 수 있기 때문입니다.

별도의 BacktestRunDto를 생성하거나, 현재 설계가 의도된 것인지 확인해 주세요.

backend/src/main/java/org/sejongisc/backend/backtest/dto/StrategyCondition.java (1)

17-27: Swagger 스키마 문서화가 적절합니다.

필드에 대한 @Schema 어노테이션이 명확하게 추가되어 API 문서의 가독성을 향상시킵니다.

backend/src/main/java/org/sejongisc/backend/template/controller/TemplateController.java (1)

21-43: Swagger 문서화 및 보안 개선이 잘 되었습니다.

API 문서화를 위한 어노테이션이 적절하게 추가되었으며, Line 46에서 템플릿 조회 시 userId를 전달하여 소유권 검증을 수행하는 것은 보안 측면에서 좋은 개선입니다.

backend/src/main/java/org/sejongisc/backend/backtest/dto/BacktestRunRequest.java (2)

24-25: ticker의 defaultValue는 적절합니다.

ticker 필드의 기본값이 올바르게 설정되었습니다.


33-34: note의 defaultValue는 적절합니다.

note 필드의 기본값이 명확하고 적절하게 설정되었습니다.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
backend/src/main/java/org/sejongisc/backend/backtest/repository/BacktestRunRepository.java (1)

14-18: 이전 리뷰의 @param 누락 문제가 해결됨

Line 18에 @Param("templateTemplateId") 어노테이션이 명시적으로 추가되어 이전 리뷰에서 지적된 런타임 오류 가능성이 해소되었습니다. JPQL의 명명 파라미터와 메서드 파라미터가 올바르게 매핑되었으며, JOIN FETCH를 사용하여 N+1 쿼리 문제를 방지한 것도 좋습니다.

선택적 개선: 파라미터 이름 단순화 고려

파라미터 이름 templateTemplateId가 다소 중복적입니다. 컨텍스트상 명확하므로 templateId로 단순화할 수 있습니다.

-  List<BacktestRun> findByTemplate_TemplateIdWithTemplate(@Param("templateTemplateId") UUID templateTemplateId);
+  List<BacktestRun> findByTemplate_TemplateIdWithTemplate(@Param("templateId") UUID templateId);

JPQL 쿼리도 함께 수정:

   @Query("SELECT br FROM BacktestRun br " +
          "JOIN FETCH br.template t " +
-         "WHERE t.templateId = :templateTemplateId " +
+         "WHERE t.templateId = :templateId " +
          "ORDER BY br.startedAt DESC")
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 49d5ff1 and 42634fe.

📒 Files selected for processing (1)
  • backend/src/main/java/org/sejongisc/backend/backtest/repository/BacktestRunRepository.java (1 hunks)
🔇 Additional comments (1)
backend/src/main/java/org/sejongisc/backend/backtest/repository/BacktestRunRepository.java (1)

5-12: 필요한 임포트가 올바르게 추가됨

커스텀 쿼리 구현을 위한 @Query, @Param 임포트와 @Repository 어노테이션이 적절히 추가되었습니다. 이전 리뷰에서 지적된 @Param 누락 문제를 해결하기 위한 준비가 완료되었습니다.

@discipline24 discipline24 merged commit e27f64a into main Nov 2, 2025
1 check passed
@discipline24 discipline24 deleted the SISC1-56-BE-백테스팅-실행-API-구현 branch November 2, 2025 05:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants