From 407730b6beb0ec8ce6e8dc8e1b1af326bc1aa1af Mon Sep 17 00:00:00 2001 From: DurgaPrasad-54 Date: Mon, 19 Jan 2026 21:53:44 +0530 Subject: [PATCH 1/4] docs(readme): add documentation badge --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4d24c6ce..37d6505e 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ # AMRIT - Telemedicine (TM) Service [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) -![Build Status](https://github.com/PSMRI/TM-API/actions/workflows/sast-and-package.yml/badge.svg) +[![DeepWiki](https://img.shields.io/badge/DeepWiki-PSMRI%2FTM--API-blue)](https://deepwiki.com/PSMRI/TM-API) + The AMRIT Telemedicine (TM) Service enhances the capabilities of Health and Wellness Centers (HWCs) by providing remote healthcare services, improving accessibility, enabling collaborative care, and integrating with other facilities such as drug dispensing and laboratory services. This service aims to extend the reach and convenience of HWCs, ensuring that patients receive necessary medical advice and services without the need for in-person visits. From a922b4450ad49b0c51649b63167eb25946570486 Mon Sep 17 00:00:00 2001 From: DurgaPrasad-54 Date: Thu, 5 Feb 2026 22:53:30 +0530 Subject: [PATCH 2/4] chore(swagger): automate swagger sync to amrit-docs --- .github/workflows/swagger-json.yml | 100 ++++++++++++++++++ pom.xml | 5 + .../resources/application-swagger.properties | 51 +++++++++ 3 files changed, 156 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 00000000..c922a78e --- /dev/null +++ b/.github/workflows/swagger-json.yml @@ -0,0 +1,100 @@ +name: Sync Swagger to AMRIT-Docs + +on: + push: + branches: [ main ] + workflow_dispatch: + +jobs: + swagger-sync: + runs-on: ubuntu-latest + timeout-minutes: 20 + + steps: + - name: Checkout API repo (full history) + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - 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 -B clean package -DskipTests + + - name: Install jq + run: sudo apt-get update && sudo apt-get install -y jq + + - name: Run API in swagger profile + run: | + nohup 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..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 + jq . swagger_raw.json > tm-api.json || { + echo "Swagger JSON invalid" + cat swagger_raw.json + exit 1 + } + + if [ "$(jq '.paths | length' tm-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 4 + done + + echo "Swagger not generated" + cat app.log || true + exit 1 + + - name: Stop API + if: always() + run: | + if [ -f api_pid.txt ]; then + kill -9 $(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 + fetch-depth: 0 + + - name: Copy Swagger JSON + run: | + mkdir -p amrit-docs/docs/swagger + cp tm-api.json amrit-docs/docs/swagger/tm-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 }}-${{ github.run_attempt }} + base: main + commit-message: "chore(docs): auto-update TM-API swagger" + title: "chore(docs): auto-update TM-API swagger" + body: | + This PR automatically updates TM-API Swagger JSON + from the latest main branch build. diff --git a/pom.xml b/pom.xml index cd3a8f6d..56d3b951 100644 --- a/pom.xml +++ b/pom.xml @@ -294,6 +294,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 00000000..1da897a0 --- /dev/null +++ b/src/main/resources/application-swagger.properties @@ -0,0 +1,51 @@ +spring.datasource.url=jdbc:h2:mem:swaggerdb +spring.datasource.driver-class-name=org.h2.Driver +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect +spring.jpa.hibernate.ddl-auto=create-drop +spring.redis.host=${REDIS_HOST:localhost} +spring.redis.port=${REDIS_PORT:6379} +cors.allowed-origins=${CORS_ALLOWED_ORIGINS:http://localhost:9090,http://localhost:8080} +logging.level.root=INFO +jwt.secret=${JWT_SECRET_KEY:JWT_SECRET_KEY} +common-api-url-searchBeneficiary=http://localhost:8080/beneficiary/search +common-api-url-searchuserbyid=http://localhost:8080/user/searchbyid +openkmDocUrl=http://localhost:8080/openkm +nurseWL=90 +nurseTCWL=90 +pharmaWL=90 +pharmaTCWL=90 +ashaWL=90 +ashaTCWL=90 +labWL=90 +labTCWL=90 +radioWL=90 +radioTCWL=90 +oncoWL=90 +oncoTCWL=90 +tcSpecialistSlotBook=true +tcSpecialistSlotCancel=true +TMReferredWL=90 +docWL=90 +docTCWL=90 +swymed_dnsname=swymed://psmri.swymed.com +jitsi_dnsname=https://meet.jit.si +fotesenseFilePath=C:/FetosenseReport +fetosenseAPIKey=${FOETOSENSE_API_KEY:Key} +scheduling-slotsize=5 +schedule=default +tcSpeclistWL=90 +tcSpeclistTCWL=90 +sendSMSUrl=http://localhost:8080/sms/send +prescription=default +cancel=default +reSchedule=default +snomedCTPageSize=50 +registrarQuickSearchByIdUrl=http://localhost:8080/registrar/quicksearchbyid +registrarQuickSearchByPhoneNoUrl=http://localhost:8080/registrar/quicksearchbyphoneno +registrarAdvanceSearchUrl=http://localhost:8080/registrar/advancesearch +carestreamOrderCreateURL=http://localhost:8080/carestream/order/create +getBenImageFromIdentity=http://localhost:8080/identity/ben/image +dataSyncUploadUrl=http://localhost:8080/datasync/upload +dataSyncDownloadUrl= +registrationUrl=http://localhost:8080/registration +beneficiaryEditUrl=http://localhost:8080/beneficiary/edit From 19cc91a33a97cd835f99a90f7556a9fd5c95c731 Mon Sep 17 00:00:00 2001 From: DurgaPrasad-54 Date: Fri, 6 Feb 2026 08:10:45 +0530 Subject: [PATCH 3/4] chore(swagger): automate swagger sync to amrit-docs --- src/main/resources/application-swagger.properties | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/application-swagger.properties b/src/main/resources/application-swagger.properties index 1da897a0..505a9903 100644 --- a/src/main/resources/application-swagger.properties +++ b/src/main/resources/application-swagger.properties @@ -6,7 +6,7 @@ spring.redis.host=${REDIS_HOST:localhost} spring.redis.port=${REDIS_PORT:6379} cors.allowed-origins=${CORS_ALLOWED_ORIGINS:http://localhost:9090,http://localhost:8080} logging.level.root=INFO -jwt.secret=${JWT_SECRET_KEY:JWT_SECRET_KEY} +jwt.secret=${JWT_SECRET_KEY:defualt} common-api-url-searchBeneficiary=http://localhost:8080/beneficiary/search common-api-url-searchuserbyid=http://localhost:8080/user/searchbyid openkmDocUrl=http://localhost:8080/openkm @@ -29,8 +29,8 @@ docWL=90 docTCWL=90 swymed_dnsname=swymed://psmri.swymed.com jitsi_dnsname=https://meet.jit.si -fotesenseFilePath=C:/FetosenseReport -fetosenseAPIKey=${FOETOSENSE_API_KEY:Key} +fotesenseFilePath=${FETOSENSE_FILE_PATH:/tmp/fetosense-report} +fetosenseAPIKey=${FETOSENSE_API_KEY:defualt-key} scheduling-slotsize=5 schedule=default tcSpeclistWL=90 From 81b51a0de28e8b4e87a5fb99cec52752ece210e9 Mon Sep 17 00:00:00 2001 From: DurgaPrasad-54 Date: Wed, 11 Feb 2026 08:05:05 +0530 Subject: [PATCH 4/4] chore(swagger): update swagger work flow and properties --- .github/workflows/swagger-json.yml | 27 ++++++++++++------- .../resources/application-swagger.properties | 2 +- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/.github/workflows/swagger-json.yml b/.github/workflows/swagger-json.yml index c922a78e..a92bd78a 100644 --- a/.github/workflows/swagger-json.yml +++ b/.github/workflows/swagger-json.yml @@ -11,10 +11,8 @@ jobs: timeout-minutes: 20 steps: - - name: Checkout API repo (full history) + - name: Checkout API repo uses: actions/checkout@v4 - with: - fetch-depth: 0 - name: Set up Java 17 uses: actions/setup-java@v4 @@ -25,15 +23,15 @@ jobs: - name: Build API (skip tests) run: mvn -B clean package -DskipTests - + - name: Install jq run: sudo apt-get update && sudo apt-get install -y jq - name: Run API in swagger profile run: | - nohup mvn spring-boot:run \ - -Dspring-boot.run.profiles=swagger \ - -Dspring-boot.run.arguments=--server.port=9090 \ + nohup java -jar target/tm-api-*.war \ + --spring.profiles.active=swagger \ + --server.port=9090 \ > app.log 2>&1 & echo $! > api_pid.txt @@ -69,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 -9 $(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 @@ -87,7 +93,7 @@ jobs: cp tm-api.json amrit-docs/docs/swagger/tm-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 @@ -95,6 +101,7 @@ jobs: base: main commit-message: "chore(docs): auto-update TM-API swagger" title: "chore(docs): auto-update TM-API swagger" + delete-branch: true body: | This PR automatically updates TM-API Swagger JSON from the latest main branch build. diff --git a/src/main/resources/application-swagger.properties b/src/main/resources/application-swagger.properties index 505a9903..fb4b94b3 100644 --- a/src/main/resources/application-swagger.properties +++ b/src/main/resources/application-swagger.properties @@ -6,7 +6,7 @@ spring.redis.host=${REDIS_HOST:localhost} spring.redis.port=${REDIS_PORT:6379} cors.allowed-origins=${CORS_ALLOWED_ORIGINS:http://localhost:9090,http://localhost:8080} logging.level.root=INFO -jwt.secret=${JWT_SECRET_KEY:defualt} +jwt.secret=${JWT_SECRET_KEY:#{T(java.util.UUID).randomUUID().toString()}} common-api-url-searchBeneficiary=http://localhost:8080/beneficiary/search common-api-url-searchuserbyid=http://localhost:8080/user/searchbyid openkmDocUrl=http://localhost:8080/openkm