From bfc1b2b891c3b9ceb39df75c4e1852058849c96a Mon Sep 17 00:00:00 2001 From: bjkim Date: Mon, 25 Aug 2025 13:15:15 +0900 Subject: [PATCH] =?UTF-8?q?[ADD]=20WorkFlow=20=EB=B6=80=EB=AA=A8Project?= =?UTF-8?q?=EC=B6=94=EA=B0=80=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../re/etri/autoflow/AutoFlowApplication.java | 17 +++++++++++++++++ .../SpringSecurityRefreshTokenApplication.java | 13 ------------- ...wController.java => WorkFlowController.java} | 11 +++++------ .../re/etri/autoflow/entity/WorkflowEntity.java | 17 +++++++++++++++++ .../payload/request/WorkFlowRequest.java | 11 +++++++++++ ...orkflowService.java => WorkFlowService.java} | 17 +++++++++++------ 6 files changed, 61 insertions(+), 25 deletions(-) create mode 100644 src/main/java/kr/re/etri/autoflow/AutoFlowApplication.java delete mode 100644 src/main/java/kr/re/etri/autoflow/SpringSecurityRefreshTokenApplication.java rename src/main/java/kr/re/etri/autoflow/controllers/{WorkflowController.java => WorkFlowController.java} (89%) create mode 100644 src/main/java/kr/re/etri/autoflow/payload/request/WorkFlowRequest.java rename src/main/java/kr/re/etri/autoflow/service/{WorkflowService.java => WorkFlowService.java} (81%) diff --git a/src/main/java/kr/re/etri/autoflow/AutoFlowApplication.java b/src/main/java/kr/re/etri/autoflow/AutoFlowApplication.java new file mode 100644 index 0000000..44d0a46 --- /dev/null +++ b/src/main/java/kr/re/etri/autoflow/AutoFlowApplication.java @@ -0,0 +1,17 @@ +package kr.re.etri.autoflow; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; + +@SpringBootApplication +@EnableJpaAuditing +@Slf4j +public class AutoFlowApplication { + + public static void main(String[] args) { + SpringApplication.run(AutoFlowApplication.class, args); + } + +} diff --git a/src/main/java/kr/re/etri/autoflow/SpringSecurityRefreshTokenApplication.java b/src/main/java/kr/re/etri/autoflow/SpringSecurityRefreshTokenApplication.java deleted file mode 100644 index 5d00b1d..0000000 --- a/src/main/java/kr/re/etri/autoflow/SpringSecurityRefreshTokenApplication.java +++ /dev/null @@ -1,13 +0,0 @@ -package kr.re.etri.autoflow; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class SpringSecurityRefreshTokenApplication { - - public static void main(String[] args) { - SpringApplication.run(SpringSecurityRefreshTokenApplication.class, args); - } - -} diff --git a/src/main/java/kr/re/etri/autoflow/controllers/WorkflowController.java b/src/main/java/kr/re/etri/autoflow/controllers/WorkFlowController.java similarity index 89% rename from src/main/java/kr/re/etri/autoflow/controllers/WorkflowController.java rename to src/main/java/kr/re/etri/autoflow/controllers/WorkFlowController.java index fe29173..a60f0f2 100644 --- a/src/main/java/kr/re/etri/autoflow/controllers/WorkflowController.java +++ b/src/main/java/kr/re/etri/autoflow/controllers/WorkFlowController.java @@ -3,10 +3,9 @@ package kr.re.etri.autoflow.controllers; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; -import kr.re.etri.autoflow.entity.ProjectEntity; import kr.re.etri.autoflow.entity.WorkflowEntity; -import kr.re.etri.autoflow.payload.request.BaseSearchRequest; -import kr.re.etri.autoflow.service.WorkflowService; +import kr.re.etri.autoflow.payload.request.WorkFlowRequest; +import kr.re.etri.autoflow.service.WorkFlowService; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.http.ResponseEntity; @@ -18,9 +17,9 @@ import java.util.List; @RestController @RequestMapping("/api/workflows") @RequiredArgsConstructor -public class WorkflowController { +public class WorkFlowController { - private final WorkflowService workflowService; + private final WorkFlowService workflowService; @Operation(summary = "모든 워크플로우 조회") @GetMapping @@ -41,7 +40,7 @@ public class WorkflowController { @Operation(summary = "워크플로우 검색 및 페이지네이션 프로젝트 목록 조회") @GetMapping("/search") public ResponseEntity> searchProjects( - @ModelAttribute BaseSearchRequest request) { + @ModelAttribute WorkFlowRequest request) { Page page = workflowService.search(request); return ResponseEntity.ok(page); } diff --git a/src/main/java/kr/re/etri/autoflow/entity/WorkflowEntity.java b/src/main/java/kr/re/etri/autoflow/entity/WorkflowEntity.java index aec0f3e..274f064 100644 --- a/src/main/java/kr/re/etri/autoflow/entity/WorkflowEntity.java +++ b/src/main/java/kr/re/etri/autoflow/entity/WorkflowEntity.java @@ -38,4 +38,21 @@ public class WorkflowEntity { @Schema(description = "수정 일시", example = "2025-08-05T04:11:24.745") private LocalDateTime modDt; + + @Schema(description = "워크플로우 버전", example = "1.0") + private String version; + + @Schema(description = "스텝 개수", example = "5") + private Integer stepCount; + + // configProgress/토탈n개로 표현 + @Schema(description = "현재 구성 진행 개수", example = "1") + private Integer configProgress; + + @Schema(description = "Kubeflow 상태", example = "Running") + private String kubeflowStatus; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "project_id", referencedColumnName = "id", nullable = false) + private ProjectEntity project; } diff --git a/src/main/java/kr/re/etri/autoflow/payload/request/WorkFlowRequest.java b/src/main/java/kr/re/etri/autoflow/payload/request/WorkFlowRequest.java new file mode 100644 index 0000000..63ce395 --- /dev/null +++ b/src/main/java/kr/re/etri/autoflow/payload/request/WorkFlowRequest.java @@ -0,0 +1,11 @@ +package kr.re.etri.autoflow.payload.request; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class WorkFlowRequest extends BaseSearchRequest { + private String projectId; +} + diff --git a/src/main/java/kr/re/etri/autoflow/service/WorkflowService.java b/src/main/java/kr/re/etri/autoflow/service/WorkFlowService.java similarity index 81% rename from src/main/java/kr/re/etri/autoflow/service/WorkflowService.java rename to src/main/java/kr/re/etri/autoflow/service/WorkFlowService.java index eda2d26..bc31ccb 100644 --- a/src/main/java/kr/re/etri/autoflow/service/WorkflowService.java +++ b/src/main/java/kr/re/etri/autoflow/service/WorkFlowService.java @@ -1,10 +1,9 @@ package kr.re.etri.autoflow.service; -import kr.re.etri.autoflow.entity.ProjectEntity; import kr.re.etri.autoflow.entity.WorkflowEntity; import kr.re.etri.autoflow.payload.request.BaseSearchRequest; +import kr.re.etri.autoflow.payload.request.WorkFlowRequest; import kr.re.etri.autoflow.repository.WorkflowRepository; -import kr.re.etri.autoflow.specification.ProjectSpecification; import kr.re.etri.autoflow.specification.WorkflowSpecification; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; @@ -14,14 +13,12 @@ import org.springframework.data.domain.Sort; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; -import java.time.LocalDate; -import java.time.format.DateTimeParseException; import java.util.List; import java.util.Optional; @Service @RequiredArgsConstructor -public class WorkflowService { +public class WorkFlowService { private final WorkflowRepository workflowRepository; private final WorkflowSpecification workflowSpecification; @@ -47,7 +44,7 @@ public class WorkflowService { return false; } - public Page search(BaseSearchRequest request) { + public Page search(WorkFlowRequest request) { int pageIndex = request.getPage() > 0 ? request.getPage() - 1 : 0; Pageable pageable = PageRequest.of( @@ -61,6 +58,14 @@ public class WorkflowService { request.getKeyword() ); + // projectId가 있으면 조건 추가 (권장) + if (request.getProjectId() != null) { + spec = spec.and((root, query, cb) -> + cb.equal(root.get("project").get("id"), request.getProjectId()) + ); + } + return workflowRepository.findAll(spec, pageable); } + }