From cd71a908f3b2e66d951f936ff985025c0da53cf9 Mon Sep 17 00:00:00 2001 From: bjkim Date: Mon, 22 Sep 2025 10:27:21 +0900 Subject: [PATCH] =?UTF-8?q?[UPDATE]=20PipelineUploadController=EC=97=90=20?= =?UTF-8?q?Swagger=20API=20=EB=AC=B8=EC=84=9C=20annotation=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B0=8F=20CORS=20=EC=84=A4=EC=A0=95=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/PipelineUploadController.java | 42 ++++++++++++++----- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/src/main/java/kr/re/etri/autoflow/controllers/PipelineUploadController.java b/src/main/java/kr/re/etri/autoflow/controllers/PipelineUploadController.java index 563edd2..556a982 100644 --- a/src/main/java/kr/re/etri/autoflow/controllers/PipelineUploadController.java +++ b/src/main/java/kr/re/etri/autoflow/controllers/PipelineUploadController.java @@ -1,15 +1,13 @@ package kr.re.etri.autoflow.controllers; +import io.swagger.v3.oas.annotations.tags.Tag; import kr.re.etri.autoflow.service.PipelineUploadService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.multipart.MultipartFile; @@ -20,27 +18,54 @@ import java.util.Map; @RestController @RequestMapping("/pipelines") @RequiredArgsConstructor +@CrossOrigin(origins = "*") // 모든 도메인 허용 +@io.swagger.v3.oas.annotations.tags.Tag(name = "Kubeflow Pipeline", description = "Kubeflow 파이프라인 업로드 API") public class PipelineUploadController { private final PipelineUploadService pipelineUploadService; + @io.swagger.v3.oas.annotations.Operation( + summary = "파이프라인 업로드", + description = "Kubeflow에 파이프라인 파일(Multipart)을 업로드하고, 업로드 결과를 반환합니다." + ) + @io.swagger.v3.oas.annotations.responses.ApiResponses({ + @io.swagger.v3.oas.annotations.responses.ApiResponse( + responseCode = "200", + description = "파이프라인 업로드 성공" + ), + @io.swagger.v3.oas.annotations.responses.ApiResponse( + responseCode = "400", + description = "잘못된 요청" + ), + @io.swagger.v3.oas.annotations.responses.ApiResponse( + responseCode = "500", + description = "서버 내부 오류" + ) + }) @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public ResponseEntity> uploadPipeline( + @io.swagger.v3.oas.annotations.Parameter(description = "업로드할 파이프라인 파일", required = true) @RequestParam("uploadfile") MultipartFile file, + + @io.swagger.v3.oas.annotations.Parameter(description = "파이프라인 이름", required = true) @RequestParam(value = "name", required = false) String name, + + @io.swagger.v3.oas.annotations.Parameter(description = "표시 이름", required = true) @RequestParam(value = "display_name", required = false) String displayName, + + @io.swagger.v3.oas.annotations.Parameter(description = "파이프라인 설명", required = false) @RequestParam(value = "description", required = false) String description, - @RequestParam(value = "namespace", required = false) String namespace) { + @io.swagger.v3.oas.annotations.Parameter(description = "Kubeflow 네임스페이스", required = false) + @RequestParam(value = "namespace", required = false) String namespace + ) { try { Map result = pipelineUploadService.uploadPipeline(file, name, displayName, description, namespace); return ResponseEntity.ok(result); } catch (HttpClientErrorException e) { - // 콘솔 로그 log.error("Kubeflow API Error: status={}, response={}", e.getStatusCode(), e.getResponseBodyAsString(), e); - // 클라이언트 반환 Map error = new HashMap<>(); error.put("status", e.getStatusCode().value()); error.put("error", e.getStatusText()); @@ -48,10 +73,8 @@ public class PipelineUploadController { return ResponseEntity.status(e.getStatusCode()).body(error); } catch (Exception e) { - // 콘솔 로그 log.error("Pipeline upload failed", e); - // 클라이언트 반환 Map error = new HashMap<>(); error.put("status", 500); error.put("error", "Internal Server Error"); @@ -60,4 +83,3 @@ public class PipelineUploadController { } } } -