diff --git a/.idea/GoTogether-backend.iml b/.idea/GoTogether-backend.iml
new file mode 100644
index 0000000..d6ebd48
--- /dev/null
+++ b/.idea/GoTogether-backend.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 87a20fc..9b71576 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,7 +1,10 @@
-
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 9875b4f..246d103 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -2,6 +2,7 @@
+
diff --git a/.idea/modules/planning-service.iml b/.idea/modules/planning-service.iml
new file mode 100644
index 0000000..a9c04c0
--- /dev/null
+++ b/.idea/modules/planning-service.iml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules/planning-service.test.iml b/.idea/modules/planning-service.test.iml
new file mode 100644
index 0000000..f643c32
--- /dev/null
+++ b/.idea/modules/planning-service.test.iml
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index f36c894..c401c52 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,16 +4,283 @@
-
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -35,6 +302,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -66,7 +344,8 @@
"RunOnceActivity.ShowReadmeOnStart": "true",
"RunOnceActivity.git.unshallow": "true",
"SHARE_PROJECT_CONFIGURATION_FILES": "true",
- "git-widget-placeholder": "dev",
+ "git-widget-placeholder": "Merging dev__planning__kavindu__initiatePipelines",
+ "node.js.selected.package.tslint": "(autodetect)",
"project.structure.last.edited": "Modules",
"project.structure.proportion": "0.15",
"project.structure.side.proportion": "0.2",
@@ -81,24 +360,13 @@
-
-
+
-
-
-
-
-
-
+
-
-
-
-
-
diff --git a/planning-service/src/main/java/org/example/planningservice/controllers/PipelineController.java b/planning-service/src/main/java/org/example/planningservice/controllers/PipelineController.java
index 9af1e5a..74bbb14 100644
--- a/planning-service/src/main/java/org/example/planningservice/controllers/PipelineController.java
+++ b/planning-service/src/main/java/org/example/planningservice/controllers/PipelineController.java
@@ -1,9 +1,8 @@
package org.example.planningservice.controllers;
import lombok.extern.slf4j.Slf4j;
-import org.example.planningservice.pipelines.PipelineManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.example.planningservice.pipelines.planning.PlanningPipe;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -14,19 +13,15 @@
@RequestMapping("/pipeline")
public class PipelineController {
- private static final Logger log = LoggerFactory.getLogger(PipelineController.class);
- private final PipelineManager pipelineManager;
-
- public PipelineController(PipelineManager pipelineManager) {
- this.pipelineManager = pipelineManager;
- }
+ @Autowired
+ private PlanningPipe planningPipe;
@PostMapping("/execute")
public String executePipeline(@RequestBody String input) {
- log.info("š Starting Pipeline...");
- String result = pipelineManager.execute(input);
- log.info("š Final Output: " + result);
+ log.info("š Starting Pipeline...\n");
+ String result = planningPipe.execute(input);
+ log.info("\nš Final Output: " + result);
return result;
}
diff --git a/planning-service/src/main/java/org/example/planningservice/frameworks/pipeline/Block.java b/planning-service/src/main/java/org/example/planningservice/frameworks/pipeline/Block.java
new file mode 100644
index 0000000..d9e4415
--- /dev/null
+++ b/planning-service/src/main/java/org/example/planningservice/frameworks/pipeline/Block.java
@@ -0,0 +1,11 @@
+package org.example.planningservice.frameworks.pipeline;
+
+/**
+ * Represents a processing block in a pipeline.
+ *
+ * @param the input type
+ * @param the output type
+ */
+public interface Block {
+ O process(I input);
+}
\ No newline at end of file
diff --git a/planning-service/src/main/java/org/example/planningservice/frameworks/pipeline/Pipe.java b/planning-service/src/main/java/org/example/planningservice/frameworks/pipeline/Pipe.java
new file mode 100644
index 0000000..70d6a9b
--- /dev/null
+++ b/planning-service/src/main/java/org/example/planningservice/frameworks/pipeline/Pipe.java
@@ -0,0 +1,25 @@
+package org.example.planningservice.frameworks.pipeline;
+
+/**
+ * Represents a pipeline.
+ *
+ * @param the input type
+ * @param the output type
+ */
+public class Pipe {
+
+ public final Block current;
+
+ public Pipe(Block current) {
+ this.current = current;
+ }
+
+ public Pipe connect(Block next) {
+ return new Pipe<>(input -> next.process(current.process(input)));
+ }
+
+ public O execute(I input) {
+ return current.process(input);
+ }
+}
+
diff --git a/planning-service/src/main/java/org/example/planningservice/pipelines/PipelineManager.java b/planning-service/src/main/java/org/example/planningservice/pipelines/PipelineManager.java
deleted file mode 100644
index 5db2e10..0000000
--- a/planning-service/src/main/java/org/example/planningservice/pipelines/PipelineManager.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.example.planningservice.pipelines;
-
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-@Service
-public class PipelineManager {
-
- private final List> steps;
-
- public PipelineManager(List> steps) {
- this.steps = steps;
- }
-
-
- public T execute(T input) {
- T result = input;
- for (PipelineStep step : steps) {
- result = step.process(result);
- }
- return result;
- }
-}
diff --git a/planning-service/src/main/java/org/example/planningservice/pipelines/PipelineStep.java b/planning-service/src/main/java/org/example/planningservice/pipelines/PipelineStep.java
deleted file mode 100644
index c73d79f..0000000
--- a/planning-service/src/main/java/org/example/planningservice/pipelines/PipelineStep.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.example.planningservice.pipelines;
-
-public interface PipelineStep {
- T process(T input);
-}
\ No newline at end of file
diff --git a/planning-service/src/main/java/org/example/planningservice/pipelines/planning/PlanningPipe.java b/planning-service/src/main/java/org/example/planningservice/pipelines/planning/PlanningPipe.java
new file mode 100644
index 0000000..5e68d1c
--- /dev/null
+++ b/planning-service/src/main/java/org/example/planningservice/pipelines/planning/PlanningPipe.java
@@ -0,0 +1,37 @@
+package org.example.planningservice.pipelines.planning;
+
+import lombok.extern.slf4j.Slf4j;
+import org.example.planningservice.frameworks.pipeline.Pipe;
+import org.example.planningservice.pipelines.planning.blocks.DataTransformationBlock;
+import org.example.planningservice.pipelines.planning.blocks.StorageBlock;
+import org.example.planningservice.pipelines.planning.blocks.ValidationBlock;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+public class PlanningPipe {
+
+ @Autowired
+ private DataTransformationBlock dataTransformationBlock;
+
+ @Autowired
+ private StorageBlock storageBlock;
+
+ @Autowired
+ private ValidationBlock validationBlock;
+
+ public String execute(String input) {
+ Pipe procedurePipe = createProcedurePipe();
+ log.info("=== created the pipeline (not executed yet) ===");
+
+ // Execute the pipeline
+ return procedurePipe.execute(input);
+ }
+
+ private Pipe createProcedurePipe() {
+ return new Pipe<>(validationBlock)
+ .connect(dataTransformationBlock)
+ .connect(storageBlock);
+ }
+}
diff --git a/planning-service/src/main/java/org/example/planningservice/pipelines/steps/DataTransformationStep.java b/planning-service/src/main/java/org/example/planningservice/pipelines/planning/blocks/DataTransformationBlock.java
similarity index 58%
rename from planning-service/src/main/java/org/example/planningservice/pipelines/steps/DataTransformationStep.java
rename to planning-service/src/main/java/org/example/planningservice/pipelines/planning/blocks/DataTransformationBlock.java
index cde7538..c3d2e08 100644
--- a/planning-service/src/main/java/org/example/planningservice/pipelines/steps/DataTransformationStep.java
+++ b/planning-service/src/main/java/org/example/planningservice/pipelines/planning/blocks/DataTransformationBlock.java
@@ -1,14 +1,12 @@
-package org.example.planningservice.pipelines.steps;
+package org.example.planningservice.pipelines.planning.blocks;
import lombok.extern.slf4j.Slf4j;
-import org.example.planningservice.pipelines.PipelineStep;
-import org.springframework.core.annotation.Order;
+import org.example.planningservice.frameworks.pipeline.Block;
import org.springframework.stereotype.Component;
@Slf4j
@Component
-@Order(2)
-public class DataTransformationStep implements PipelineStep {
+public class DataTransformationBlock implements Block {
@Override
public String process(String input) {
diff --git a/planning-service/src/main/java/org/example/planningservice/pipelines/steps/StorageStep.java b/planning-service/src/main/java/org/example/planningservice/pipelines/planning/blocks/StorageBlock.java
similarity index 50%
rename from planning-service/src/main/java/org/example/planningservice/pipelines/steps/StorageStep.java
rename to planning-service/src/main/java/org/example/planningservice/pipelines/planning/blocks/StorageBlock.java
index 5ffa468..0be4945 100644
--- a/planning-service/src/main/java/org/example/planningservice/pipelines/steps/StorageStep.java
+++ b/planning-service/src/main/java/org/example/planningservice/pipelines/planning/blocks/StorageBlock.java
@@ -1,14 +1,12 @@
-package org.example.planningservice.pipelines.steps;
+package org.example.planningservice.pipelines.planning.blocks;
import lombok.extern.slf4j.Slf4j;
-import org.example.planningservice.pipelines.PipelineStep;
-import org.springframework.core.annotation.Order;
+import org.example.planningservice.frameworks.pipeline.Block;
import org.springframework.stereotype.Component;
@Slf4j
@Component
-@Order(3)
-public class StorageStep implements PipelineStep {
+public class StorageBlock implements Block {
@Override
public String process(String input) {
diff --git a/planning-service/src/main/java/org/example/planningservice/pipelines/steps/ValidationStep.java b/planning-service/src/main/java/org/example/planningservice/pipelines/planning/blocks/ValidationBlock.java
similarity index 61%
rename from planning-service/src/main/java/org/example/planningservice/pipelines/steps/ValidationStep.java
rename to planning-service/src/main/java/org/example/planningservice/pipelines/planning/blocks/ValidationBlock.java
index b767118..3a07a42 100644
--- a/planning-service/src/main/java/org/example/planningservice/pipelines/steps/ValidationStep.java
+++ b/planning-service/src/main/java/org/example/planningservice/pipelines/planning/blocks/ValidationBlock.java
@@ -1,14 +1,12 @@
-package org.example.planningservice.pipelines.steps;
+package org.example.planningservice.pipelines.planning.blocks;
import lombok.extern.slf4j.Slf4j;
-import org.example.planningservice.pipelines.PipelineStep;
-import org.springframework.core.annotation.Order;
+import org.example.planningservice.frameworks.pipeline.Block;
import org.springframework.stereotype.Component;
@Slf4j
@Component
-@Order(1)
-public class ValidationStep implements PipelineStep {
+public class ValidationBlock implements Block {
@Override
public String process(String input) {