Skip to content
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
Expand Up @@ -89,6 +89,22 @@ public ResponseEntity<ScenarioDetailResponse> getScenarioDetail(
return ResponseEntity.ok(scenarioDetailResponse);
}

@GetMapping("/by-decision-line/{decisionLineId}")
@Operation(
summary = "DecisionLine ID로 시나리오 조회",
description = "트리 시각화에서 DecisionLine ID를 통해 연결된 시나리오의 상세 정보를 조회합니다."
)
public ResponseEntity<ScenarioDetailResponse> getScenarioByDecisionLine(
@Parameter(description = "DecisionLine ID") @PathVariable Long decisionLineId,
@AuthenticationPrincipal CustomUserDetails userDetails
) {
Long userId = getUserId(userDetails);

ScenarioDetailResponse scenarioDetailResponse = scenarioService.getScenarioByDecisionLine(decisionLineId, userId);

return ResponseEntity.ok(scenarioDetailResponse);
}

@GetMapping("/{scenarioId}/timeline")
@Operation(summary = "시나리오 타임라인 조회", description = "시나리오의 선택 경로를 시간순으로 조회합니다.")
public ResponseEntity<TimelineResponse> getScenarioTimeline(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,13 @@ public interface ScenarioRepository extends JpaRepository<Scenario, Long> {
@Query("SELECT s FROM Scenario s WHERE s.decisionLine.id = :decisionLineId")
Optional<Scenario> findByDecisionLineId(@Param("decisionLineId") Long decisionLineId);

// DecisionLine 기반 시나리오 조회 (권한 검증 포함)
@Query("SELECT s FROM Scenario s WHERE s.decisionLine.id = :decisionLineId AND s.user.id = :userId")
Optional<Scenario> findByDecisionLineIdAndUserId(
@Param("decisionLineId") Long decisionLineId,
@Param("userId") Long userId
);

// 내 완료된 선택 시나리오 목록 조회 (베이스 시나리오 제외)
Page<Scenario> findByUserIdAndDecisionLineIsNotNullAndStatusOrderByCreatedDateDesc(
Long userId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -423,6 +423,21 @@ public ScenarioDetailResponse getScenarioDetail(Long scenarioId, Long userId) {
return ScenarioDetailResponse.from(scenario, sceneTypes);
}

// DecisionLine ID로 시나리오 상세 조회
@Transactional(readOnly = true)
public ScenarioDetailResponse getScenarioByDecisionLine(Long decisionLineId, Long userId) {
// DecisionLine에 연결된 시나리오 조회 (권한 검증 포함)
Scenario scenario = scenarioRepository.findByDecisionLineIdAndUserId(decisionLineId, userId)
.orElseThrow(() -> new ApiException(ErrorCode.SCENARIO_NOT_FOUND,
"해당 DecisionLine에 연결된 시나리오를 찾을 수 없습니다."));

// 지표 조회
var sceneTypes = sceneTypeRepository.findByScenarioIdOrderByTypeAsc(scenario.getId());

// DTO 변환 및 반환
return ScenarioDetailResponse.from(scenario, sceneTypes);
}

// 시나리오 타임라인 조회
@Transactional(readOnly = true)
public TimelineResponse getScenarioTimeline(Long scenarioId, Long userId) {
Expand Down