diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..ae89d58
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+customizations
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..b86273d
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
new file mode 100644
index 0000000..f832908
--- /dev/null
+++ b/.idea/gradle.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..1c1e243
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
index f68b6d1..c7c26ea 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@ Download JDK from [adoptium.net](https://adoptium.net/temurin/releases/)
## How to compile the project
```
-JAVA_HOME=/home/user/JDK/jdk-17 ./gradlew clean jar
+JAVA_HOME=/home/user/JDK/jdk-21 ./gradlew clean jar
```
## For Developers
diff --git a/customization-rest-controller/src/main/java/com/intland/codebeamer/controller/rest/internal/v2/customization/ExampleController.java b/customization-rest-controller/src/main/java/com/intland/codebeamer/controller/rest/internal/v2/customization/ExampleController.java
new file mode 100644
index 0000000..a8d0021
--- /dev/null
+++ b/customization-rest-controller/src/main/java/com/intland/codebeamer/controller/rest/internal/v2/customization/ExampleController.java
@@ -0,0 +1,36 @@
+package com.intland.codebeamer.controller.rest.internal.v2.customization;
+
+import com.intland.codebeamer.controller.rest.v2.AbstractRestController;
+import com.intland.codebeamer.controller.rest.v2.exception.TooManyRequestsException;
+import io.swagger.v3.oas.annotations.OpenAPIDefinition;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.responses.ApiResponses;
+import org.apache.log4j.Logger;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+@OpenAPIDefinition
+@RestController
+@RequestMapping(AbstractRestController.API_URI_V3)
+public class ExampleController extends AbstractRestController
+{
+ public static final Logger logger = Logger.getLogger(ExampleController.class);
+
+ @Operation(summary = "Get example greetings", tags = "Example")
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "OK "),
+ @ApiResponse(responseCode = "403", description = "Authentication is required"),
+ @ApiResponse(responseCode = "404", description = "Not found"),
+ @ApiResponse(responseCode = "429", description = "Too many requests", content = @Content(schema = @Schema(implementation = TooManyRequestsException.class)))
+ })
+ @RequestMapping(value = "example", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE)
+ public @ResponseBody String getHello() {
+ return "Hello PTC!";
+ }
+}
diff --git a/example-swagger-api/README.md b/example-swagger-api/README.md
new file mode 100644
index 0000000..5adc9f5
--- /dev/null
+++ b/example-swagger-api/README.md
@@ -0,0 +1,3 @@
+# Example GET Swagger API Endpoint
+
+When called, it returns 'Hello PTC!'.
diff --git a/example-swagger-api/build.gradle b/example-swagger-api/build.gradle
new file mode 100644
index 0000000..648603b
--- /dev/null
+++ b/example-swagger-api/build.gradle
@@ -0,0 +1,3 @@
+plugins {
+ id 'java-library'
+}
\ No newline at end of file
diff --git a/customization-rest-controller/src/main/java/com/intland/codebeamer/controller/rest/internal/v2/customization/CustomizationRestController.java b/example-swagger-api/src/main/java/com/intland/codebeamer/controller/rest/internal/v2/customization/CustomizationRestController.java
similarity index 100%
rename from customization-rest-controller/src/main/java/com/intland/codebeamer/controller/rest/internal/v2/customization/CustomizationRestController.java
rename to example-swagger-api/src/main/java/com/intland/codebeamer/controller/rest/internal/v2/customization/CustomizationRestController.java
diff --git a/settings.gradle b/settings.gradle
index 90c351c..a9a6221 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -7,3 +7,6 @@ include ':my-openapi-project'
include ':my-file-processor'
include ':my-gitpr-project'
include ':customization-rest-controller'
+include ':welcome-api'
+include ':example-swagger-api'
+
diff --git a/welcome-api/README.md b/welcome-api/README.md
new file mode 100644
index 0000000..ae30abc
--- /dev/null
+++ b/welcome-api/README.md
@@ -0,0 +1,3 @@
+# Say Hello API
+
+Saying Hello PTC upon calling it.
diff --git a/welcome-api/build.gradle b/welcome-api/build.gradle
new file mode 100644
index 0000000..648603b
--- /dev/null
+++ b/welcome-api/build.gradle
@@ -0,0 +1,3 @@
+plugins {
+ id 'java-library'
+}
\ No newline at end of file
diff --git a/welcome-api/src/main/java/com/intland/codebeamer/controller/rest/internal/v2/customization/ExampleController.java b/welcome-api/src/main/java/com/intland/codebeamer/controller/rest/internal/v2/customization/ExampleController.java
new file mode 100644
index 0000000..d8cb3d6
--- /dev/null
+++ b/welcome-api/src/main/java/com/intland/codebeamer/controller/rest/internal/v2/customization/ExampleController.java
@@ -0,0 +1,33 @@
+package com.intland.codebeamer.controller.rest.internal.v2.customization;
+
+import com.intland.codebeamer.controller.rest.v2.AbstractRestController;
+import com.intland.codebeamer.controller.rest.v2.exception.*;
+import org.apache.log4j.Logger;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.*;
+import io.swagger.v3.oas.annotations.OpenAPIDefinition;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.responses.ApiResponses;
+
+@OpenAPIDefinition
+@RestController
+@RequestMapping(AbstractRestController.API_URI_V3)
+public class ExampleController extends AbstractRestController
+{
+ public static final Logger logger = Logger.getLogger(ExampleController.class);
+
+ @Operation(summary = "Get example greetings", tags = "Example")
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "OK "),
+ @ApiResponse(responseCode = "403", description = "Authentication is required"),
+ @ApiResponse(responseCode = "404", description = "Not found"),
+ @ApiResponse(responseCode = "429", description = "Too many requests", content = @Content(schema = @Schema(implementation = TooManyRequestsException.class)))
+ })
+ @RequestMapping(value = "example", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE)
+ public @ResponseBody String getHello() {
+ return "Hello PTC!";
+ }
+}