Skip to content

Commit 35f97d7

Browse files
committed
[Refactor] Dec트리구조용 시나리ì�Id조회 APIê추가
1 parent efbe8fe commit 35f97d7

File tree

3 files changed

+38
-0
lines changed

3 files changed

+38
-0
lines changed

back/src/main/java/com/back/domain/scenario/controller/ScenarioController.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,22 @@ public ResponseEntity<ScenarioDetailResponse> getScenarioDetail(
8989
return ResponseEntity.ok(scenarioDetailResponse);
9090
}
9191

92+
@GetMapping("/by-decision-line/{decisionLineId}")
93+
@Operation(
94+
summary = "DecisionLine ID로 시나리오 조회",
95+
description = "트리 시각화에서 DecisionLine ID를 통해 연결된 시나리오의 상세 정보를 조회합니다."
96+
)
97+
public ResponseEntity<ScenarioDetailResponse> getScenarioByDecisionLine(
98+
@Parameter(description = "DecisionLine ID") @PathVariable Long decisionLineId,
99+
@AuthenticationPrincipal CustomUserDetails userDetails
100+
) {
101+
Long userId = getUserId(userDetails);
102+
103+
ScenarioDetailResponse scenarioDetailResponse = scenarioService.getScenarioByDecisionLine(decisionLineId, userId);
104+
105+
return ResponseEntity.ok(scenarioDetailResponse);
106+
}
107+
92108
@GetMapping("/{scenarioId}/timeline")
93109
@Operation(summary = "시나리오 타임라인 조회", description = "시나리오의 선택 경로를 시간순으로 조회합니다.")
94110
public ResponseEntity<TimelineResponse> getScenarioTimeline(

back/src/main/java/com/back/domain/scenario/repository/ScenarioRepository.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@ public interface ScenarioRepository extends JpaRepository<Scenario, Long> {
3232
@Query("SELECT s FROM Scenario s WHERE s.decisionLine.id = :decisionLineId")
3333
Optional<Scenario> findByDecisionLineId(@Param("decisionLineId") Long decisionLineId);
3434

35+
// DecisionLine 기반 시나리오 조회 (권한 검증 포함)
36+
@Query("SELECT s FROM Scenario s WHERE s.decisionLine.id = :decisionLineId AND s.user.id = :userId")
37+
Optional<Scenario> findByDecisionLineIdAndUserId(
38+
@Param("decisionLineId") Long decisionLineId,
39+
@Param("userId") Long userId
40+
);
41+
3542
// 내 완료된 선택 시나리오 목록 조회 (베이스 시나리오 제외)
3643
Page<Scenario> findByUserIdAndDecisionLineIsNotNullAndStatusOrderByCreatedDateDesc(
3744
Long userId,

back/src/main/java/com/back/domain/scenario/service/ScenarioService.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,21 @@ public ScenarioDetailResponse getScenarioDetail(Long scenarioId, Long userId) {
423423
return ScenarioDetailResponse.from(scenario, sceneTypes);
424424
}
425425

426+
// DecisionLine ID로 시나리오 상세 조회
427+
@Transactional(readOnly = true)
428+
public ScenarioDetailResponse getScenarioByDecisionLine(Long decisionLineId, Long userId) {
429+
// DecisionLine에 연결된 시나리오 조회 (권한 검증 포함)
430+
Scenario scenario = scenarioRepository.findByDecisionLineIdAndUserId(decisionLineId, userId)
431+
.orElseThrow(() -> new ApiException(ErrorCode.SCENARIO_NOT_FOUND,
432+
"해당 DecisionLine에 연결된 시나리오를 찾을 수 없습니다."));
433+
434+
// 지표 조회
435+
var sceneTypes = sceneTypeRepository.findByScenarioIdOrderByTypeAsc(scenario.getId());
436+
437+
// DTO 변환 및 반환
438+
return ScenarioDetailResponse.from(scenario, sceneTypes);
439+
}
440+
426441
// 시나리오 타임라인 조회
427442
@Transactional(readOnly = true)
428443
public TimelineResponse getScenarioTimeline(Long scenarioId, Long userId) {

0 commit comments

Comments
 (0)