From 6eb7e199e5ebbd6691787ff765b24f19c2ce5abf Mon Sep 17 00:00:00 2001 From: vanitha1822 Date: Wed, 26 Mar 2025 14:08:11 +0530 Subject: [PATCH 01/17] Add the functionality for video call consultation service --- .../environment/common_example.properties | 1 + .../videocall/VideoCallController.java | 74 +++++++++++++++++++ .../service/videocall/VideoCallService.java | 9 +++ .../videocall/VideoCallServiceImpl.java | 54 ++++++++++++++ 4 files changed, 138 insertions(+) create mode 100644 src/main/java/com/iemr/common/controller/videocall/VideoCallController.java create mode 100644 src/main/java/com/iemr/common/service/videocall/VideoCallService.java create mode 100644 src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java diff --git a/src/main/environment/common_example.properties b/src/main/environment/common_example.properties index 9a90154d..396cd5f7 100644 --- a/src/main/environment/common_example.properties +++ b/src/main/environment/common_example.properties @@ -189,4 +189,5 @@ springdoc.swagger-ui.enabled=true isProduction=false grievanceAllocationRetryConfiguration=3 +video-call-url=https://meet.jit.si/ diff --git a/src/main/java/com/iemr/common/controller/videocall/VideoCallController.java b/src/main/java/com/iemr/common/controller/videocall/VideoCallController.java new file mode 100644 index 00000000..0e30bf6e --- /dev/null +++ b/src/main/java/com/iemr/common/controller/videocall/VideoCallController.java @@ -0,0 +1,74 @@ +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import java.util.HashMap; +import java.util.Map; + +@RestController +@RequestMapping("/video-consultation") +@CrossOrigin() +public class VideoCallController { + final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + @Autowired + private VideoCallService videoCallService; + + @PostMapping(value = "/generate-link", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> generateJitsiLink() { + logger.info("inside generate link"); + Map response = new HashMap<>(); + try { + String link = videoCallService.generateMeetingLink(); + response.put("meetingLink", link); + return ResponseEntity.ok(response); + } catch (Exception e) { + response.put("error", e.getMessage()); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); + } + } + + @PostMapping(value = "/send-link", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> sendVideoLink() { + Map response = new HashMap<>(); + try { + String link = videoCallService.sendMeetingLink(); + response.put("status", "success"); + response.put("meetingLink", link); + return ResponseEntity.ok(response); + } catch (Exception e) { + response.put("error", e.getMessage()); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); + } + } + + @PostMapping(value = "/start-call", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> startCall() { + Map response = new HashMap<>(); + try { + String status = videoCallService.startCall(); + response.put("status", "success"); + response.put("message", status); + return ResponseEntity.ok(response); + } catch (Exception e) { + response.put("error", e.getMessage()); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); + } + } + + @GetMapping(value = "/status", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> getConsultationStatus() { + Map response = new HashMap<>(); + try { + response.put("status", videoCallService.getConsultationStatus()); + return ResponseEntity.ok(response); + } catch (Exception e) { // Added try-catch for error handling + response.put("error", e.getMessage()); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); + } + } +} diff --git a/src/main/java/com/iemr/common/service/videocall/VideoCallService.java b/src/main/java/com/iemr/common/service/videocall/VideoCallService.java new file mode 100644 index 00000000..835595bc --- /dev/null +++ b/src/main/java/com/iemr/common/service/videocall/VideoCallService.java @@ -0,0 +1,9 @@ +public interface VideoCallService { + public String generateMeetingLink() throws Exception; + + public String sendMeetingLink() throws Exception; + + public String startCall() throws Exception; + + public String getConsultationStatus() throws Exception; +} diff --git a/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java b/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java new file mode 100644 index 00000000..ecd98d3c --- /dev/null +++ b/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java @@ -0,0 +1,54 @@ +import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.Map; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import com.iemr.common.utils.config.ConfigProperties; + +@Service +public class VideoCallServiceImpl implements VideoCallService { + final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + private String meetingLink; + private boolean isLinkSent = false; + private String consultationStatus = "Not Initiated"; + private String jitsiLink; + + // Constructor to initialize jitsiLink + public VideoCallServiceImpl() { + this.jitsiLink = ConfigProperties.getPropertyByName("video-call-url"); + logger.info("Jitsi Link fetched: " + this.jitsiLink); + } + + @Override + public String generateMeetingLink() { + logger.info("generateMeetingLink: "); + + meetingLink = jitsiLink + System.currentTimeMillis(); + logger.info("Meeting link: " + meetingLink); + return meetingLink; + } + + @Override + public String sendMeetingLink() throws Exception { + if (meetingLink == null) { + throw new Exception("Meeting link not generated yet."); + } + isLinkSent = true; + return meetingLink; + } + + @Override + public String startCall() throws Exception { + if (!isLinkSent) { + throw new Exception("Cannot start without sending the link."); + } + consultationStatus = "Ongoing"; + return "Video consultation started"; + } + + @Override + public String getConsultationStatus() { + return consultationStatus; + } +} From 0a4b0ae8f668727c796999e6cb51ea048dc45824 Mon Sep 17 00:00:00 2001 From: vanitha1822 Date: Sat, 29 Mar 2025 07:55:15 +0530 Subject: [PATCH 02/17] Add the necessary imports for the application --- .../videocall/VideoCallController.java | 36 ++++++++++++------- .../service/videocall/VideoCallService.java | 11 +++--- .../videocall/VideoCallServiceImpl.java | 9 ++--- 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/iemr/common/controller/videocall/VideoCallController.java b/src/main/java/com/iemr/common/controller/videocall/VideoCallController.java index 0e30bf6e..d127ae92 100644 --- a/src/main/java/com/iemr/common/controller/videocall/VideoCallController.java +++ b/src/main/java/com/iemr/common/controller/videocall/VideoCallController.java @@ -1,24 +1,33 @@ +package com.iemr.common.controller.videocall; + +import java.util.HashMap; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import java.util.HashMap; -import java.util.Map; +import com.iemr.common.service.videocall.VideoCallService; @RestController -@RequestMapping("/video-consultation") @CrossOrigin() +@RequestMapping(value = "/video-consultation") public class VideoCallController { final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); @Autowired private VideoCallService videoCallService; - @PostMapping(value = "/generate-link", produces = MediaType.APPLICATION_JSON_VALUE) + @CrossOrigin() + @PostMapping(value = "/generate-link", produces = MediaType.APPLICATION_JSON_VALUE, headers = "Authorization") public ResponseEntity> generateJitsiLink() { logger.info("inside generate link"); Map response = new HashMap<>(); @@ -32,7 +41,8 @@ public ResponseEntity> generateJitsiLink() { } } - @PostMapping(value = "/send-link", produces = MediaType.APPLICATION_JSON_VALUE) + @CrossOrigin() + @PostMapping(value = "/send-link", produces = MediaType.APPLICATION_JSON_VALUE, headers = "Authorization") public ResponseEntity> sendVideoLink() { Map response = new HashMap<>(); try { @@ -45,8 +55,9 @@ public ResponseEntity> sendVideoLink() { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); } } - - @PostMapping(value = "/start-call", produces = MediaType.APPLICATION_JSON_VALUE) + + @CrossOrigin() + @PostMapping(value = "/start-call", produces = MediaType.APPLICATION_JSON_VALUE, headers = "Authorization") public ResponseEntity> startCall() { Map response = new HashMap<>(); try { @@ -60,13 +71,14 @@ public ResponseEntity> startCall() { } } - @GetMapping(value = "/status", produces = MediaType.APPLICATION_JSON_VALUE) + @CrossOrigin() + @GetMapping(value = "/status", produces = MediaType.APPLICATION_JSON_VALUE, headers = "Authorization") public ResponseEntity> getConsultationStatus() { Map response = new HashMap<>(); try { response.put("status", videoCallService.getConsultationStatus()); return ResponseEntity.ok(response); - } catch (Exception e) { // Added try-catch for error handling + } catch (Exception e) { response.put("error", e.getMessage()); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); } diff --git a/src/main/java/com/iemr/common/service/videocall/VideoCallService.java b/src/main/java/com/iemr/common/service/videocall/VideoCallService.java index 835595bc..321c71cd 100644 --- a/src/main/java/com/iemr/common/service/videocall/VideoCallService.java +++ b/src/main/java/com/iemr/common/service/videocall/VideoCallService.java @@ -1,9 +1,12 @@ +package com.iemr.common.service.videocall; + public interface VideoCallService { - public String generateMeetingLink() throws Exception; + + public String generateMeetingLink() throws Exception; - public String sendMeetingLink() throws Exception; + public String sendMeetingLink() throws Exception; - public String startCall() throws Exception; + public String startCall() throws Exception; - public String getConsultationStatus() throws Exception; + public String getConsultationStatus() throws Exception; } diff --git a/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java b/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java index ecd98d3c..1099756e 100644 --- a/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java +++ b/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java @@ -1,13 +1,14 @@ -import org.springframework.stereotype.Service; -import java.util.HashMap; -import java.util.Map; +package com.iemr.common.service.videocall; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + import com.iemr.common.utils.config.ConfigProperties; @Service public class VideoCallServiceImpl implements VideoCallService { - final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); private String meetingLink; private boolean isLinkSent = false; From 7238a37001808bea8ae3bc466c5370bf84399fb2 Mon Sep 17 00:00:00 2001 From: Vanitha Date: Mon, 7 Apr 2025 12:08:27 +0530 Subject: [PATCH 03/17] Update video call service with DB changes --- .../videocall/VideoCallController.java | 45 +++++++++---- .../data/videocall/VideoCallParameters.java | 67 +++++++++++++++++++ .../mapper/videocall/VideoCallMapper.java | 26 +++++++ .../model/videocall/VideoCallRequest.java | 19 ++++++ .../VideoCallParameterRepository.java | 20 ++++++ .../service/videocall/VideoCallService.java | 4 +- .../videocall/VideoCallServiceImpl.java | 25 +++++-- src/main/resources/application.properties | 3 +- 8 files changed, 188 insertions(+), 21 deletions(-) create mode 100644 src/main/java/com/iemr/common/data/videocall/VideoCallParameters.java create mode 100644 src/main/java/com/iemr/common/mapper/videocall/VideoCallMapper.java create mode 100644 src/main/java/com/iemr/common/model/videocall/VideoCallRequest.java create mode 100644 src/main/java/com/iemr/common/repository/videocall/VideoCallParameterRepository.java diff --git a/src/main/java/com/iemr/common/controller/videocall/VideoCallController.java b/src/main/java/com/iemr/common/controller/videocall/VideoCallController.java index d127ae92..9fec44a5 100644 --- a/src/main/java/com/iemr/common/controller/videocall/VideoCallController.java +++ b/src/main/java/com/iemr/common/controller/videocall/VideoCallController.java @@ -3,6 +3,7 @@ import java.util.HashMap; import java.util.Map; +import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -15,7 +16,13 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import com.iemr.common.model.videocall.VideoCallRequest; import com.iemr.common.service.videocall.VideoCallService; +import com.iemr.common.utils.response.OutputResponse; + +import jakarta.servlet.http.HttpServletRequest; + +import org.springframework.web.bind.annotation.RequestBody; @RestController @CrossOrigin() @@ -29,7 +36,6 @@ public class VideoCallController { @CrossOrigin() @PostMapping(value = "/generate-link", produces = MediaType.APPLICATION_JSON_VALUE, headers = "Authorization") public ResponseEntity> generateJitsiLink() { - logger.info("inside generate link"); Map response = new HashMap<>(); try { String link = videoCallService.generateMeetingLink(); @@ -41,20 +47,33 @@ public ResponseEntity> generateJitsiLink() { } } - @CrossOrigin() - @PostMapping(value = "/send-link", produces = MediaType.APPLICATION_JSON_VALUE, headers = "Authorization") - public ResponseEntity> sendVideoLink() { - Map response = new HashMap<>(); - try { - String link = videoCallService.sendMeetingLink(); - response.put("status", "success"); - response.put("meetingLink", link); - return ResponseEntity.ok(response); - } catch (Exception e) { - response.put("error", e.getMessage()); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); +@CrossOrigin() +@PostMapping(value = "/send-link", produces = MediaType.APPLICATION_JSON_VALUE, headers = "Authorization") +public ResponseEntity sendVideoLink(@RequestBody VideoCallRequest requestModel, HttpServletRequest request) { + OutputResponse response = new OutputResponse(); + + try { + if (requestModel.getCallerPhoneNumber() == null || requestModel.getMeetingLink() == null) { + throw new IllegalArgumentException("callerPhoneNumber and meetingLink are required"); } + + String status = videoCallService.sendMeetingLink(requestModel); + JSONObject responseObj = new JSONObject(); + responseObj.put("status", "success"); + responseObj.put("message", status); + response.setResponse(responseObj.toString()); + + } catch (IllegalArgumentException e) { + logger.error("Validation error: " + e.getMessage(), e); + return ResponseEntity.badRequest().body("{\"status\":\"error\",\"message\":\"" + e.getMessage() + "\"}"); + } catch (Exception e) { + logger.error("sendVideoLink failed with error: " + e.getMessage(), e); + response.setError(e); } + + return ResponseEntity.ok(response.toString()); +} + @CrossOrigin() @PostMapping(value = "/start-call", produces = MediaType.APPLICATION_JSON_VALUE, headers = "Authorization") diff --git a/src/main/java/com/iemr/common/data/videocall/VideoCallParameters.java b/src/main/java/com/iemr/common/data/videocall/VideoCallParameters.java new file mode 100644 index 00000000..1cce2e40 --- /dev/null +++ b/src/main/java/com/iemr/common/data/videocall/VideoCallParameters.java @@ -0,0 +1,67 @@ +package com.iemr.common.data.videocall; + +import java.sql.Timestamp; + +import com.iemr.common.utils.mapper.OutputMapper; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Data; + +@Entity +@Table(name = "t_videocallparameter") +@Data +public class VideoCallParameters { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "VideoCallParameterID") + Integer VideoCallParameterID; + + @Column(name = "DateOfCall") + Timestamp dateOfCall; + + @Column(name = "CallerPhoneNumber") + String callerPhoneNumber; + + @Column(name = "AgentID") + String agentID; + + @Column(name = "AgentName") + String agentName; + + @Column(name = "MeetingLink") + String meetingLink; + + @Column(name = "CallStatus") + String callStatus; + + @Column(name = "CallDuration") + String callDuration; + + @Column(name = "ProviderServiceMapID") + Integer providerServiceMapID; + + @Column(name = "ClosureRemark") + String closureRemark; + + @Column(name = "Deleted", insertable = false, updatable = true) + Boolean deleted; + @Column(name = "CreatedBy", insertable = true, updatable = false) + String createdBy; + @Column(name = "CreatedDate", insertable = false, updatable = false) + Timestamp createdDate; + @Column(name = "ModifiedBy", insertable = false, updatable = true) + String modifiedBy; + @Column(name = "LastModDate", insertable = false, updatable = false) + Timestamp lastModDate; + + @Override + public String toString() + { + return OutputMapper.gsonWithoutExposeRestriction().toJson(this); + } +} diff --git a/src/main/java/com/iemr/common/mapper/videocall/VideoCallMapper.java b/src/main/java/com/iemr/common/mapper/videocall/VideoCallMapper.java new file mode 100644 index 00000000..5dd51729 --- /dev/null +++ b/src/main/java/com/iemr/common/mapper/videocall/VideoCallMapper.java @@ -0,0 +1,26 @@ +package com.iemr.common.mapper.videocall; + +import java.util.List; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import org.mapstruct.IterableMapping; +import org.mapstruct.factory.Mappers; + +import com.iemr.common.data.videocall.VideoCallParameters; +import com.iemr.common.model.videocall.VideoCallRequest; + +@Mapper(componentModel = "spring") +public interface VideoCallMapper { + VideoCallMapper INSTANCE = Mappers.getMapper(VideoCallMapper.class); + + VideoCallRequest videoCallToRequest(VideoCallParameters videoCall); + + VideoCallParameters videoCallToEntity(VideoCallRequest videoCallRequest); + + @IterableMapping(elementTargetType = VideoCallRequest.class) + List videoCallToRequestList(List videoCallList); + + @IterableMapping(elementTargetType = VideoCallParameters.class) + List videoCallToEntityList(List videoCallRequestList); + +} diff --git a/src/main/java/com/iemr/common/model/videocall/VideoCallRequest.java b/src/main/java/com/iemr/common/model/videocall/VideoCallRequest.java new file mode 100644 index 00000000..0d42a6d2 --- /dev/null +++ b/src/main/java/com/iemr/common/model/videocall/VideoCallRequest.java @@ -0,0 +1,19 @@ +package com.iemr.common.model.videocall; + + +import java.sql.Timestamp; + +import lombok.Data; + +@Data +public class VideoCallRequest { + private Timestamp dateOfCall; + private String callerPhoneNumber; + private String agentID; + private String agentName; + private String meetingLink; + private String callStatus; + private String callDuration; + private Integer providerServiceMapID; + private String closureRemark; +} diff --git a/src/main/java/com/iemr/common/repository/videocall/VideoCallParameterRepository.java b/src/main/java/com/iemr/common/repository/videocall/VideoCallParameterRepository.java new file mode 100644 index 00000000..8f72cc68 --- /dev/null +++ b/src/main/java/com/iemr/common/repository/videocall/VideoCallParameterRepository.java @@ -0,0 +1,20 @@ +package com.iemr.common.repository.videocall; + +import java.util.List; + +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; +import org.springframework.data.jpa.repository.Query; +import com.iemr.common.data.videocall.VideoCallParameters; +import com.iemr.common.model.videocall.VideoCallRequest; + +@Repository +public interface VideoCallParameterRepository extends CrudRepository{ + // Fetch all video call requests that are not null and have a valid meeting link + // @Query("SELECT v FROM VideoCallRequest v WHERE v.meetingLink IS NOT NULL") + // List findAllWithMeetingLinks(); + + +} + + diff --git a/src/main/java/com/iemr/common/service/videocall/VideoCallService.java b/src/main/java/com/iemr/common/service/videocall/VideoCallService.java index 321c71cd..db9a277c 100644 --- a/src/main/java/com/iemr/common/service/videocall/VideoCallService.java +++ b/src/main/java/com/iemr/common/service/videocall/VideoCallService.java @@ -1,10 +1,12 @@ package com.iemr.common.service.videocall; +import com.iemr.common.model.videocall.VideoCallRequest; + public interface VideoCallService { public String generateMeetingLink() throws Exception; - public String sendMeetingLink() throws Exception; + public String sendMeetingLink(VideoCallRequest request) throws Exception; public String startCall() throws Exception; diff --git a/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java b/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java index 1099756e..ba9916fc 100644 --- a/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java +++ b/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java @@ -2,20 +2,31 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import com.iemr.common.data.videocall.VideoCallParameters; +import com.iemr.common.mapper.videocall.VideoCallMapper; +import com.iemr.common.model.videocall.VideoCallRequest; +import com.iemr.common.repository.videocall.VideoCallParameterRepository; import com.iemr.common.utils.config.ConfigProperties; +import com.iemr.common.utils.mapper.OutputMapper; @Service public class VideoCallServiceImpl implements VideoCallService { final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + @Autowired + private VideoCallParameterRepository videoCallRepository; + + @Autowired + private VideoCallMapper videoCallMapper; + private String meetingLink; private boolean isLinkSent = false; private String consultationStatus = "Not Initiated"; private String jitsiLink; - // Constructor to initialize jitsiLink public VideoCallServiceImpl() { this.jitsiLink = ConfigProperties.getPropertyByName("video-call-url"); logger.info("Jitsi Link fetched: " + this.jitsiLink); @@ -23,20 +34,24 @@ public VideoCallServiceImpl() { @Override public String generateMeetingLink() { - logger.info("generateMeetingLink: "); - meetingLink = jitsiLink + System.currentTimeMillis(); logger.info("Meeting link: " + meetingLink); return meetingLink; } @Override - public String sendMeetingLink() throws Exception { + public String sendMeetingLink(VideoCallRequest request) throws Exception { if (meetingLink == null) { throw new Exception("Meeting link not generated yet."); } + isLinkSent = true; - return meetingLink; + VideoCallParameters videoCallEntity = videoCallMapper.videoCallToEntity(request); + videoCallEntity.setMeetingLink(meetingLink); + + videoCallRepository.save(videoCallEntity); + + return OutputMapper.gsonWithoutExposeRestriction().toJson(videoCallMapper.videoCallToRequest(videoCallEntity)); } @Override diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index d645f273..b6453d61 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -11,7 +11,7 @@ spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.Im spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect -spring.jpa.hibernate.ddl-auto=none +spring.jpa.hibernate.ddl-auto=update spring.jackson.serialization.fail-on-empty-beans=false spring.jpa.hibernate.show_sql=true spring.jpa.hibernate.format_sql=true @@ -144,7 +144,6 @@ logging.level.org.springframework.web=INFO logging.level.org.hibernate=INFO logging.level.com.iemr=DEBUG logging.level.org.springframework=INFO - #If both properties are set, only logging.file.name takes effect. logging.path=logs/ From 8471f97f7f913ae82908846d9aab83d33936c517 Mon Sep 17 00:00:00 2001 From: Vanitha Date: Thu, 10 Apr 2025 18:12:30 +0530 Subject: [PATCH 04/17] Add update api for call status updation --- .../videocall/VideoCallController.java | 53 ++++++++++--------- .../data/videocall/VideoCallParameters.java | 6 +-- .../mapper/videocall/VideoCallMapper.java | 25 ++++++--- .../model/videocall/UpdateCallRequest.java | 11 ++++ .../model/videocall/UpdateCallResponse.java | 21 ++++++++ .../VideoCallParameterRepository.java | 22 ++++++-- .../service/videocall/VideoCallService.java | 5 +- .../videocall/VideoCallServiceImpl.java | 34 ++++++++---- 8 files changed, 124 insertions(+), 53 deletions(-) create mode 100644 src/main/java/com/iemr/common/model/videocall/UpdateCallRequest.java create mode 100644 src/main/java/com/iemr/common/model/videocall/UpdateCallResponse.java diff --git a/src/main/java/com/iemr/common/controller/videocall/VideoCallController.java b/src/main/java/com/iemr/common/controller/videocall/VideoCallController.java index 9fec44a5..5d48155e 100644 --- a/src/main/java/com/iemr/common/controller/videocall/VideoCallController.java +++ b/src/main/java/com/iemr/common/controller/videocall/VideoCallController.java @@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import com.iemr.common.model.videocall.UpdateCallRequest; import com.iemr.common.model.videocall.VideoCallRequest; import com.iemr.common.service.videocall.VideoCallService; import com.iemr.common.utils.response.OutputResponse; @@ -74,32 +75,34 @@ public ResponseEntity sendVideoLink(@RequestBody VideoCallRequest reques return ResponseEntity.ok(response.toString()); } - - @CrossOrigin() - @PostMapping(value = "/start-call", produces = MediaType.APPLICATION_JSON_VALUE, headers = "Authorization") - public ResponseEntity> startCall() { - Map response = new HashMap<>(); - try { - String status = videoCallService.startCall(); - response.put("status", "success"); - response.put("message", status); - return ResponseEntity.ok(response); - } catch (Exception e) { - response.put("error", e.getMessage()); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); - } - } +@CrossOrigin() +@PostMapping(value = "/update-call-status", produces = MediaType.APPLICATION_JSON_VALUE, headers = "Authorization") +public ResponseEntity updateCallStatus(@RequestBody UpdateCallRequest requestModel, HttpServletRequest request) { + OutputResponse response = new OutputResponse(); - @CrossOrigin() - @GetMapping(value = "/status", produces = MediaType.APPLICATION_JSON_VALUE, headers = "Authorization") - public ResponseEntity> getConsultationStatus() { - Map response = new HashMap<>(); - try { - response.put("status", videoCallService.getConsultationStatus()); - return ResponseEntity.ok(response); - } catch (Exception e) { - response.put("error", e.getMessage()); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); + try { + if (requestModel.getMeetingLink() == null || requestModel.getCallStatus() == null) { + throw new IllegalArgumentException("Meeting Link and Status are required"); } + + String result = videoCallService.updateCallStatus(requestModel); + + JSONObject responseObj = new JSONObject(); + responseObj.put("status", "success"); + responseObj.put("message", result); + response.setResponse(responseObj.toString()); + + } catch (IllegalArgumentException e) { + logger.error("Validation error: " + e.getMessage(), e); + return ResponseEntity.badRequest().body("{\"status\":\"error\",\"message\":\"" + e.getMessage() + "\"}"); + } catch (Exception e) { + logger.error("updateCallStatus failed with error: " + e.getMessage(), e); + response.setError(e); } + + return ResponseEntity.ok(response.toString()); +} + + + } diff --git a/src/main/java/com/iemr/common/data/videocall/VideoCallParameters.java b/src/main/java/com/iemr/common/data/videocall/VideoCallParameters.java index 1cce2e40..bb453310 100644 --- a/src/main/java/com/iemr/common/data/videocall/VideoCallParameters.java +++ b/src/main/java/com/iemr/common/data/videocall/VideoCallParameters.java @@ -16,10 +16,10 @@ @Table(name = "t_videocallparameter") @Data public class VideoCallParameters { - @Id + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "VideoCallParameterID") - Integer VideoCallParameterID; + @Column(name = "MeetingID") + Integer meetingID; @Column(name = "DateOfCall") Timestamp dateOfCall; diff --git a/src/main/java/com/iemr/common/mapper/videocall/VideoCallMapper.java b/src/main/java/com/iemr/common/mapper/videocall/VideoCallMapper.java index 5dd51729..521d5921 100644 --- a/src/main/java/com/iemr/common/mapper/videocall/VideoCallMapper.java +++ b/src/main/java/com/iemr/common/mapper/videocall/VideoCallMapper.java @@ -7,20 +7,31 @@ import org.mapstruct.factory.Mappers; import com.iemr.common.data.videocall.VideoCallParameters; +import com.iemr.common.model.videocall.UpdateCallRequest; +import com.iemr.common.model.videocall.UpdateCallResponse; import com.iemr.common.model.videocall.VideoCallRequest; @Mapper(componentModel = "spring") public interface VideoCallMapper { - VideoCallMapper INSTANCE = Mappers.getMapper(VideoCallMapper.class); + VideoCallMapper INSTANCE = Mappers.getMapper(VideoCallMapper.class); - VideoCallRequest videoCallToRequest(VideoCallParameters videoCall); + VideoCallRequest videoCallToRequest(VideoCallParameters videoCall); - VideoCallParameters videoCallToEntity(VideoCallRequest videoCallRequest); + VideoCallParameters videoCallToEntity(VideoCallRequest videoCallRequest); - @IterableMapping(elementTargetType = VideoCallRequest.class) - List videoCallToRequestList(List videoCallList); + @IterableMapping(elementTargetType = VideoCallRequest.class) + List videoCallToRequestList(List videoCallList); - @IterableMapping(elementTargetType = VideoCallParameters.class) - List videoCallToEntityList(List videoCallRequestList); + @IterableMapping(elementTargetType = VideoCallParameters.class) + List videoCallToEntityList(List videoCallRequestList); + VideoCallParameters updateRequestToVideoCall(UpdateCallRequest updateCallStatusRequest); + + UpdateCallResponse videoCallToResponse(VideoCallParameters videoCall); + + @IterableMapping(elementTargetType = VideoCallParameters.class) + List updateRequestToVideoCall(List updateCallStatusRequests); + + @IterableMapping(elementTargetType = UpdateCallResponse.class) + List videoCallToResponse(List videoCalls); } diff --git a/src/main/java/com/iemr/common/model/videocall/UpdateCallRequest.java b/src/main/java/com/iemr/common/model/videocall/UpdateCallRequest.java new file mode 100644 index 00000000..d6b231b2 --- /dev/null +++ b/src/main/java/com/iemr/common/model/videocall/UpdateCallRequest.java @@ -0,0 +1,11 @@ +package com.iemr.common.model.videocall; + +import lombok.Data; + +@Data +public class UpdateCallRequest { + String meetingLink; + String callStatus; + String callDuration; + String modifiedBy; +} diff --git a/src/main/java/com/iemr/common/model/videocall/UpdateCallResponse.java b/src/main/java/com/iemr/common/model/videocall/UpdateCallResponse.java new file mode 100644 index 00000000..609de1ac --- /dev/null +++ b/src/main/java/com/iemr/common/model/videocall/UpdateCallResponse.java @@ -0,0 +1,21 @@ +package com.iemr.common.model.videocall; + +import java.sql.Timestamp; + +import com.fasterxml.jackson.annotation.JsonFormat; + +import lombok.Data; + +@Data +public class UpdateCallResponse { + String meetingLink; + String callStatus; + String callDuration; + String modifiedBy; + + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") + Timestamp lastModified; + + public UpdateCallResponse() { + } +} diff --git a/src/main/java/com/iemr/common/repository/videocall/VideoCallParameterRepository.java b/src/main/java/com/iemr/common/repository/videocall/VideoCallParameterRepository.java index 8f72cc68..251b877a 100644 --- a/src/main/java/com/iemr/common/repository/videocall/VideoCallParameterRepository.java +++ b/src/main/java/com/iemr/common/repository/videocall/VideoCallParameterRepository.java @@ -3,18 +3,30 @@ import java.util.List; import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import org.springframework.data.jpa.repository.Query; import com.iemr.common.data.videocall.VideoCallParameters; import com.iemr.common.model.videocall.VideoCallRequest; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.transaction.annotation.Transactional; + @Repository -public interface VideoCallParameterRepository extends CrudRepository{ - // Fetch all video call requests that are not null and have a valid meeting link - // @Query("SELECT v FROM VideoCallRequest v WHERE v.meetingLink IS NOT NULL") - // List findAllWithMeetingLinks(); +public interface VideoCallParameterRepository extends CrudRepository { + + @Transactional + @Modifying + @Query("UPDATE VideoCallParameters v SET v.callStatus = :callStatus, v.callDuration = :callDuration, v.modifiedBy = :modifiedBy WHERE v.meetingLink = :meetingLink") + int updateCallStatusByMeetingLink(@Param("meetingLink") String meetingLink, + @Param("callStatus") String callStatus, + @Param("callDuration") String callDuration, + @Param("modifiedBy") String modifiedBy); + + @Query("SELECT v FROM VideoCallParameters v WHERE v.meetingLink = :meetingLink") + VideoCallParameters findByMeetingLink(@Param("meetingLink") String meetingLink); - } + diff --git a/src/main/java/com/iemr/common/service/videocall/VideoCallService.java b/src/main/java/com/iemr/common/service/videocall/VideoCallService.java index db9a277c..1435af6b 100644 --- a/src/main/java/com/iemr/common/service/videocall/VideoCallService.java +++ b/src/main/java/com/iemr/common/service/videocall/VideoCallService.java @@ -1,5 +1,6 @@ package com.iemr.common.service.videocall; +import com.iemr.common.model.videocall.UpdateCallRequest; import com.iemr.common.model.videocall.VideoCallRequest; public interface VideoCallService { @@ -8,7 +9,5 @@ public interface VideoCallService { public String sendMeetingLink(VideoCallRequest request) throws Exception; - public String startCall() throws Exception; - - public String getConsultationStatus() throws Exception; + public String updateCallStatus(UpdateCallRequest request) throws Exception; } diff --git a/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java b/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java index ba9916fc..a4443425 100644 --- a/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java +++ b/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java @@ -1,5 +1,6 @@ package com.iemr.common.service.videocall; +import org.apache.commons.lang.RandomStringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -7,6 +8,7 @@ import com.iemr.common.data.videocall.VideoCallParameters; import com.iemr.common.mapper.videocall.VideoCallMapper; +import com.iemr.common.model.videocall.UpdateCallRequest; import com.iemr.common.model.videocall.VideoCallRequest; import com.iemr.common.repository.videocall.VideoCallParameterRepository; import com.iemr.common.utils.config.ConfigProperties; @@ -34,7 +36,7 @@ public VideoCallServiceImpl() { @Override public String generateMeetingLink() { - meetingLink = jitsiLink + System.currentTimeMillis(); + meetingLink=jitsiLink+RandomStringUtils.randomAlphanumeric(8); logger.info("Meeting link: " + meetingLink); return meetingLink; } @@ -55,16 +57,28 @@ public String sendMeetingLink(VideoCallRequest request) throws Exception { } @Override - public String startCall() throws Exception { - if (!isLinkSent) { - throw new Exception("Cannot start without sending the link."); + public String updateCallStatus(UpdateCallRequest callRequest) throws Exception { + VideoCallParameters videoCall = null; + + VideoCallParameters requestEntity = videoCallMapper.updateRequestToVideoCall(callRequest); + + int updateCount = videoCallRepository.updateCallStatusByMeetingLink( + requestEntity.getMeetingLink(), + requestEntity.getCallStatus(), + requestEntity.getCallDuration(), + requestEntity.getModifiedBy() + ); + + if (updateCount > 0) { + videoCall = videoCallRepository.findByMeetingLink(requestEntity.getMeetingLink()); + } else { + throw new Exception("Failed to update the call status"); } - consultationStatus = "Ongoing"; - return "Video consultation started"; - } - @Override - public String getConsultationStatus() { - return consultationStatus; + return OutputMapper.gsonWithoutExposeRestriction() + .toJson(videoCallMapper.videoCallToResponse(videoCall)); } + + + } From 382c7408511e1207f577a1cc204b038efd18fa6c Mon Sep 17 00:00:00 2001 From: Vanitha Date: Mon, 28 Apr 2025 13:43:10 +0530 Subject: [PATCH 05/17] Add service class to prepare the sms template and include benregid --- .../data/videocall/VideoCallParameters.java | 3 + .../com/iemr/common/model/sms/SMSRequest.java | 4 +- .../model/videocall/VideoCallRequest.java | 1 + .../common/service/sms/SMSServiceImpl.java | 128 +++++++++++++++++- 4 files changed, 128 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/iemr/common/data/videocall/VideoCallParameters.java b/src/main/java/com/iemr/common/data/videocall/VideoCallParameters.java index bb453310..a5241308 100644 --- a/src/main/java/com/iemr/common/data/videocall/VideoCallParameters.java +++ b/src/main/java/com/iemr/common/data/videocall/VideoCallParameters.java @@ -45,6 +45,9 @@ public class VideoCallParameters { @Column(name = "ProviderServiceMapID") Integer providerServiceMapID; + @Column(name = "BeneficiaryRegID") + private Long beneficiaryRegID; + @Column(name = "ClosureRemark") String closureRemark; diff --git a/src/main/java/com/iemr/common/model/sms/SMSRequest.java b/src/main/java/com/iemr/common/model/sms/SMSRequest.java index f3494a53..35bb699f 100644 --- a/src/main/java/com/iemr/common/model/sms/SMSRequest.java +++ b/src/main/java/com/iemr/common/model/sms/SMSRequest.java @@ -23,7 +23,7 @@ import java.sql.Timestamp; import java.util.List; - +import com.fasterxml.jackson.annotation.JsonProperty; import com.iemr.common.data.telemedicine.PrescribedDrugDetail; import lombok.Data; @@ -78,4 +78,6 @@ public class SMSRequest { private Long beneficiaryId; private String appointmentDate; private String appointmentTime; + @JsonProperty("sms_Advice") +private String smsAdvice; } diff --git a/src/main/java/com/iemr/common/model/videocall/VideoCallRequest.java b/src/main/java/com/iemr/common/model/videocall/VideoCallRequest.java index 0d42a6d2..1672d6ab 100644 --- a/src/main/java/com/iemr/common/model/videocall/VideoCallRequest.java +++ b/src/main/java/com/iemr/common/model/videocall/VideoCallRequest.java @@ -15,5 +15,6 @@ public class VideoCallRequest { private String callStatus; private String callDuration; private Integer providerServiceMapID; + private Long beneficiaryRegID; private String closureRemark; } diff --git a/src/main/java/com/iemr/common/service/sms/SMSServiceImpl.java b/src/main/java/com/iemr/common/service/sms/SMSServiceImpl.java index c9ce6ef8..7b37af93 100644 --- a/src/main/java/com/iemr/common/service/sms/SMSServiceImpl.java +++ b/src/main/java/com/iemr/common/service/sms/SMSServiceImpl.java @@ -75,6 +75,7 @@ import com.iemr.common.data.sms.SMSType; import com.iemr.common.data.telemedicine.PrescribedDrugDetail; import com.iemr.common.data.users.User; +import com.iemr.common.data.videocall.VideoCallParameters; import com.iemr.common.mapper.sms.SMSMapper; import com.iemr.common.model.beneficiary.BeneficiaryModel; import com.iemr.common.model.sms.CreateSMSRequest; @@ -100,6 +101,7 @@ import com.iemr.common.repository.sms.SMSTemplateRepository; import com.iemr.common.repository.sms.SMSTypeRepository; import com.iemr.common.repository.users.IEMRUserRepositoryCustom; +import com.iemr.common.repository.videocall.VideoCallParameterRepository; import com.iemr.common.service.beneficiary.IEMRSearchUserService; import com.iemr.common.utils.CryptoUtil; import com.iemr.common.utils.config.ConfigProperties; @@ -165,6 +167,9 @@ public class SMSServiceImpl implements SMSService { @Autowired private TCRequestModelRepo tCRequestModelRepo; + + @Autowired + private VideoCallParameterRepository videoCallParameterRepository; Logger logger = LoggerFactory.getLogger(this.getClass().getName()); @@ -248,23 +253,133 @@ public String getSMSParameters(SMSParameterModel request) throws Exception { return smaParamsResponse.toString(); } + public VideoCallParameters getVideoCallParameters(String meetingLink) { + return videoCallParameterRepository.findByMeetingLink(meetingLink); + } + @Override public String sendSMS(List requests, String authToken) throws Exception { List sentSMS = new ArrayList(); SMSTemplate smsTemplate = null; + for (SMSRequest request : requests) { SMSNotification sms; smsTemplate = smsTemplateRepository.findBySmsTemplateID(request.getSmsTemplateID()); + if (null != smsTemplate && smsTemplate.getSmsTemplateName().equalsIgnoreCase(prescription)) { sentSMS = prepareTMSMS(request, authToken); - } else { + } + else if(null != smsTemplate && smsTemplate.getSmsTemplateName().equalsIgnoreCase("Video Consultation")) + { + String meetingLink = request.getSmsAdvice(); + if (meetingLink == null || meetingLink.isEmpty()) { + throw new Exception("Meeting link is missing in the request"); + } + + VideoCallParameters vcParams = getVideoCallParameters(meetingLink); + if (vcParams == null) { + throw new Exception("Video Call Parameters not found for the provided meeting link: " + meetingLink); + } + + sms = prepareVideoCallSMS(request, vcParams, authToken); + sentSMS.add(sms); + } + else { sms = prepareSMS(request, authToken); sentSMS.add(sms); } } return sentSMS.toString(); } + + public SMSNotification prepareSMSWithVideoCall(SMSRequest request, String authToken, String meetingLink) throws Exception { + VideoCallParameters vcParams = getVideoCallParameters(meetingLink); + + if (vcParams != null) { + return prepareVideoCallSMS(request, vcParams, authToken); + } else { + throw new Exception("Video Call Parameters not found for the provided meeting link: " + meetingLink); + } +} + public SMSNotification prepareVideoCallSMS(SMSRequest request, VideoCallParameters vcParams, String authToken) throws Exception { + + SMSNotification sms = new SMSNotification(); + sms.setSmsStatus(SMSNotification.NOT_SENT); + sms.setCreatedBy(request.getCreatedBy()); + sms.setSmsTriggerDate(new Timestamp(Calendar.getInstance().getTime().getTime())); + sms.setBeneficiaryRegID(request.getBeneficiaryRegID()); + sms.setReceivingUserID(request.getUserID()); + + String smsToSend = ""; + SMSTemplate smsTemplate = smsTemplateRepository.findBySmsTemplateID(request.getSmsTemplateID()); + + if (smsTemplate != null) { + sms.setSmsTemplateID(smsTemplate.getSmsTemplateID()); + smsToSend = smsTemplate.getSmsTemplate(); + + List smsParameters = smsParameterMapRepository + .findSMSParametersMapBySmsTemplateID(request.getSmsTemplateID()); + + for (SMSParametersMap smsParametersMap : smsParameters) { + String variable = smsParametersMap.getSmsParameterName(); + String methodName = smsParametersMap.getSmsParameter().getDataName(); + String variableValue = ""; + variableValue = getVideoCallData(methodName, vcParams); + smsToSend = smsToSend.replace("$$" + variable + "$$", variableValue); + + if ("VideoCall".equalsIgnoreCase(smsParametersMap.getSmsParameter().getSmsParameterType())) { + variableValue = getVideoCallData(methodName, vcParams); + } + + if ("SMS_PHONE_NO".equalsIgnoreCase(variable)) { + sms.setPhoneNo(request.getBenPhoneNo() != null ? request.getBenPhoneNo() : variableValue); + } + else { + smsToSend = smsToSend.replace("$$" + variable + "$$", variableValue); + } + } + + if (request.getAlternateNo() != null) { + sms.setPhoneNo(request.getAlternateNo()); + } + if (request.getFacilityPhoneNo() != null) { + sms.setPhoneNo(request.getFacilityPhoneNo()); + } + } + + sms.setSms(smsToSend); + return smsNotification.save(sms); +} + + + public String getVideoCallData(String methodName, VideoCallParameters videoCall) throws Exception { + String variableValue = ""; + switch (methodName.toLowerCase()) { + case "videoconsultationlink": + variableValue = videoCall.getMeetingLink() != null ? videoCall.getMeetingLink() : ""; + break; + case "consultationdate": + variableValue = videoCall.getDateOfCall() != null ? videoCall.getDateOfCall().toString() : ""; + break; + case "phoneno": + variableValue = videoCall.getCallerPhoneNumber() !=null ? videoCall.getCallerPhoneNumber().toString() : ""; + break; + default: + Method method = videoCall.getClass().getDeclaredMethod("get" + capitalize(methodName)); + method.setAccessible(true); + Object result = method.invoke(videoCall); + variableValue = result != null ? result.toString() : ""; + break; + } + + return variableValue.trim(); + } + + private String capitalize(String str) { + return str == null || str.isEmpty() ? str : str.substring(0, 1).toUpperCase() + str.substring(1); + } + // Shubham Shekhar,16-10-2020,TM Prescription SMS private List prepareTMSMS( @@ -688,7 +803,7 @@ private String getBeneficiaryData(String className, String methodName, SMSReques Class clazz = Class.forName(className); Method method = clazz.getDeclaredMethod("get" + methodName, null); variableValue = method.invoke(beneficiary, null).toString(); - break; + break; } return variableValue.replace("null", "").trim(); @@ -970,11 +1085,10 @@ private String getBloodOnCallData(String className, String methodName, SMSReques String variableValue = ""; switch (methodName.toLowerCase()) { case "dateofrequest": - Date requestDate = bloodRequest.getCreatedDate(); - DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - String reportDate = df.format(requestDate); - variableValue = reportDate + " "; - break; + Date requestDate = bloodRequest.getCreatedDate(); + String reportDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(requestDate); + variableValue = reportDate + " "; + break; case "callercontactno": if (request.getIsBloodBankSMS() == true) { variableValue = (beneficiary.getBenPhoneMaps().size() > 0 From 6a9b599e14eabab2058598e3332d1692eac6275a Mon Sep 17 00:00:00 2001 From: Vanitha Date: Mon, 28 Apr 2025 13:51:23 +0530 Subject: [PATCH 06/17] update the properties in common_example file --- src/main/environment/common_example.properties | 10 +++++----- src/main/resources/application.properties | 8 +++++--- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/environment/common_example.properties b/src/main/environment/common_example.properties index 396cd5f7..7fe0f5ca 100644 --- a/src/main/environment/common_example.properties +++ b/src/main/environment/common_example.properties @@ -24,15 +24,15 @@ cti-server-ip=10.208.122.99 cti-logger_base_url=http://10.208.122.99/logger # Identity Config -identity-api-url = http://localhost:8094/ +identity-api-url = http://localhost:8094 #Verify whether 1097 and identity are same? -identity-1097-api-url = http://localhost:8095/ +identity-1097-api-url = http://localhost:8095 ##Generate Benificiary Config -genben-api=http://localhost:8092/ +genben-api=http://localhost:8092 #### SMS Configuration send-sms=false -sendSMSUrl = http://localhost:8080/sms/sendSMS +sendSMSUrl = http://localhost:8083/sms/sendSMS source-address=AIDSHL sms-username= sms-password= @@ -189,5 +189,5 @@ springdoc.swagger-ui.enabled=true isProduction=false grievanceAllocationRetryConfiguration=3 -video-call-url=https://meet.jit.si/ +video-call-url= diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 0622204c..f9f92b19 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -19,10 +19,10 @@ spring.http.multipart.max-request-size=1000MB spring.http.multipart.max-file-size=1000MB ##sms details for CHO -CHOSmsTemplate= CHO UPTSU SMS +CHOSmsTemplate=CHO UPTSU SMS ##sms details for beneficiary -BeneficiarySmsTemplate= Beneficiary UPTSU SMS +BeneficiarySmsTemplate=Beneficiary UPTSU SMS ######Project specific settings future-days=7 @@ -156,7 +156,7 @@ sms-message-type=SERVICE_EXPLICIT sms-entityid=1201161708885589464 ### generate Beneficiary IDs URL -generateBeneficiaryIDs-api-url =/generateBeneficiaryController/generateBeneficiaryIDs +generateBeneficiaryIDs-api-url=/generateBeneficiaryController/generateBeneficiaryIDs # CTI Config call-info-api-URL=http://CTI_SERVER/apps/appsHandler.php?transaction_id=CTI_CDR_CALL_INFO&agent_id=AGENT_ID&session_id=SESSION_ID&phone_num=PHONE_NO&resFormat=3 @@ -182,3 +182,5 @@ failedLoginAttempt=5 #Jwt Token configuration jwt.access.expiration=900000 jwt.refresh.expiration=604800000 + +spring.main.allow-bean-definition-overriding=true From 9ba1e10686773eecd05376a00bb396642ac2700f Mon Sep 17 00:00:00 2001 From: Vanitha Date: Mon, 28 Apr 2025 13:53:17 +0530 Subject: [PATCH 07/17] Fix the issue in date time conversion --- .../iemr/common/data/sms/SMSParametersMap.java | 14 +++++++++----- .../com/iemr/common/data/sms/SMSTemplate.java | 18 ++++++++++++++---- .../com/iemr/common/mapper/sms/SMSMapper.java | 2 +- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/iemr/common/data/sms/SMSParametersMap.java b/src/main/java/com/iemr/common/data/sms/SMSParametersMap.java index 4b07bb1a..5593aed7 100644 --- a/src/main/java/com/iemr/common/data/sms/SMSParametersMap.java +++ b/src/main/java/com/iemr/common/data/sms/SMSParametersMap.java @@ -24,7 +24,9 @@ import java.sql.Timestamp; import com.iemr.common.utils.mapper.OutputMapper; - +import com.google.gson.GsonBuilder; +import com.google.gson.LongSerializationPolicy; +import com.google.gson.annotations.Expose; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; @@ -69,9 +71,11 @@ public class SMSParametersMap @Column(name = "LastModDate", insertable = false, updatable = false) Timestamp lastModDate; - @Override - public String toString() - { - return OutputMapper.gsonWithoutExposeRestriction().toJson(this); +@Override + public String toString() { + + return new GsonBuilder().excludeFieldsWithoutExposeAnnotation().setLongSerializationPolicy(LongSerializationPolicy.STRING).serializeNulls() + .setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").create().toJson(this); } + } diff --git a/src/main/java/com/iemr/common/data/sms/SMSTemplate.java b/src/main/java/com/iemr/common/data/sms/SMSTemplate.java index 95f465d0..e6f21018 100644 --- a/src/main/java/com/iemr/common/data/sms/SMSTemplate.java +++ b/src/main/java/com/iemr/common/data/sms/SMSTemplate.java @@ -26,6 +26,8 @@ import com.iemr.common.utils.mapper.OutputMapper; +import com.google.gson.GsonBuilder; +import com.google.gson.LongSerializationPolicy; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; @@ -76,9 +78,17 @@ public class SMSTemplate @Column(name = "LastModDate", insertable = false, updatable = false) Timestamp lastModDate; - @Override - public String toString() - { - return OutputMapper.gsonWithoutExposeRestriction().toJson(this); + // @Override + // public String toString() + // { + // return OutputMapper.gsonWithoutExposeRestriction().toJson(this); + // } + +@Override + public String toString() { + + return new GsonBuilder().excludeFieldsWithoutExposeAnnotation().setLongSerializationPolicy(LongSerializationPolicy.STRING).serializeNulls() + .setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").create().toJson(this); } + } diff --git a/src/main/java/com/iemr/common/mapper/sms/SMSMapper.java b/src/main/java/com/iemr/common/mapper/sms/SMSMapper.java index 6dce2624..7fe629f1 100644 --- a/src/main/java/com/iemr/common/mapper/sms/SMSMapper.java +++ b/src/main/java/com/iemr/common/mapper/sms/SMSMapper.java @@ -48,7 +48,7 @@ public interface SMSMapper SMSMapper INSTANCE = Mappers.getMapper(SMSMapper.class); - @Mappings({ @Mapping(source = "request.smsTemplateTypeID", target = "smsTypeID"), }) + @Mappings({ @Mapping(source = "request.smsTemplateTypeID", target = "smsTypeID") }) SMSTemplate requestToSMSTemplate(SMSRequest request); @IterableMapping(elementTargetType = SMSTemplate.class) From e89b8316394eebb2bb4714b1dcb00f0cf4092e4a Mon Sep 17 00:00:00 2001 From: Vanitha Date: Fri, 9 May 2025 18:14:42 +0530 Subject: [PATCH 08/17] Add the link generated time and islinkused flag for the meeting link --- .../videocall/VideoCallController.java | 31 ++++---- .../data/videocall/VideoCallParameters.java | 10 +++ .../model/videocall/UpdateCallResponse.java | 2 +- .../model/videocall/VideoCallRequest.java | 11 ++- .../service/videocall/VideoCallService.java | 4 +- .../videocall/VideoCallServiceImpl.java | 77 +++++++++++-------- 6 files changed, 82 insertions(+), 53 deletions(-) diff --git a/src/main/java/com/iemr/common/controller/videocall/VideoCallController.java b/src/main/java/com/iemr/common/controller/videocall/VideoCallController.java index 5d48155e..7ffbc276 100644 --- a/src/main/java/com/iemr/common/controller/videocall/VideoCallController.java +++ b/src/main/java/com/iemr/common/controller/videocall/VideoCallController.java @@ -20,7 +20,9 @@ import com.iemr.common.model.videocall.VideoCallRequest; import com.iemr.common.service.videocall.VideoCallService; import com.iemr.common.utils.response.OutputResponse; - +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.servlet.http.HttpServletRequest; import org.springframework.web.bind.annotation.RequestBody; @@ -50,31 +52,26 @@ public ResponseEntity> generateJitsiLink() { @CrossOrigin() @PostMapping(value = "/send-link", produces = MediaType.APPLICATION_JSON_VALUE, headers = "Authorization") -public ResponseEntity sendVideoLink(@RequestBody VideoCallRequest requestModel, HttpServletRequest request) { +public String sendVideoLink(@RequestBody String requestModel, HttpServletRequest request) { OutputResponse response = new OutputResponse(); try { - if (requestModel.getCallerPhoneNumber() == null || requestModel.getMeetingLink() == null) { - throw new IllegalArgumentException("callerPhoneNumber and meetingLink are required"); - } - - String status = videoCallService.sendMeetingLink(requestModel); - JSONObject responseObj = new JSONObject(); - responseObj.put("status", "success"); - responseObj.put("message", status); - response.setResponse(responseObj.toString()); + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + VideoCallRequest requestData = objectMapper.readValue(requestModel, VideoCallRequest.class); + OutputResponse serviceResponse = videoCallService.sendMeetingLink(requestData); + + objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true); + return objectMapper.writeValueAsString(serviceResponse); // Automatically serialized to JSON - } catch (IllegalArgumentException e) { - logger.error("Validation error: " + e.getMessage(), e); - return ResponseEntity.badRequest().body("{\"status\":\"error\",\"message\":\"" + e.getMessage() + "\"}"); } catch (Exception e) { - logger.error("sendVideoLink failed with error: " + e.getMessage(), e); + logger.error("send MeetingLink failed with error: " + e.getMessage(), e); response.setError(e); + return response.toString(); } - - return ResponseEntity.ok(response.toString()); } + @CrossOrigin() @PostMapping(value = "/update-call-status", produces = MediaType.APPLICATION_JSON_VALUE, headers = "Authorization") public ResponseEntity updateCallStatus(@RequestBody UpdateCallRequest requestModel, HttpServletRequest request) { diff --git a/src/main/java/com/iemr/common/data/videocall/VideoCallParameters.java b/src/main/java/com/iemr/common/data/videocall/VideoCallParameters.java index a5241308..7ef41a71 100644 --- a/src/main/java/com/iemr/common/data/videocall/VideoCallParameters.java +++ b/src/main/java/com/iemr/common/data/videocall/VideoCallParameters.java @@ -51,14 +51,24 @@ public class VideoCallParameters { @Column(name = "ClosureRemark") String closureRemark; + @Column(name = "LinkGeneratedAt") + private Timestamp linkGeneratedAt; + + @Column(name = "IsLinkUsed") + private boolean linkUsed; + @Column(name = "Deleted", insertable = false, updatable = true) Boolean deleted; + @Column(name = "CreatedBy", insertable = true, updatable = false) String createdBy; + @Column(name = "CreatedDate", insertable = false, updatable = false) Timestamp createdDate; + @Column(name = "ModifiedBy", insertable = false, updatable = true) String modifiedBy; + @Column(name = "LastModDate", insertable = false, updatable = false) Timestamp lastModDate; diff --git a/src/main/java/com/iemr/common/model/videocall/UpdateCallResponse.java b/src/main/java/com/iemr/common/model/videocall/UpdateCallResponse.java index 609de1ac..ce45fe66 100644 --- a/src/main/java/com/iemr/common/model/videocall/UpdateCallResponse.java +++ b/src/main/java/com/iemr/common/model/videocall/UpdateCallResponse.java @@ -12,7 +12,7 @@ public class UpdateCallResponse { String callStatus; String callDuration; String modifiedBy; - + boolean isLinkUsed; @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") Timestamp lastModified; diff --git a/src/main/java/com/iemr/common/model/videocall/VideoCallRequest.java b/src/main/java/com/iemr/common/model/videocall/VideoCallRequest.java index 1672d6ab..d8a61eee 100644 --- a/src/main/java/com/iemr/common/model/videocall/VideoCallRequest.java +++ b/src/main/java/com/iemr/common/model/videocall/VideoCallRequest.java @@ -1,9 +1,9 @@ package com.iemr.common.model.videocall; - +import com.fasterxml.jackson.annotation.JsonFormat; import java.sql.Timestamp; - import lombok.Data; +import com.google.gson.Gson; @Data public class VideoCallRequest { @@ -17,4 +17,11 @@ public class VideoCallRequest { private Integer providerServiceMapID; private Long beneficiaryRegID; private String closureRemark; + private boolean isLinkUsed; + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss") + private Timestamp linkGeneratedAt; + + public String toJson() { + return new Gson().toJson(this); + } } diff --git a/src/main/java/com/iemr/common/service/videocall/VideoCallService.java b/src/main/java/com/iemr/common/service/videocall/VideoCallService.java index 1435af6b..f6a7e134 100644 --- a/src/main/java/com/iemr/common/service/videocall/VideoCallService.java +++ b/src/main/java/com/iemr/common/service/videocall/VideoCallService.java @@ -1,5 +1,5 @@ package com.iemr.common.service.videocall; - +import com.iemr.common.utils.response.OutputResponse; import com.iemr.common.model.videocall.UpdateCallRequest; import com.iemr.common.model.videocall.VideoCallRequest; @@ -7,7 +7,7 @@ public interface VideoCallService { public String generateMeetingLink() throws Exception; - public String sendMeetingLink(VideoCallRequest request) throws Exception; + public OutputResponse sendMeetingLink(VideoCallRequest request) throws Exception; public String updateCallStatus(UpdateCallRequest request) throws Exception; } diff --git a/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java b/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java index a4443425..85e6ebf7 100644 --- a/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java +++ b/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java @@ -5,7 +5,8 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - +import java.time.LocalDateTime; +import java.sql.Timestamp; import com.iemr.common.data.videocall.VideoCallParameters; import com.iemr.common.mapper.videocall.VideoCallMapper; import com.iemr.common.model.videocall.UpdateCallRequest; @@ -13,6 +14,9 @@ import com.iemr.common.repository.videocall.VideoCallParameterRepository; import com.iemr.common.utils.config.ConfigProperties; import com.iemr.common.utils.mapper.OutputMapper; +import com.iemr.common.utils.response.OutputResponse; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.gson.Gson; @Service public class VideoCallServiceImpl implements VideoCallService { @@ -42,43 +46,54 @@ public String generateMeetingLink() { } @Override - public String sendMeetingLink(VideoCallRequest request) throws Exception { - if (meetingLink == null) { - throw new Exception("Meeting link not generated yet."); - } + public OutputResponse sendMeetingLink(VideoCallRequest request) throws Exception { + OutputResponse response = new OutputResponse(); + + if (meetingLink == null || meetingLink.isEmpty()) { + throw new Exception("Meeting link not generated yet."); + } - isLinkSent = true; - VideoCallParameters videoCallEntity = videoCallMapper.videoCallToEntity(request); - videoCallEntity.setMeetingLink(meetingLink); + isLinkSent = true; - videoCallRepository.save(videoCallEntity); + VideoCallParameters videoCallEntity = videoCallMapper.videoCallToEntity(request); + videoCallEntity.setMeetingLink(meetingLink); + videoCallEntity.setLinkGeneratedAt(Timestamp.valueOf(LocalDateTime.now())); + videoCallEntity.setLinkUsed(false); - return OutputMapper.gsonWithoutExposeRestriction().toJson(videoCallMapper.videoCallToRequest(videoCallEntity)); + videoCallRepository.save(videoCallEntity); + + VideoCallRequest responseData = videoCallMapper.videoCallToRequest(videoCallEntity); + response.setResponse(responseData.toJson()); + + return response; } - @Override - public String updateCallStatus(UpdateCallRequest callRequest) throws Exception { - VideoCallParameters videoCall = null; - - VideoCallParameters requestEntity = videoCallMapper.updateRequestToVideoCall(callRequest); - - int updateCount = videoCallRepository.updateCallStatusByMeetingLink( - requestEntity.getMeetingLink(), - requestEntity.getCallStatus(), - requestEntity.getCallDuration(), - requestEntity.getModifiedBy() - ); - - if (updateCount > 0) { - videoCall = videoCallRepository.findByMeetingLink(requestEntity.getMeetingLink()); - } else { - throw new Exception("Failed to update the call status"); - } - - return OutputMapper.gsonWithoutExposeRestriction() - .toJson(videoCallMapper.videoCallToResponse(videoCall)); +@Override +public String updateCallStatus(UpdateCallRequest callRequest) throws Exception { + VideoCallParameters videoCall = null; + + VideoCallParameters requestEntity = videoCallMapper.updateRequestToVideoCall(callRequest); + + videoCall = videoCallRepository.findByMeetingLink(requestEntity.getMeetingLink()); + + int updateCount = videoCallRepository.updateCallStatusByMeetingLink( + requestEntity.getMeetingLink(), + requestEntity.getCallStatus(), + requestEntity.getCallDuration(), + requestEntity.getModifiedBy() + ); + + if (updateCount > 0) { + videoCall.setLinkUsed(true); + videoCallRepository.save(videoCall); + } else { + throw new Exception("Failed to update the call status"); } + return OutputMapper.gsonWithoutExposeRestriction() + .toJson(videoCallMapper.videoCallToResponse(videoCall)); +} + } From 38c338af936050f34054471cf28b016fdd83a27d Mon Sep 17 00:00:00 2001 From: Vanitha Date: Tue, 27 May 2025 14:50:34 +0530 Subject: [PATCH 09/17] Change the consultation date format and response format for send link api --- .../common/controller/videocall/VideoCallController.java | 7 +++---- .../java/com/iemr/common/service/sms/SMSServiceImpl.java | 7 ++++++- .../iemr/common/service/videocall/VideoCallService.java | 2 +- .../common/service/videocall/VideoCallServiceImpl.java | 5 +++-- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/iemr/common/controller/videocall/VideoCallController.java b/src/main/java/com/iemr/common/controller/videocall/VideoCallController.java index 7ffbc276..075e5811 100644 --- a/src/main/java/com/iemr/common/controller/videocall/VideoCallController.java +++ b/src/main/java/com/iemr/common/controller/videocall/VideoCallController.java @@ -59,11 +59,10 @@ public String sendVideoLink(@RequestBody String requestModel, HttpServletRequest ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); VideoCallRequest requestData = objectMapper.readValue(requestModel, VideoCallRequest.class); - OutputResponse serviceResponse = videoCallService.sendMeetingLink(requestData); + String serviceResponse = videoCallService.sendMeetingLink(requestData); - objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true); - return objectMapper.writeValueAsString(serviceResponse); // Automatically serialized to JSON - + return serviceResponse; + } catch (Exception e) { logger.error("send MeetingLink failed with error: " + e.getMessage(), e); response.setError(e); diff --git a/src/main/java/com/iemr/common/service/sms/SMSServiceImpl.java b/src/main/java/com/iemr/common/service/sms/SMSServiceImpl.java index 7b37af93..c127f289 100644 --- a/src/main/java/com/iemr/common/service/sms/SMSServiceImpl.java +++ b/src/main/java/com/iemr/common/service/sms/SMSServiceImpl.java @@ -360,7 +360,12 @@ public String getVideoCallData(String methodName, VideoCallParameters videoCall) variableValue = videoCall.getMeetingLink() != null ? videoCall.getMeetingLink() : ""; break; case "consultationdate": - variableValue = videoCall.getDateOfCall() != null ? videoCall.getDateOfCall().toString() : ""; + if (videoCall.getDateOfCall() != null) { + SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat outputFormat = new SimpleDateFormat("dd-MM-yyyy h:mm a"); + String formattedDate = outputFormat.format(videoCall.getDateOfCall()); + variableValue = formattedDate; + } break; case "phoneno": variableValue = videoCall.getCallerPhoneNumber() !=null ? videoCall.getCallerPhoneNumber().toString() : ""; diff --git a/src/main/java/com/iemr/common/service/videocall/VideoCallService.java b/src/main/java/com/iemr/common/service/videocall/VideoCallService.java index f6a7e134..9322050b 100644 --- a/src/main/java/com/iemr/common/service/videocall/VideoCallService.java +++ b/src/main/java/com/iemr/common/service/videocall/VideoCallService.java @@ -7,7 +7,7 @@ public interface VideoCallService { public String generateMeetingLink() throws Exception; - public OutputResponse sendMeetingLink(VideoCallRequest request) throws Exception; + public String sendMeetingLink(VideoCallRequest request) throws Exception; public String updateCallStatus(UpdateCallRequest request) throws Exception; } diff --git a/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java b/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java index 85e6ebf7..83f2e0f6 100644 --- a/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java +++ b/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java @@ -46,7 +46,7 @@ public String generateMeetingLink() { } @Override - public OutputResponse sendMeetingLink(VideoCallRequest request) throws Exception { + public String sendMeetingLink(VideoCallRequest request) throws Exception { OutputResponse response = new OutputResponse(); if (meetingLink == null || meetingLink.isEmpty()) { @@ -65,7 +65,8 @@ public OutputResponse sendMeetingLink(VideoCallRequest request) throws Exception VideoCallRequest responseData = videoCallMapper.videoCallToRequest(videoCallEntity); response.setResponse(responseData.toJson()); - return response; + return OutputMapper.gsonWithoutExposeRestriction() + .toJson(response); } @Override From f685234502c4b08b02b595be8eb761f18cd5f3ed Mon Sep 17 00:00:00 2001 From: Vanitha Date: Tue, 27 May 2025 14:53:19 +0530 Subject: [PATCH 10/17] Add the video call url properties in environment files --- src/main/environment/common_ci.properties | 1 + src/main/environment/common_dev.properties | 2 ++ src/main/environment/common_test.properties | 3 +++ src/main/environment/common_uat.properties | 3 +++ 4 files changed, 9 insertions(+) diff --git a/src/main/environment/common_ci.properties b/src/main/environment/common_ci.properties index 1f82e9ea..ba0f4d17 100644 --- a/src/main/environment/common_ci.properties +++ b/src/main/environment/common_ci.properties @@ -167,5 +167,6 @@ grievanceAllocationRetryConfiguration=3 start-grievancedatasync-scheduler=false cron-scheduler-grievancedatasync=0 0/2 * * * ? +video-call-url= diff --git a/src/main/environment/common_dev.properties b/src/main/environment/common_dev.properties index 597a8bf6..10167b94 100644 --- a/src/main/environment/common_dev.properties +++ b/src/main/environment/common_dev.properties @@ -189,3 +189,5 @@ springdoc.swagger-ui.enabled=true isProduction=false grievanceAllocationRetryConfiguration=3 +video-call-url= + diff --git a/src/main/environment/common_test.properties b/src/main/environment/common_test.properties index df9007ee..cb9a29b6 100644 --- a/src/main/environment/common_test.properties +++ b/src/main/environment/common_test.properties @@ -189,3 +189,6 @@ springdoc.api-docs.enabled=true springdoc.swagger-ui.enabled=true isProduction=false grievanceAllocationRetryConfiguration=3 + +video-call-url= + diff --git a/src/main/environment/common_uat.properties b/src/main/environment/common_uat.properties index 92c55f4a..9445b4f2 100644 --- a/src/main/environment/common_uat.properties +++ b/src/main/environment/common_uat.properties @@ -160,3 +160,6 @@ springdoc.api-docs.enabled=true springdoc.swagger-ui.enabled=true isProduction=false grievanceAllocationRetryConfiguration=3 + +video-call-url= + From 960f7d4876a6f3ff3cc7b560621217dadc638098 Mon Sep 17 00:00:00 2001 From: Vanitha Date: Wed, 18 Jun 2025 22:01:19 +0530 Subject: [PATCH 11/17] Add recording functionality --- .../videocall/VideoCallServiceImpl.java | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java b/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java index 83f2e0f6..a768e59e 100644 --- a/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java +++ b/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java @@ -7,6 +7,12 @@ import org.springframework.stereotype.Service; import java.time.LocalDateTime; import java.sql.Timestamp; +import java.io.File; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; +import java.io.IOException; import com.iemr.common.data.videocall.VideoCallParameters; import com.iemr.common.mapper.videocall.VideoCallMapper; import com.iemr.common.model.videocall.UpdateCallRequest; @@ -87,6 +93,10 @@ public String updateCallStatus(UpdateCallRequest callRequest) throws Exception { if (updateCount > 0) { videoCall.setLinkUsed(true); videoCallRepository.save(videoCall); + + // if ("Completed".equalsIgnoreCase(requestEntity.getCallStatus())) { + // saveRecordingFile(videoCall.getMeetingLink()); + // } } else { throw new Exception("Failed to update the call status"); } @@ -94,7 +104,29 @@ public String updateCallStatus(UpdateCallRequest callRequest) throws Exception { return OutputMapper.gsonWithoutExposeRestriction() .toJson(videoCallMapper.videoCallToResponse(videoCall)); } +private void saveRecordingFile(String meetingLink) { + try { + // Configurable Jibri recording location + String jibriOutputDir = ConfigProperties.getPropertyByName("jibri.output.path"); // e.g., /srv/jibri/recordings + String saveDir = ConfigProperties.getPropertyByName("video.recording.path"); // e.g., /srv/recordings + + File jibriDir = new File(jibriOutputDir); + File[] matchingFiles = jibriDir.listFiles((dir, name) -> name.contains(meetingLink) && name.endsWith(".mp4")); + + if (matchingFiles != null && matchingFiles.length > 0) { + File recording = matchingFiles[0]; + Path targetPath = Paths.get(saveDir, meetingLink + ".mp4"); + + Files.copy(recording.toPath(), targetPath, StandardCopyOption.REPLACE_EXISTING); + logger.info("Recording file saved: " + targetPath); + } else { + logger.warn("No matching recording file found for meeting: " + meetingLink); + } + } catch (IOException e) { + logger.error("Error saving recording file: ", e); + } +} +} -} From 18e1d2a2aa5b56c1f77db4d7a7dc3f794c4eec31 Mon Sep 17 00:00:00 2001 From: Vanitha Date: Thu, 19 Jun 2025 14:43:27 +0530 Subject: [PATCH 12/17] Remove dev and test properties as it not in develop --- src/main/environment/common_dev.properties | 193 ------------------- src/main/environment/common_test.properties | 194 -------------------- 2 files changed, 387 deletions(-) delete mode 100644 src/main/environment/common_dev.properties delete mode 100644 src/main/environment/common_test.properties diff --git a/src/main/environment/common_dev.properties b/src/main/environment/common_dev.properties deleted file mode 100644 index 10167b94..00000000 --- a/src/main/environment/common_dev.properties +++ /dev/null @@ -1,193 +0,0 @@ -# dev env -# DB Connections -spring.jpa.database=default - -## Primary db -spring.datasource.url= -spring.datasource.username= -spring.datasource.password= -spring.datasource.driver-class-name=com.mysql.jdbc.Driver - -## Secondary db -secondary.datasource.username= -secondary.datasource.password= -secondary.datasource.url= - -encDbUserName=zFlYsp9Z0s+lRvLM15A3g/Ba0w8VGs/1usuW7EsGF3k= -encDbPass=JGGAGn5wTlrbTLUHY+5BzfBa0w8VGs/1usuW7EsGF3k= -spring.datasource.url=jdbc:mysql://10.208.122.32:3306/db_iemr?autoReconnect=true&useSSL=false -spring.datasource.driver-class-name=com.mysql.jdbc.Driver - -## Secondary db -encDbUserNameSec=zFlYsp9Z0s+lRvLM15A3g/Ba0w8VGs/1usuW7EsGF3k= -encDbPassSec=JGGAGn5wTlrbTLUHY+5BzfBa0w8VGs/1usuW7EsGF3k= -secondary.datasource.url=jdbc:mysql://10.208.122.32:3306/db_reporting?autoReconnect=true&useSSL=false -secondary.datasource.driver-class-name=com.mysql.jdbc.Driver - -# KM config -km-base-url=http://10.208.122.32:8084/OpenKM -km-base-path=10.208.122.32:8084/OpenKM - -# CTI Config -cti-server-ip=10.208.122.99 -cti-logger_base_url=http://10.208.122.99/logger - -# Identity Config - -identity-api-url= -identity-1097-api-url=/1097identityapi-v1.0 - -#### SMS Configuration -send-sms=true -sendSMSUrl = http://localhost:8080/sms/sendSMS -source-address=AIDSHL -sms-username= -sms-password= -send-message-url= - -###SMS Scheduler configurations -start-sms-scheduler=false -cron-scheduler-sms=0 0/1 * * * ? * - -#### Email Configuration -send-email=false -spring.mail.host=smtp.gmail.com -spring.mail.port=587 -spring.mail.username= -spring.mail.password= -spring.mail.properties.mail.smtp.auth=true -spring.mail.properties.mail.smtp.starttls.enable=true - -###Email Scheduler configurations -start-email-scheduler=false -cron-scheduler-email=0 0/1 * * * ? * - -#Runs at every alternative days at 2AM -###cti data sync Scheduler configurations -start-ctidatasync-scheduler=false -#cron-scheduler-ctidatasync=0 00 01 * * ? * -cron-scheduler-ctidatasync=0 0 2 */2 * ? - -###cti data check with call detail report Scheduler -#Runs at everyday 12:10AM -start-ctidatacheck-scheduler=true -cron-scheduler-ctidatacheck=0 10 00 * * * -cron-scheduler-ctidatasync=0 0 2 */2 * ? - -#### Registration schedular for Avni -start-avni-scheduler=false -cron-avni-registration=0 0/1 * * * ? * - -### generate Beneficiary Config -genben-api=/bengenapi-v1.0 - -### Redis IP -spring.redis.host=localhost -###CTI data sync schedular -cz-duration=40 -TMprescriptionTemplate=TMPrescription - -##duration for everwell calender -everwellCalendarDuration=15 - -##lonic variables -lonicPageSize=10 - -#snomedcti -snomedCTPageSize=10 - -#### Everwell Regsitration Scheduler -start-registration-scheduler=false -cron-scheduler-registration=0 34 19 * * ? * - -#everwell data sync -start-everwelldatasync-scheduler=false -cron-scheduler-everwelldatasync=0 0/5 * * * ? * - -#call retry count -callRetryConfiguration=3 - -#avni registration Duration -avniRegistrationLimit=7 - -#--------------------------NHM Agent Real Time Data---------------------------- -nhm.agent.real.time.data.url= http://175.101.1.83/apps/utility/alive_api.php -nhm.agent.real.time.data.cron.scheduler=0 */2 * ? * * -nhm.agent.real.time.data.cron.flag=true - -##----------------------------------------------------#grievance data sync----------------------------------------------------------- - -start-grievancedatasync-scheduler=false -cron-scheduler-grievancedatasync=0 0/2 * * * ? - -carestream_socket_ip = 192.168.43.39 -carestream_socket_port = 1235 - -## everwell variables -everwellUserName = -everwellPassword = -amritUserName = -amritPassword = - -## everwell API call -everwellAddSupportAction = https://beta-hub.everwell.org/Api/Patients/AddSupportAction -everwellEditDoses = https://beta-hub.everwell.org/Api/Patients/EditManualDoses -everwellEditMissedDoses = https://beta-hub.everwell.org/Api/Patients/EditMissedDoses -everwellGetPatientAdherenceUrl = https://beta-hub.everwell.org/Api/Patients/CurrentMonthMissedAdherence?Page= -everwellEditSecondaryPhoneNo = https://beta-hub.everwell.org/Api/Patients/EditPhoneNumber -everwell1097userAuthenticate = http://10.208.122.38:8080/commonapi-v1.0/user/userAuthenticate -everwelluserAuthenticate = https://beta-hub.everwell.org/token -everwellRegisterBenficiary = http://10.208.122.38:8080/commonapi-v1.0/beneficiary/create - - -## LungAssessment credentials -lungAssessmentEmail = -lungAssessmentPassword = - - -## SWASSA APIs -lungAssessmentAdminLogin = http://swaasa.sandbox.swaasa.ai/api/adminLogin -lungAssessmentValidateCough = http://swaasa.sandbox.swaasa.ai/api/verifycough -lungAssessmentStartAssesment = http://swaasa.sandbox.swaasa.ai/api/assessment -lungAssessmentGetAssesment = http://swaasa.sandbox.swaasa.ai/api/getAssessment - -#E- Sanjeevani user authenticate creds -eSanjeevani.url: https://preprod.esanjeevaniopd.xyz/uat/aus/api/ThirdPartyAuth/providerLogin -eSanjeevani.userName: -eSanjeevani.password: -eSanjeevani.salt: 123456 -eSanjeevani.source: 11001 -eSanjeevani.registerPatient: https://preprod.esanjeevaniopd.xyz/uat/ps/api/v1/Patient -eSanjeevani.routeUrl: https://uat.esanjeevani.in/user/signin - -biometric.discover.url = http://127.0.0.1:port/ -biometric.deviceInfo.url = http://127.0.0.1:port/rd/info -biometric.capture.url = http://127.0.0.1:port/rd/capture -eAusadhaUrl=https://dlc.kar.nic.in/e-services/api/DWInstituteInward - -eausadhaAuthorization= -spring.main.allow-bean-definition-overriding=true -spring.main.allow-circular-references=true - -fileBasePath =/Doc -jwt.secret= - -##grievance API call -updateGrievanceDetails = /grsbepro/igemr1097/public/api/v1/state-wise/grievance-list?page=PageNumber¤tpage=1 -updateGrievanceTransactionDetails=/grsbepro/igemr1097/public/api/v1/grievance_details/ - -## grievance variables -grievanceUserName = -grievancePassword = - -grievanceUserAuthenticate = -grievanceDataSyncDuration = - -springdoc.api-docs.enabled=true -springdoc.swagger-ui.enabled=true - -isProduction=false -grievanceAllocationRetryConfiguration=3 - -video-call-url= - diff --git a/src/main/environment/common_test.properties b/src/main/environment/common_test.properties deleted file mode 100644 index cb9a29b6..00000000 --- a/src/main/environment/common_test.properties +++ /dev/null @@ -1,194 +0,0 @@ -# Test env -# DB Connections -spring.jpa.database=default - -##--------------------------------------------## Primary db------------------------------------------------------------------- - - -spring.datasource.url= -spring.datasource.username= -spring.datasource.password= -spring.datasource.driver-class-name=com.mysql.jdbc.Driver - -secondary.datasource.username= -secondary.datasource.password= -secondary.datasource.url= -secondary.datasource.driver-class-name=com.mysql.jdbc.Driver - -encDbUserName=zFlYsp9Z0s+lRvLM15A3g/Ba0w8VGs/1usuW7EsGF3k= -encDbPass=JGGAGn5wTlrbTLUHY+5BzfBa0w8VGs/1usuW7EsGF3k= - -##-------------------------------------------------------------# KM config-------------------------------------------------- - -km-base-url=http://10.208.122.38:8084/OpenKM -km-base-path=10.208.122.38:8084/OpenKM -##----------------------------------------------# CTI Config----------------------------------------------------------------- - -cti-server-ip=10.208.122.99 -cti-logger_base_url=http://10.208.122.99/logger -##-------------------------------------------------#### Identity Config-------------------------------------------------------------- - -identity-api-url=/identity-0.0.1 -identity-1097-api-url=/1097identityapi-v1.0 - -### generate Beneficiary Config -genben-api=/bengenapi-v1.0 - -##---------------------------------------------#### SMS Configuration------------------------------------------------------------------ -send-sms=false -sendSMSUrl = http://localhost:8080/sms/sendSMS -source-address=AIDSHL -sms-username= -sms-password= -send-message-url= - -###SMS Scheduler configurations -start-sms-scheduler=false -cron-scheduler-sms=0 0/1 * * * ? * -##----------------------------------------------#### Email Configuration----------------------------------------------------------------- -send-email=false -spring.mail.host=smtp.gmail.com -spring.mail.port=587 -spring.mail.username= -spring.mail.password= -spring.mail.properties.mail.smtp.auth=true -spring.mail.properties.mail.smtp.starttls.enable=true - -###Email Scheduler configurations -start-email-scheduler=false -cron-scheduler-email=0 0/1 * * * ? * -##-------------------------------###cti data sync Scheduler configurations------------------------------------------------------ - -start-ctidatasync-scheduler=false -cron-scheduler-ctidatasync=0 0 2 */2 * ? - -##-------------------------------###cti data check with call detail report Scheduler------------------------------------------------------ - -#Runs at everyday 12:10AM -start-ctidatacheck-scheduler=true -cron-scheduler-ctidatacheck=0 10 00 * * * - -##---------------------------------#### Registration schedular for Avni------------------------------------------------------------------------------ - -start-avni-scheduler=false -cron-avni-registration=0 0/1 * * * ? * -##------------------------------------------------#### Everwell Regsitration Scheduler--------------------------------------------------------------- - -start-registration-scheduler=false -cron-scheduler-registration=0 34 19 * * ? * -##----------------------------------------------------#everwell data sync----------------------------------------------------------- - -start-everwelldatasync-scheduler=false -cron-scheduler-everwelldatasync=0 0/5 * * * ? * - -##----------------------------------------------------#grievance data sync----------------------------------------------------------- - -start-grievancedatasync-scheduler=false -cron-scheduler-grievancedatasync=0 0/2 * * * ? -##-----------------------------------------------#NHM data dashboard schedular---------------------------------------------------------------- -# run at everyday 12:01AM -start-nhmdashboard-scheduler=true -cron-scheduler-nhmdashboard=0 1 * * * ? * - -##-------------------------------------------------### Redis IP-------------------------------------------------------------- - -spring.redis.host=localhost - -##--------------------------------------------------------------------------------------------------------------- -###CTI data sync schedular -cz-duration=40 -##--------------------------------------------------------------------------------------------------------------- -## prescription template -TMprescriptionTemplate=TMPrescription -##--------------------------------------------------------------------------------------------------------------- -##duration for everwell calender -everwellCalendarDuration=15 - ##--------------------------------------------------------------------------------------------------------------- -##lonic variables -lonicPageSize=10 - ##--------------------------------------------------------------------------------------------------------------- -#snomedcti -snomedCTPageSize=10 -##--------------------------------------------------------------------------------------------------------------- -#call retry count -callRetryConfiguration=3 -##--------------------------------------------------------------------------------------------------------------- -#avni registration Duration -avniRegistrationLimit=7 - -#--------------------------NHM Agent Real Time Data---------------------------- -nhm.agent.real.time.data.url= http://175.101.1.83/apps/utility/alive_api.php -nhm.agent.real.time.data.cron.scheduler=0 */2 * ? * * -nhm.agent.real.time.data.cron.flag=true - -carestream_socket_ip = 192.168.43.39 -carestream_socket_port = 1235 - -## everwell variables -everwellUserName = -everwellPassword = -amritUserName = -amritPassword = - -## everwell API call -everwellAddSupportAction = https://beta-hub.everwell.org/Api/Patients/AddSupportAction -everwellEditDoses = https://beta-hub.everwell.org/Api/Patients/EditManualDoses -everwellEditMissedDoses = https://beta-hub.everwell.org/Api/Patients/EditMissedDoses -everwellGetPatientAdherenceUrl = https://beta-hub.everwell.org/Api/Patients/CurrentMonthMissedAdherence?Page= -everwellEditSecondaryPhoneNo = https://beta-hub.everwell.org/Api/Patients/EditPhoneNumber -everwell1097userAuthenticate = http://10.208.122.38:8080/commonapi-v1.0/user/userAuthenticate -everwelluserAuthenticate = https://beta-hub.everwell.org/token -everwellRegisterBenficiary = http://10.208.122.38:8080/commonapi-v1.0/beneficiary/create - - -## LungAssessment credentials -lungAssessmentEmail = -lungAssessmentPassword = - - -## SWASSA APIs -lungAssessmentAdminLogin = http://swaasa.sandbox.swaasa.ai/api/adminLogin -lungAssessmentValidateCough = http://swaasa.sandbox.swaasa.ai/api/verifycough -lungAssessmentStartAssesment = http://swaasa.sandbox.swaasa.ai/api/assessment -lungAssessmentGetAssesment = http://swaasa.sandbox.swaasa.ai/api/getAssessment - -#E- Sanjeevani user authenticate creds -eSanjeevani.url: https://preprod.esanjeevaniopd.xyz/uat/aus/api/ThirdPartyAuth/providerLogin -eSanjeevani.userName: -eSanjeevani.password: -eSanjeevani.salt: 123456 -eSanjeevani.source: 11001 -eSanjeevani.registerPatient: https://preprod.esanjeevaniopd.xyz/uat/ps/api/v1/Patient -eSanjeevani.routeUrl: https://uat.esanjeevani.in/user/signin - -biometric.discover.url = http://127.0.0.1:port/ -biometric.deviceInfo.url = http://127.0.0.1:port/rd/info -biometric.capture.url = http://127.0.0.1:port/rd/capture -eAusadhaUrl=https://dlc.kar.nic.in/e-services/api/DWInstituteInward - -eausadhaAuthorization= -spring.main.allow-bean-definition-overriding=true -spring.main.allow-circular-references=true - -fileBasePath =/Doc -jwt.secret= - - -##grievance API call -updateGrievanceDetails = /grsbepro/igemr1097/public/api/v1/state-wise/grievance-list?page=PageNumber¤tpage=1 -updateGrievanceTransactionDetails=/grsbepro/igemr1097/public/api/v1/grievance_details/ - -## grievance variables -grievanceUserName = -grievancePassword = - -grievanceUserAuthenticate = -grievanceDataSyncDuration = - -springdoc.api-docs.enabled=true -springdoc.swagger-ui.enabled=true -isProduction=false -grievanceAllocationRetryConfiguration=3 - -video-call-url= - From 9f596e581a0daed7c6c9b879c23d00b5848ea23f Mon Sep 17 00:00:00 2001 From: Vanitha Date: Thu, 19 Jun 2025 14:48:13 +0530 Subject: [PATCH 13/17] feat:fix the alignment --- src/main/environment/common_uat.properties | 165 ------------------ .../com/iemr/common/data/sms/SMSTemplate.java | 8 +- .../com/iemr/common/model/sms/SMSRequest.java | 4 +- src/main/resources/application.properties | 3 +- 4 files changed, 4 insertions(+), 176 deletions(-) delete mode 100644 src/main/environment/common_uat.properties diff --git a/src/main/environment/common_uat.properties b/src/main/environment/common_uat.properties deleted file mode 100644 index 9445b4f2..00000000 --- a/src/main/environment/common_uat.properties +++ /dev/null @@ -1,165 +0,0 @@ - -# UAT env -# DB Connections -spring.datasource.url= -spring.datasource.username= -spring.datasource.password= - -encDbUserName=zFlYsp9Z0s+lRvLM15A3g/Ba0w8VGs/1usuW7EsGF3k= -encDbPass=JGGAGn5wTlrbTLUHY+5BzfBa0w8VGs/1usuW7EsGF3k= -spring.datasource.driver-class-name=com.mysql.jdbc.Driver - -secondary.datasource.username= -secondary.datasource.password= -secondary.datasource.url= -secondary.datasource.driver-class-name=com.mysql.jdbc.Driver - -# KM config -km-base-url=http://172.16.19.40:8084/OpenKM -km-base-path=deviemr.piramalswasthya.org:8084/OpenKM - -# CTI Config -cti-server-ip=172.16.19.47 -cti-logger_base_url=http://helplines.piramalswasthya.org/logger - -# Identity Config -identity-api-url = /identity-0.0.1 -identity-1097-api-url = /1097identityapi-v1.0 - -#### SMS Configuration -send-sms=true -sendSMSUrl = http://localhost:8080/sms/sendSMS -source-address=AIDSHL -sms-username= -sms-password= -send-message-url= - -###SMS Scheduler configurations -start-sms-scheduler=true -cron-scheduler-sms=0 0/1 * * * ? * - -#### Email Configuration -send-email=false -spring.mail.host=smtp.gmail.com -spring.mail.port=587 -spring.mail.username= -spring.mail.password= -spring.mail.properties.mail.smtp.auth=true -spring.mail.properties.mail.smtp.starttls.enable=true - -###Email Scheduler configurations -start-email-scheduler=true -cron-scheduler-email=0 0/1 * * * ? * - -###cti data check with call detail report Scheduler -#Runs at everyday 12:10AM -start-ctidatacheck-scheduler=true -cron-scheduler-ctidatacheck=0 10 00 * * * - -##----------------------------------------------------#grievance data sync----------------------------------------------------------- - -start-grievancedatasync-scheduler=false -cron-scheduler-grievancedatasync=0 0/2 * * * ? - -### generate Beneficiary IDs URL -genben-api=/bengenapi-v1.0 - -### Redis IP -spring.redis.host=localhost - -##--------------------------------------------------------------------------------------------------------------- -###CTI data sync schedular -cz-duration=40 -##--------------------------------------------------------------------------------------------------------------- -## prescription template -TMprescriptionTemplate=TMPrescription -##--------------------------------------------------------------------------------------------------------------- -##duration for everwell calender -everwellCalendarDuration=15 - ##--------------------------------------------------------------------------------------------------------------- -##lonic variables -lonicPageSize=10 - ##--------------------------------------------------------------------------------------------------------------- -#snomedcti -snomedCTPageSize=10 -##--------------------------------------------------------------------------------------------------------------- -#call retry count -callRetryConfiguration=3 -##--------------------------------------------------------------------------------------------------------------- -#avni registration Duration -avniRegistrationLimit=7 - -#--------------------------NHM Agent Real Time Data---------------------------- -nhm.agent.real.time.data.url= http://175.101.1.83/apps/utility/alive_api.php -nhm.agent.real.time.data.cron.scheduler=0 */2 * ? * * -nhm.agent.real.time.data.cron.flag=true -carestream_socket_ip = 192.168.43.39 -carestream_socket_port = 1235 - -## everwell variables -everwellUserName = -everwellPassword = -amritUserName = -amritPassword = - -## everwell API call -everwellAddSupportAction = https://beta-hub.everwell.org/Api/Patients/AddSupportAction -everwellEditDoses = https://beta-hub.everwell.org/Api/Patients/EditManualDoses -everwellEditMissedDoses = https://beta-hub.everwell.org/Api/Patients/EditMissedDoses -everwellGetPatientAdherenceUrl = https://beta-hub.everwell.org/Api/Patients/CurrentMonthMissedAdherence?Page= -everwellEditSecondaryPhoneNo = https://beta-hub.everwell.org/Api/Patients/EditPhoneNumber -everwell1097userAuthenticate = http://10.208.122.38:8080/commonapi-v1.0/user/userAuthenticate -everwelluserAuthenticate = https://beta-hub.everwell.org/token -everwellRegisterBenficiary = http://10.208.122.38:8080/commonapi-v1.0/beneficiary/create - - -## LungAssessment credentials -lungAssessmentEmail = -lungAssessmentPassword = - - -## SWASSA APIs -lungAssessmentAdminLogin = http://swaasa.sandbox.swaasa.ai/api/adminLogin -lungAssessmentValidateCough = http://swaasa.sandbox.swaasa.ai/api/verifycough -lungAssessmentStartAssesment = http://swaasa.sandbox.swaasa.ai/api/assessment -lungAssessmentGetAssesment = http://swaasa.sandbox.swaasa.ai/api/getAssessment - -#E- Sanjeevani user authenticate creds -eSanjeevani.url: https://preprod.esanjeevaniopd.xyz/uat/aus/api/ThirdPartyAuth/providerLogin -eSanjeevani.userName: -eSanjeevani.password: -eSanjeevani.salt: 123456 -eSanjeevani.source: 11001 -eSanjeevani.registerPatient: https://preprod.esanjeevaniopd.xyz/uat/ps/api/v1/Patient -eSanjeevani.routeUrl: https://uat.esanjeevani.in/user/signin - -biometric.discover.url = http://127.0.0.1:port/ -biometric.deviceInfo.url = http://127.0.0.1:port/rd/info -biometric.capture.url = http://127.0.0.1:port/rd/capture -eAusadhaUrl=https://dlc.kar.nic.in/e-services/api/DWInstituteInward - -eausadhaAuthorization= -spring.main.allow-bean-definition-overriding=true -spring.main.allow-circular-references=true - -fileBasePath =/Doc -jwt.secret= - -##grievance API call -updateGrievanceDetails = /grsbepro/igemr1097/public/api/v1/state-wise/grievance-list?page=PageNumber¤tpage=1 -updateGrievanceTransactionDetails=/grsbepro/igemr1097/public/api/v1/grievance_details/ - -## grievance variables -grievanceUserName = -grievancePassword = - -grievanceUserAuthenticate = -grievanceDataSyncDuration = - -springdoc.api-docs.enabled=true -springdoc.swagger-ui.enabled=true -isProduction=false -grievanceAllocationRetryConfiguration=3 - -video-call-url= - diff --git a/src/main/java/com/iemr/common/data/sms/SMSTemplate.java b/src/main/java/com/iemr/common/data/sms/SMSTemplate.java index e6f21018..d0467b30 100644 --- a/src/main/java/com/iemr/common/data/sms/SMSTemplate.java +++ b/src/main/java/com/iemr/common/data/sms/SMSTemplate.java @@ -78,13 +78,7 @@ public class SMSTemplate @Column(name = "LastModDate", insertable = false, updatable = false) Timestamp lastModDate; - // @Override - // public String toString() - // { - // return OutputMapper.gsonWithoutExposeRestriction().toJson(this); - // } - -@Override + @Override public String toString() { return new GsonBuilder().excludeFieldsWithoutExposeAnnotation().setLongSerializationPolicy(LongSerializationPolicy.STRING).serializeNulls() diff --git a/src/main/java/com/iemr/common/model/sms/SMSRequest.java b/src/main/java/com/iemr/common/model/sms/SMSRequest.java index 35bb699f..41fdc6c9 100644 --- a/src/main/java/com/iemr/common/model/sms/SMSRequest.java +++ b/src/main/java/com/iemr/common/model/sms/SMSRequest.java @@ -78,6 +78,6 @@ public class SMSRequest { private Long beneficiaryId; private String appointmentDate; private String appointmentTime; - @JsonProperty("sms_Advice") -private String smsAdvice; + @JsonProperty("sms_Advice") + private String smsAdvice; } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 80a0feff..813637b0 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -11,7 +11,7 @@ spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.Im spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect -spring.jpa.hibernate.ddl-auto=update +spring.jpa.hibernate.ddl-auto=none spring.jackson.serialization.fail-on-empty-beans=false spring.jpa.hibernate.show_sql=true spring.jpa.hibernate.format_sql=true @@ -173,4 +173,3 @@ failedLoginAttempt=5 jwt.access.expiration=86400000 jwt.refresh.expiration=604800000 -spring.main.allow-bean-definition-overriding=true From 5c92dbd6ddf2ce5f6a3175de2c8a82db4b122bf0 Mon Sep 17 00:00:00 2001 From: Vanitha Date: Thu, 19 Jun 2025 15:58:33 +0530 Subject: [PATCH 14/17] feat:remove cross origins and add variable name for ci file --- src/main/environment/common_ci.properties | 5 +---- .../common/controller/videocall/VideoCallController.java | 5 ----- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/src/main/environment/common_ci.properties b/src/main/environment/common_ci.properties index 91cd0c47..bcd395d1 100644 --- a/src/main/environment/common_ci.properties +++ b/src/main/environment/common_ci.properties @@ -179,7 +179,4 @@ captcha.enable-captcha=@env.ENABLE_CAPTCHA@ cors.allowed-origins=@env.CORS_ALLOWED_ORIGINS@ -video-call-url= - - - +video-call-url=@env.VIDEO_CALL_URL@ diff --git a/src/main/java/com/iemr/common/controller/videocall/VideoCallController.java b/src/main/java/com/iemr/common/controller/videocall/VideoCallController.java index 075e5811..2b0c48d4 100644 --- a/src/main/java/com/iemr/common/controller/videocall/VideoCallController.java +++ b/src/main/java/com/iemr/common/controller/videocall/VideoCallController.java @@ -10,7 +10,6 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -28,7 +27,6 @@ import org.springframework.web.bind.annotation.RequestBody; @RestController -@CrossOrigin() @RequestMapping(value = "/video-consultation") public class VideoCallController { final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); @@ -50,7 +48,6 @@ public ResponseEntity> generateJitsiLink() { } } -@CrossOrigin() @PostMapping(value = "/send-link", produces = MediaType.APPLICATION_JSON_VALUE, headers = "Authorization") public String sendVideoLink(@RequestBody String requestModel, HttpServletRequest request) { OutputResponse response = new OutputResponse(); @@ -70,8 +67,6 @@ public String sendVideoLink(@RequestBody String requestModel, HttpServletRequest } } - -@CrossOrigin() @PostMapping(value = "/update-call-status", produces = MediaType.APPLICATION_JSON_VALUE, headers = "Authorization") public ResponseEntity updateCallStatus(@RequestBody UpdateCallRequest requestModel, HttpServletRequest request) { OutputResponse response = new OutputResponse(); From 5e8e7616668ef1f48b9e18bb56fb234b50fff6c8 Mon Sep 17 00:00:00 2001 From: Vanitha Date: Thu, 19 Jun 2025 16:16:34 +0530 Subject: [PATCH 15/17] Add the properties in docker file --- src/main/environment/common_docker.properties | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/environment/common_docker.properties b/src/main/environment/common_docker.properties index 56e2a2fe..d8dd2ede 100644 --- a/src/main/environment/common_docker.properties +++ b/src/main/environment/common_docker.properties @@ -178,4 +178,6 @@ captcha.secret-key=${CAPTCHA_SECRET_KEY} captcha.verify-url=${CAPTCHA_VERIFY_URL} captcha.enable-captcha=${ENABLE_CAPTCHA} -cors.allowed-origins=${CORS_ALLOWED_ORIGINS} \ No newline at end of file +cors.allowed-origins=${CORS_ALLOWED_ORIGINS} + +video-call-url=${VIDEO_CALL_URL} \ No newline at end of file From bae01d9cd1c0a5c83c8798207dfeae820eb84093 Mon Sep 17 00:00:00 2001 From: Vanitha Date: Thu, 19 Jun 2025 16:28:36 +0530 Subject: [PATCH 16/17] Add recording properties in properties file --- src/main/environment/common_ci.properties | 2 ++ src/main/environment/common_docker.properties | 4 +++- src/main/environment/common_example.properties | 5 +++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/environment/common_ci.properties b/src/main/environment/common_ci.properties index bcd395d1..1bcf2b13 100644 --- a/src/main/environment/common_ci.properties +++ b/src/main/environment/common_ci.properties @@ -180,3 +180,5 @@ captcha.enable-captcha=@env.ENABLE_CAPTCHA@ cors.allowed-origins=@env.CORS_ALLOWED_ORIGINS@ video-call-url=@env.VIDEO_CALL_URL@ +jibri.output.path=@env.JIBRI_OUTPUT_PATH@ +video.recording.path=@env.VIDEO_RECORDING_PATH@ \ No newline at end of file diff --git a/src/main/environment/common_docker.properties b/src/main/environment/common_docker.properties index d8dd2ede..6799c959 100644 --- a/src/main/environment/common_docker.properties +++ b/src/main/environment/common_docker.properties @@ -180,4 +180,6 @@ captcha.enable-captcha=${ENABLE_CAPTCHA} cors.allowed-origins=${CORS_ALLOWED_ORIGINS} -video-call-url=${VIDEO_CALL_URL} \ No newline at end of file +video-call-url=${VIDEO_CALL_URL} +jibri.output.path={JIBRI_OUTPUT_PATH} +video.recording.path={VIDEO_RECORDING_PATH} \ No newline at end of file diff --git a/src/main/environment/common_example.properties b/src/main/environment/common_example.properties index 3b675fd5..7bc96104 100644 --- a/src/main/environment/common_example.properties +++ b/src/main/environment/common_example.properties @@ -198,8 +198,9 @@ grievanceAllocationRetryConfiguration=3 logging.path=logs/ logging.file.name=logs/common-api.log -video-call-url= - +video-call-url=https://vc.piramalswasthya.org/ +jibri.output.path=/srv/jibri/recordings +video.recording.path=/srv/recordings captcha.secret-key= captcha.verify-url= https://challenges.cloudflare.com/turnstile/v0/siteverify From e8e4ab89db626861466171f35f937bb989f1570a Mon Sep 17 00:00:00 2001 From: Vanitha Date: Thu, 19 Jun 2025 18:49:22 +0530 Subject: [PATCH 17/17] fix:coderabbit comments --- .../data/videocall/VideoCallParameters.java | 30 +++++++++---------- .../model/videocall/UpdateCallRequest.java | 9 +++--- .../model/videocall/UpdateCallResponse.java | 12 ++++---- .../common/service/sms/SMSServiceImpl.java | 20 +++++++------ .../videocall/VideoCallServiceImpl.java | 2 -- 5 files changed, 37 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/iemr/common/data/videocall/VideoCallParameters.java b/src/main/java/com/iemr/common/data/videocall/VideoCallParameters.java index 7ef41a71..c9df2d87 100644 --- a/src/main/java/com/iemr/common/data/videocall/VideoCallParameters.java +++ b/src/main/java/com/iemr/common/data/videocall/VideoCallParameters.java @@ -19,37 +19,37 @@ public class VideoCallParameters { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "MeetingID") - Integer meetingID; + private Integer meetingID; @Column(name = "DateOfCall") - Timestamp dateOfCall; + private Timestamp dateOfCall; @Column(name = "CallerPhoneNumber") - String callerPhoneNumber; + private String callerPhoneNumber; @Column(name = "AgentID") - String agentID; + private String agentID; @Column(name = "AgentName") - String agentName; + private String agentName; @Column(name = "MeetingLink") - String meetingLink; + private String meetingLink; @Column(name = "CallStatus") - String callStatus; + private String callStatus; @Column(name = "CallDuration") - String callDuration; + private String callDuration; @Column(name = "ProviderServiceMapID") - Integer providerServiceMapID; + private Integer providerServiceMapID; @Column(name = "BeneficiaryRegID") private Long beneficiaryRegID; @Column(name = "ClosureRemark") - String closureRemark; + private String closureRemark; @Column(name = "LinkGeneratedAt") private Timestamp linkGeneratedAt; @@ -58,19 +58,19 @@ public class VideoCallParameters { private boolean linkUsed; @Column(name = "Deleted", insertable = false, updatable = true) - Boolean deleted; + private Boolean deleted; @Column(name = "CreatedBy", insertable = true, updatable = false) - String createdBy; + private String createdBy; @Column(name = "CreatedDate", insertable = false, updatable = false) - Timestamp createdDate; + private Timestamp createdDate; @Column(name = "ModifiedBy", insertable = false, updatable = true) - String modifiedBy; + private String modifiedBy; @Column(name = "LastModDate", insertable = false, updatable = false) - Timestamp lastModDate; + private Timestamp lastModDate; @Override public String toString() diff --git a/src/main/java/com/iemr/common/model/videocall/UpdateCallRequest.java b/src/main/java/com/iemr/common/model/videocall/UpdateCallRequest.java index d6b231b2..343198b3 100644 --- a/src/main/java/com/iemr/common/model/videocall/UpdateCallRequest.java +++ b/src/main/java/com/iemr/common/model/videocall/UpdateCallRequest.java @@ -4,8 +4,9 @@ @Data public class UpdateCallRequest { - String meetingLink; - String callStatus; - String callDuration; - String modifiedBy; + + private String meetingLink; + private String callStatus; + private String callDuration; + private String modifiedBy; } diff --git a/src/main/java/com/iemr/common/model/videocall/UpdateCallResponse.java b/src/main/java/com/iemr/common/model/videocall/UpdateCallResponse.java index ce45fe66..f01f46f5 100644 --- a/src/main/java/com/iemr/common/model/videocall/UpdateCallResponse.java +++ b/src/main/java/com/iemr/common/model/videocall/UpdateCallResponse.java @@ -8,13 +8,13 @@ @Data public class UpdateCallResponse { - String meetingLink; - String callStatus; - String callDuration; - String modifiedBy; - boolean isLinkUsed; + private String meetingLink; + private String callStatus; + private String callDuration; + private String modifiedBy; + private boolean isLinkUsed; @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") - Timestamp lastModified; + private Timestamp lastModified; public UpdateCallResponse() { } diff --git a/src/main/java/com/iemr/common/service/sms/SMSServiceImpl.java b/src/main/java/com/iemr/common/service/sms/SMSServiceImpl.java index df18e17a..ad9345a1 100644 --- a/src/main/java/com/iemr/common/service/sms/SMSServiceImpl.java +++ b/src/main/java/com/iemr/common/service/sms/SMSServiceImpl.java @@ -1087,16 +1087,17 @@ private String getPrescriptionData(String className, String methodName, SMSReque private String getBloodOnCallData(String className, String methodName, SMSRequest request, BeneficiaryModel beneficiary) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, ClassNotFoundException { - T_BloodRequest bloodRequest = prescribedDrugRepository.getBloodRequest(request.getBloodReqID()); - T_RequestedBloodBank requestedBloodBank = prescribedDrugRepository + T_BloodRequest bloodRequest = prescribedDrugRepository.getBloodRequest(request.getBloodReqID()); + T_RequestedBloodBank requestedBloodBank = prescribedDrugRepository .getBloodBankAddress(request.getRequestedBloodBankID()); - String variableValue = ""; + String variableValue = ""; + switch (methodName.toLowerCase()) { case "dateofrequest": - Date requestDate = bloodRequest.getCreatedDate(); - String reportDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(requestDate); - variableValue = reportDate + " "; - break; + Date requestDate = bloodRequest.getCreatedDate(); + String reportDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(requestDate); + variableValue = reportDate + " "; + break; case "callercontactno": if (request.getIsBloodBankSMS() == true) { variableValue = (beneficiary.getBenPhoneMaps().size() > 0 @@ -1153,9 +1154,10 @@ private String getBloodOnCallData(String className, String methodName, SMSReques private String getDirectoryserviceData(String className, String methodName, SMSRequest request) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { - Directoryservice directoryservice = prescribedDrugRepository + Directoryservice directoryservice = prescribedDrugRepository .getDirectoryservice(request.getDirectoryServiceID()); - String variableValue = ""; + String variableValue = ""; + if(null != directoryservice && null != directoryservice.getInstitute()) { switch (methodName.toLowerCase()) { case "institutename": diff --git a/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java b/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java index a768e59e..d1cf7000 100644 --- a/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java +++ b/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java @@ -21,8 +21,6 @@ import com.iemr.common.utils.config.ConfigProperties; import com.iemr.common.utils.mapper.OutputMapper; import com.iemr.common.utils.response.OutputResponse; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.gson.Gson; @Service public class VideoCallServiceImpl implements VideoCallService {