66import com .blockcloud .domain .project .Project ;
77import com .blockcloud .domain .project .ProjectRepository ;
88import com .blockcloud .dto .RequestDto .TerraformApplyRequestDto ;
9- import com . blockcloud . dto . RequestDto . TerraformDestroyRequestDto ;
9+
1010import com .blockcloud .dto .RequestDto .TerraformPlanRequestDto ;
1111import com .blockcloud .dto .RequestDto .TerraformValidateRequestDto ;
1212import com .blockcloud .dto .ResponseDto .DeploymentListResponseDto ;
@@ -70,9 +70,6 @@ public TerraformPlanResponseDto planTerraform(Long projectId, TerraformPlanReque
7070 .build ();
7171 }
7272
73- /**
74- * Terraform 코드를 적용하여 배포를 시작합니다.
75- */
7673 @ Transactional
7774 public TerraformApplyResponseDto applyTerraform (Long projectId , TerraformApplyRequestDto requestDto , String username ) {
7875 Project project = projectRepository .findById (projectId )
@@ -109,46 +106,48 @@ public TerraformApplyResponseDto applyTerraform(Long projectId, TerraformApplyRe
109106 .build ();
110107 }
111108
112- /**
113- * Terraform 코드를 실행하여 인프라를 삭제합니다.
114- */
115109 @ Transactional
116- public TerraformDestroyResponseDto destroyTerraform (Long projectId , TerraformDestroyRequestDto requestDto , String username ) {
110+ public TerraformDestroyResponseDto destroyTerraformByDeployment (Long projectId , Long deploymentId , String username ) {
117111 Project project = projectRepository .findById (projectId )
118112 .orElseThrow (() -> new CommonException (ErrorCode .NOT_FOUND_PROJECT ));
119113
120- // 배포 이력 생성 (삭제용)
121- Deployment deployment = Deployment .builder ()
114+ Deployment deployment = deploymentRepository .findById (deploymentId )
115+ .orElseThrow (() -> new CommonException (ErrorCode .NOT_FOUND_DEPLOYMENT ));
116+
117+ // 프로젝트에 속한 배포인지 확인
118+ if (!deployment .getProject ().getId ().equals (projectId )) {
119+ throw new CommonException (ErrorCode .ACCESS_DENIED );
120+ }
121+
122+ // 삭제용 배포 이력 생성
123+ Deployment destroyDeployment = Deployment .builder ()
122124 .project (project )
123125 .status (DeploymentStatus .PENDING )
124126 .message ("인프라 삭제 대기 중" )
125- .terraformCode (requestDto .getTerraformCode ())
127+ .terraformCode (deployment .getTerraformCode ())
126128 .startedAt (LocalDateTime .now ())
127129 .build ();
128130
129- Deployment savedDeployment = deploymentRepository .save (deployment );
131+ Deployment savedDestroyDeployment = deploymentRepository .save (destroyDeployment );
130132
131133 // 비동기로 삭제 실행
132134 CompletableFuture .runAsync (() -> {
133135 try {
134- executeTerraformDestroy (savedDeployment .getId (), projectId , requestDto .getTerraformCode ());
136+ executeTerraformDestroy (savedDestroyDeployment .getId (), projectId , deployment .getTerraformCode ());
135137 } catch (Exception e ) {
136- log .error ("Terraform destroy failed for deployment {}: {}" , savedDeployment .getId (), e .getMessage ());
137- updateDeploymentStatus (savedDeployment .getId (), DeploymentStatus .FAILED , "삭제 실패: " + e .getMessage ());
138+ log .error ("Terraform destroy failed for deployment {}: {}" , savedDestroyDeployment .getId (), e .getMessage ());
139+ updateDeploymentStatus (savedDestroyDeployment .getId (), DeploymentStatus .FAILED , "삭제 실패: " + e .getMessage ());
138140 }
139141 });
140142
141143 return TerraformDestroyResponseDto .builder ()
142- .deploymentId (savedDeployment .getId ())
144+ .deploymentId (savedDestroyDeployment .getId ())
143145 .status ("PENDING" )
144146 .message ("인프라 삭제가 시작되었습니다." )
145- .startedAt (savedDeployment .getStartedAt ())
147+ .startedAt (savedDestroyDeployment .getStartedAt ())
146148 .build ();
147149 }
148150
149- /**
150- * 배포 상태를 조회합니다.
151- */
152151 public DeploymentStatusResponseDto getDeploymentStatus (Long projectId , Long deploymentId ) {
153152 Project project = projectRepository .findById (projectId )
154153 .orElseThrow (() -> new CommonException (ErrorCode .NOT_FOUND_PROJECT ));
@@ -171,9 +170,6 @@ public DeploymentStatusResponseDto getDeploymentStatus(Long projectId, Long depl
171170 .build ();
172171 }
173172
174- /**
175- * 프로젝트의 배포 이력을 조회합니다.
176- */
177173 public DeploymentListResponseDto getDeploymentHistory (Long projectId , Long lastId , int size ) {
178174 Project project = projectRepository .findById (projectId )
179175 .orElseThrow (() -> new CommonException (ErrorCode .NOT_FOUND_PROJECT ));
@@ -203,8 +199,6 @@ public DeploymentListResponseDto getDeploymentHistory(Long projectId, Long lastI
203199 .build ();
204200 }
205201
206- // Private helper methods
207-
208202 private void executeTerraformApply (Long deploymentId , Long projectId , String terraformCode ) {
209203 try {
210204 // 상태를 RUNNING으로 업데이트
0 commit comments