From f316309e2692a450c5f294d3e3d977e3f65ebf5f Mon Sep 17 00:00:00 2001 From: DurgaPrasad-54 Date: Tue, 3 Feb 2026 10:23:39 +0530 Subject: [PATCH 01/12] chore(swagger): automate swagger sync to amrit-docs --- .github/workflows/swagger-json.yml | 83 +++++++++++++++++++ pom.xml | 5 ++ .../resources/application-swagger.properties | 18 ++++ 3 files changed, 106 insertions(+) create mode 100644 .github/workflows/swagger-json.yml create mode 100644 src/main/resources/application-swagger.properties diff --git a/.github/workflows/swagger-json.yml b/.github/workflows/swagger-json.yml new file mode 100644 index 0000000..846006d --- /dev/null +++ b/.github/workflows/swagger-json.yml @@ -0,0 +1,83 @@ +name: Sync Swagger to AMRIT-Docs + +on: + push: + branches: [ main ] + workflow_dispatch: + +jobs: + swagger-sync: + runs-on: ubuntu-latest + + steps: + - name: Checkout API repo + uses: actions/checkout@v4 + + - name: Set up Java 17 + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 17 + cache: maven + + - name: Build API (skip tests) + run: mvn clean package -DskipTests + + - name: Install jq + run: sudo apt-get update && sudo apt-get install -y jq + + - name: Run API in swagger profile + run: | + mvn spring-boot:run \ + -Dspring-boot.run.profiles=swagger \ + -Dspring-boot.run.arguments=--server.port=9090 \ + > app.log 2>&1 & + echo $! > api_pid.txt + + - name: Wait for API & fetch Swagger + run: | + for i in {1..30}; do + CODE=$(curl -s -o swagger_raw.json -w "%{http_code}" http://localhost:9090/v3/api-docs || true) + if [ "$CODE" = "200" ]; then + jq . swagger_raw.json > common-api.json + echo "Swagger generated successfully" + exit 0 + fi + echo "Waiting for API... ($i)" + sleep 5 + done + + echo "Swagger not generated" + cat app.log || true + exit 1 + + - name: Stop API + if: always() + run: | + if [ -f api_pid.txt ]; then + kill $(cat api_pid.txt) || true + fi + + - name: Checkout AMRIT-Docs + uses: actions/checkout@v4 + with: + repository: PSMRI/AMRIT-Docs + token: ${{ secrets.DOCS_REPO_TOKEN }} + path: amrit-docs + + - name: Copy Swagger JSON + run: | + cp admin-api.json amrit-docs/docs/swagger/admin-api.json + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v6 + with: + token: ${{ secrets.DOCS_REPO_TOKEN }} + path: amrit-docs + branch: auto/swagger-update-${{ github.run_id }} + base: main + commit-message: Auto-update Common-API swagger + title: Auto-update Common-API swagger + body: | + This PR automatically updates the Common-API Swagger JSON + from the latest main branch build. diff --git a/pom.xml b/pom.xml index 712140d..f0f714e 100644 --- a/pom.xml +++ b/pom.xml @@ -271,6 +271,11 @@ 0.12.6 runtime + + com.h2database + h2 + runtime + diff --git a/src/main/resources/application-swagger.properties b/src/main/resources/application-swagger.properties new file mode 100644 index 0000000..92ca6d0 --- /dev/null +++ b/src/main/resources/application-swagger.properties @@ -0,0 +1,18 @@ +spring.datasource.url=jdbc:h2:mem:swaggerdb +spring.datasource.driver-class-name=org.h2.Driver +spring.datasource.username=sa +spring.datasource.password= +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect +spring.jpa.hibernate.ddl-auto=none + +# Disable Redis if not needed for docs (optional) +spring.redis.host=localhost +spring.redis.port=6379 + +# CORS for Swagger UI +cors.allowed-origins=* + +# Logging +logging.level.root=INFO + +jwt.secret=dummy-secret From 38f51d62304748a83eadf7f0615d97ff723bda40 Mon Sep 17 00:00:00 2001 From: DurgaPrasad-54 Date: Tue, 3 Feb 2026 10:35:14 +0530 Subject: [PATCH 02/12] chore(swagger): automate swagger sync to amrit-docs --- .github/workflows/swagger-json.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/swagger-json.yml b/.github/workflows/swagger-json.yml index 846006d..28aaac4 100644 --- a/.github/workflows/swagger-json.yml +++ b/.github/workflows/swagger-json.yml @@ -39,7 +39,7 @@ jobs: for i in {1..30}; do CODE=$(curl -s -o swagger_raw.json -w "%{http_code}" http://localhost:9090/v3/api-docs || true) if [ "$CODE" = "200" ]; then - jq . swagger_raw.json > common-api.json + jq . swagger_raw.json > admin-api.json echo "Swagger generated successfully" exit 0 fi @@ -76,8 +76,8 @@ jobs: path: amrit-docs branch: auto/swagger-update-${{ github.run_id }} base: main - commit-message: Auto-update Common-API swagger - title: Auto-update Common-API swagger + commit-message: Auto-update ADMIN-API swagger + title: Auto-update ADMIN-API swagger body: | - This PR automatically updates the Common-API Swagger JSON + This PR automatically updates the ADMIN-API Swagger JSON from the latest main branch build. From 8e2bbbe0015685e6b65287df29c5ab09de297ed1 Mon Sep 17 00:00:00 2001 From: DurgaPrasad-54 Date: Tue, 3 Feb 2026 11:14:28 +0530 Subject: [PATCH 03/12] chore(swagger): automate swagger sync to amrit-docs --- .github/workflows/swagger-json.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/swagger-json.yml b/.github/workflows/swagger-json.yml index 28aaac4..e5f706a 100644 --- a/.github/workflows/swagger-json.yml +++ b/.github/workflows/swagger-json.yml @@ -37,7 +37,7 @@ jobs: - name: Wait for API & fetch Swagger run: | for i in {1..30}; do - CODE=$(curl -s -o swagger_raw.json -w "%{http_code}" http://localhost:9090/v3/api-docs || true) + CODE=$(curl --connect-timeout 2 --max-time 5 -s -o swagger_raw.json -w "%{http_code}" http://localhost:9090/v3/api-docs || true) if [ "$CODE" = "200" ]; then jq . swagger_raw.json > admin-api.json echo "Swagger generated successfully" From 377410b2285e35f72aeaa9b5dfc50474d6a46662 Mon Sep 17 00:00:00 2001 From: DurgaPrasad-54 Date: Tue, 3 Feb 2026 11:14:40 +0530 Subject: [PATCH 04/12] chore(swagger): automate swagger sync to amrit-docs --- src/main/resources/application-swagger.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/application-swagger.properties b/src/main/resources/application-swagger.properties index 92ca6d0..e9b44a9 100644 --- a/src/main/resources/application-swagger.properties +++ b/src/main/resources/application-swagger.properties @@ -10,9 +10,9 @@ spring.redis.host=localhost spring.redis.port=6379 # CORS for Swagger UI -cors.allowed-origins=* +cors.allowed-origins=${CORS_ALLOWED_ORIGINS:http://localhost:9090,http://localhost:8080} # Logging logging.level.root=INFO -jwt.secret=dummy-secret +jwt.secret=JWT_SECRET From 127e021ad3207f0bfaa7033bcd7a077f98037e79 Mon Sep 17 00:00:00 2001 From: DurgaPrasad-54 Date: Tue, 3 Feb 2026 11:23:58 +0530 Subject: [PATCH 05/12] chore(swagger): automate swagger sync to amrit-docs --- .github/workflows/swagger-json.yml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/swagger-json.yml b/.github/workflows/swagger-json.yml index e5f706a..9cf1e49 100644 --- a/.github/workflows/swagger-json.yml +++ b/.github/workflows/swagger-json.yml @@ -39,9 +39,13 @@ jobs: for i in {1..30}; do CODE=$(curl --connect-timeout 2 --max-time 5 -s -o swagger_raw.json -w "%{http_code}" http://localhost:9090/v3/api-docs || true) if [ "$CODE" = "200" ]; then - jq . swagger_raw.json > admin-api.json - echo "Swagger generated successfully" - exit 0 + if jq . swagger_raw.json > admin-api.json; then + echo "Swagger generated successfully" + exit 0 + else + echo "Failed to parse swagger_raw.json with jq" + exit 1 + fi fi echo "Waiting for API... ($i)" sleep 5 @@ -67,6 +71,7 @@ jobs: - name: Copy Swagger JSON run: | + mkdir -p amrit-docs/docs/swagger cp admin-api.json amrit-docs/docs/swagger/admin-api.json - name: Create Pull Request From 5453c2af309266d5f32369101ae681d4c087a707 Mon Sep 17 00:00:00 2001 From: DurgaPrasad-54 Date: Wed, 11 Feb 2026 10:51:06 +0530 Subject: [PATCH 06/12] chore(swagger): update github swagger workflow --- .github/workflows/swagger-json.yml | 51 ++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/.github/workflows/swagger-json.yml b/.github/workflows/swagger-json.yml index 9cf1e49..9b2bf65 100644 --- a/.github/workflows/swagger-json.yml +++ b/.github/workflows/swagger-json.yml @@ -8,6 +8,7 @@ on: jobs: swagger-sync: runs-on: ubuntu-latest + timeout-minutes: 20 steps: - name: Checkout API repo @@ -21,8 +22,8 @@ jobs: cache: maven - name: Build API (skip tests) - run: mvn clean package -DskipTests - + run: mvn -B clean package -DskipTests + - name: Install jq run: sudo apt-get update && sudo apt-get install -y jq @@ -36,19 +37,27 @@ jobs: - name: Wait for API & fetch Swagger run: | - for i in {1..30}; do + for i in {1..40}; do CODE=$(curl --connect-timeout 2 --max-time 5 -s -o swagger_raw.json -w "%{http_code}" http://localhost:9090/v3/api-docs || true) + if [ "$CODE" = "200" ]; then - if jq . swagger_raw.json > admin-api.json; then - echo "Swagger generated successfully" - exit 0 - else - echo "Failed to parse swagger_raw.json with jq" + jq . swagger_raw.json > admin-api.json || { + echo "Swagger JSON invalid" + cat swagger_raw.json + exit 1 + } + + if [ "$(jq '.paths | length' admin-api.json)" -eq 0 ]; then + echo "Swagger paths empty – failing" exit 1 fi + + echo "Swagger generated successfully" + exit 0 fi + echo "Waiting for API... ($i)" - sleep 5 + sleep 4 done echo "Swagger not generated" @@ -58,9 +67,17 @@ jobs: - name: Stop API if: always() run: | + # Graceful shutdown of the process group + sleep 5 + # Force kill the process group if still running if [ -f api_pid.txt ]; then - kill $(cat api_pid.txt) || true - fi + PID=$(cat api_pid.txt) + kill -TERM -- -"$PID" 2>/dev/null || true + sleep 2 + kill -9 -- -"$PID" 2>/dev/null || true + fi + # Fallback: kill any remaining java process on port 9090 + fuser -k 9090/tcp 2>/dev/null || true - name: Checkout AMRIT-Docs uses: actions/checkout@v4 @@ -68,6 +85,7 @@ jobs: repository: PSMRI/AMRIT-Docs token: ${{ secrets.DOCS_REPO_TOKEN }} path: amrit-docs + fetch-depth: 0 - name: Copy Swagger JSON run: | @@ -75,14 +93,15 @@ jobs: cp admin-api.json amrit-docs/docs/swagger/admin-api.json - name: Create Pull Request - uses: peter-evans/create-pull-request@v6 + uses: peter-evans/create-pull-request@v8 with: token: ${{ secrets.DOCS_REPO_TOKEN }} path: amrit-docs - branch: auto/swagger-update-${{ github.run_id }} + branch: auto/swagger-update-${{ github.run_id }}-${{ github.run_attempt }} base: main - commit-message: Auto-update ADMIN-API swagger - title: Auto-update ADMIN-API swagger + commit-message: "chore(docs): auto-update Admin-API swagger" + title: "chore(docs): auto-update Admin-API swagger" + delete-branch: true body: | - This PR automatically updates the ADMIN-API Swagger JSON + This PR automatically updates Admin-API Swagger JSON from the latest main branch build. From 3be35dd05c117c50de1e03dd52ea1f78ae36f804 Mon Sep 17 00:00:00 2001 From: DurgaPrasad-54 Date: Thu, 12 Feb 2026 12:25:44 +0530 Subject: [PATCH 07/12] chore(swagger): add env-driven Dev/UAT/Demo servers --- .github/workflows/swagger-json.yml | 2 +- .../com/iemr/admin/config/SwaggerConfig.java | 26 ++++++++++++++----- .../resources/application-swagger.properties | 5 ++++ 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/.github/workflows/swagger-json.yml b/.github/workflows/swagger-json.yml index 9b2bf65..4ae97c6 100644 --- a/.github/workflows/swagger-json.yml +++ b/.github/workflows/swagger-json.yml @@ -97,7 +97,7 @@ jobs: with: token: ${{ secrets.DOCS_REPO_TOKEN }} path: amrit-docs - branch: auto/swagger-update-${{ github.run_id }}-${{ github.run_attempt }} + branch: auto/swagger-update-admin-api base: main commit-message: "chore(docs): auto-update Admin-API swagger" title: "chore(docs): auto-update Admin-API swagger" diff --git a/src/main/java/com/iemr/admin/config/SwaggerConfig.java b/src/main/java/com/iemr/admin/config/SwaggerConfig.java index c3a09c7..6a7c531 100644 --- a/src/main/java/com/iemr/admin/config/SwaggerConfig.java +++ b/src/main/java/com/iemr/admin/config/SwaggerConfig.java @@ -2,6 +2,8 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.OpenAPI; @@ -11,14 +13,24 @@ @Configuration public class SwaggerConfig { - - @Bean + @Autowired + private Environment env; + + @Bean public OpenAPI customOpenAPI() { - return new OpenAPI().info(new - Info().title("Admin API").version("version").description("A microservice for the creation and management of beneficiaries.")) - .addSecurityItem(new SecurityRequirement().addList("my security")) - .components(new Components().addSecuritySchemes("my security", - new SecurityScheme().name("my security").type(SecurityScheme.Type.HTTP).scheme("bearer"))); + String devUrl = env.getProperty("API_DEV_URL"); + String uatUrl = env.getProperty("API_UAT_URL"); + String demoUrl = env.getProperty("API_DEMO_URL"); + return new OpenAPI() + .info(new Info().title("Admin API").version("version").description("A microservice for the creation and management of beneficiaries.")) + .addSecurityItem(new SecurityRequirement().addList("my security")) + .components(new Components().addSecuritySchemes("my security", + new SecurityScheme().name("my security").type(SecurityScheme.Type.HTTP).scheme("bearer"))) + .servers(java.util.Arrays.asList( + new io.swagger.v3.oas.models.servers.Server().url(devUrl).description("Dev"), + new io.swagger.v3.oas.models.servers.Server().url(uatUrl).description("UAT"), + new io.swagger.v3.oas.models.servers.Server().url(demoUrl).description("Demo") + )); } } diff --git a/src/main/resources/application-swagger.properties b/src/main/resources/application-swagger.properties index e9b44a9..971fda0 100644 --- a/src/main/resources/application-swagger.properties +++ b/src/main/resources/application-swagger.properties @@ -16,3 +16,8 @@ cors.allowed-origins=${CORS_ALLOWED_ORIGINS:http://localhost:9090,http://localho logging.level.root=INFO jwt.secret=JWT_SECRET + +# Swagger server URLs +API_DEV_URL=https://amritwprdev.piramalswasthya.org +API_UAT_URL=https://uatamrit.piramalswasthya.org +API_DEMO_URL=https://amritdemo.piramalswasthya.org From c9fa6c82f7ee4109e5d9a2a0a3755449568442c4 Mon Sep 17 00:00:00 2001 From: DurgaPrasad-54 Date: Thu, 12 Feb 2026 13:42:59 +0530 Subject: [PATCH 08/12] chore(swagger): remove field injection and inject URLs into OpenAPI bean --- src/main/java/com/iemr/admin/config/SwaggerConfig.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/com/iemr/admin/config/SwaggerConfig.java b/src/main/java/com/iemr/admin/config/SwaggerConfig.java index 6a7c531..08796e5 100644 --- a/src/main/java/com/iemr/admin/config/SwaggerConfig.java +++ b/src/main/java/com/iemr/admin/config/SwaggerConfig.java @@ -13,11 +13,9 @@ @Configuration public class SwaggerConfig { - @Autowired - private Environment env; @Bean - public OpenAPI customOpenAPI() { + public OpenAPI customOpenAPI(Environment env) { String devUrl = env.getProperty("API_DEV_URL"); String uatUrl = env.getProperty("API_UAT_URL"); String demoUrl = env.getProperty("API_DEMO_URL"); From eb4c6961b81d327f82d17fbd349af36aac3e0ae2 Mon Sep 17 00:00:00 2001 From: DurgaPrasad-54 Date: Thu, 12 Feb 2026 13:56:26 +0530 Subject: [PATCH 09/12] chore(swagger): add default urls --- src/main/java/com/iemr/admin/config/SwaggerConfig.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/iemr/admin/config/SwaggerConfig.java b/src/main/java/com/iemr/admin/config/SwaggerConfig.java index 08796e5..b6af265 100644 --- a/src/main/java/com/iemr/admin/config/SwaggerConfig.java +++ b/src/main/java/com/iemr/admin/config/SwaggerConfig.java @@ -16,9 +16,9 @@ public class SwaggerConfig { @Bean public OpenAPI customOpenAPI(Environment env) { - String devUrl = env.getProperty("API_DEV_URL"); - String uatUrl = env.getProperty("API_UAT_URL"); - String demoUrl = env.getProperty("API_DEMO_URL"); + String devUrl = env.getProperty("API_DEV_URL", "http://localhost:9090"); + String uatUrl = env.getProperty("API_UAT_URL", "http://localhost:9090"); + String demoUrl = env.getProperty("API_DEMO_URL", "http://localhost:9090"); return new OpenAPI() .info(new Info().title("Admin API").version("version").description("A microservice for the creation and management of beneficiaries.")) .addSecurityItem(new SecurityRequirement().addList("my security")) From 96bf3a987f037fbbac1b5d76d5578a34242959c2 Mon Sep 17 00:00:00 2001 From: DurgaPrasad-54 Date: Thu, 12 Feb 2026 13:59:05 +0530 Subject: [PATCH 10/12] chore(swagger): update description for swagger --- src/main/java/com/iemr/admin/config/SwaggerConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/admin/config/SwaggerConfig.java b/src/main/java/com/iemr/admin/config/SwaggerConfig.java index b6af265..ea1bde8 100644 --- a/src/main/java/com/iemr/admin/config/SwaggerConfig.java +++ b/src/main/java/com/iemr/admin/config/SwaggerConfig.java @@ -20,7 +20,7 @@ public OpenAPI customOpenAPI(Environment env) { String uatUrl = env.getProperty("API_UAT_URL", "http://localhost:9090"); String demoUrl = env.getProperty("API_DEMO_URL", "http://localhost:9090"); return new OpenAPI() - .info(new Info().title("Admin API").version("version").description("A microservice for the creation and management of beneficiaries.")) + .info(new Info().title("Admin API").version("version").description("Microservice for administration, configuration, user and role management, and service-level operations.")) .addSecurityItem(new SecurityRequirement().addList("my security")) .components(new Components().addSecuritySchemes("my security", new SecurityScheme().name("my security").type(SecurityScheme.Type.HTTP).scheme("bearer"))) From 359aeab77070419a9f0ee003b856c5eebad7b85e Mon Sep 17 00:00:00 2001 From: DurgaPrasad-54 Date: Thu, 12 Feb 2026 14:02:01 +0530 Subject: [PATCH 11/12] chore(swagger): update the default urls and properties --- src/main/java/com/iemr/admin/config/SwaggerConfig.java | 7 +++---- src/main/resources/application-swagger.properties | 6 +++--- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/iemr/admin/config/SwaggerConfig.java b/src/main/java/com/iemr/admin/config/SwaggerConfig.java index ea1bde8..8641dfc 100644 --- a/src/main/java/com/iemr/admin/config/SwaggerConfig.java +++ b/src/main/java/com/iemr/admin/config/SwaggerConfig.java @@ -2,7 +2,6 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import io.swagger.v3.oas.models.Components; @@ -16,9 +15,9 @@ public class SwaggerConfig { @Bean public OpenAPI customOpenAPI(Environment env) { - String devUrl = env.getProperty("API_DEV_URL", "http://localhost:9090"); - String uatUrl = env.getProperty("API_UAT_URL", "http://localhost:9090"); - String demoUrl = env.getProperty("API_DEMO_URL", "http://localhost:9090"); + String devUrl = env.getProperty("api.dev.url", "http://localhost:9090"); + String uatUrl = env.getProperty("api.uat.url", "http://localhost:9090"); + String demoUrl = env.getProperty("api.demo.url", "http://localhost:9090"); return new OpenAPI() .info(new Info().title("Admin API").version("version").description("Microservice for administration, configuration, user and role management, and service-level operations.")) .addSecurityItem(new SecurityRequirement().addList("my security")) diff --git a/src/main/resources/application-swagger.properties b/src/main/resources/application-swagger.properties index 971fda0..7059d01 100644 --- a/src/main/resources/application-swagger.properties +++ b/src/main/resources/application-swagger.properties @@ -18,6 +18,6 @@ logging.level.root=INFO jwt.secret=JWT_SECRET # Swagger server URLs -API_DEV_URL=https://amritwprdev.piramalswasthya.org -API_UAT_URL=https://uatamrit.piramalswasthya.org -API_DEMO_URL=https://amritdemo.piramalswasthya.org +api.dev.url=${API_DEV_URL:https://amritwprdev.piramalswasthya.org} +api.uat.url=${API_UAT_URL:https://uatamrit.piramalswasthya.org} +api.demo.url=${API_DEMO_URL:https://amritdemo.piramalswasthya.org} From 7a4411867175c8158fb824e0aff97a26af5afcf6 Mon Sep 17 00:00:00 2001 From: DurgaPrasad-54 Date: Thu, 12 Feb 2026 14:04:07 +0530 Subject: [PATCH 12/12] chore(swagger): update the default urls and properties --- src/main/java/com/iemr/admin/config/SwaggerConfig.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/iemr/admin/config/SwaggerConfig.java b/src/main/java/com/iemr/admin/config/SwaggerConfig.java index 8641dfc..f87b63b 100644 --- a/src/main/java/com/iemr/admin/config/SwaggerConfig.java +++ b/src/main/java/com/iemr/admin/config/SwaggerConfig.java @@ -11,13 +11,15 @@ import io.swagger.v3.oas.models.security.SecurityScheme; @Configuration + public class SwaggerConfig { + private static final String DEFAULT_SERVER_URL = "http://localhost:9090"; @Bean public OpenAPI customOpenAPI(Environment env) { - String devUrl = env.getProperty("api.dev.url", "http://localhost:9090"); - String uatUrl = env.getProperty("api.uat.url", "http://localhost:9090"); - String demoUrl = env.getProperty("api.demo.url", "http://localhost:9090"); + String devUrl = env.getProperty("api.dev.url", DEFAULT_SERVER_URL); + String uatUrl = env.getProperty("api.uat.url", DEFAULT_SERVER_URL); + String demoUrl = env.getProperty("api.demo.url", DEFAULT_SERVER_URL); return new OpenAPI() .info(new Info().title("Admin API").version("version").description("Microservice for administration, configuration, user and role management, and service-level operations.")) .addSecurityItem(new SecurityRequirement().addList("my security"))