diff --git a/.java-version b/.java-version
index 62593409..03b6389f 100644
--- a/.java-version
+++ b/.java-version
@@ -1 +1 @@
-1.8
+17.0
diff --git a/pom.xml b/pom.xml
index f29e4dca..454fd02a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,7 +25,7 @@
17
jdt_apt
1.2.0.Final
- 1.16.18
+ 1.18.36
commonapi-v1.0
${ENV_VAR}
target/classes/application.properties
@@ -107,6 +107,12 @@
+
+
+ com.google.firebase
+ firebase-admin
+ 9.4.3
+
org.springframework.boot
spring-boot-starter-data-jpa
@@ -511,12 +517,24 @@
org.apache.maven.plugins
maven-compiler-plugin
+ 3.14.0
17
17
+
+
+ org.projectlombok
+ lombok
+ ${org.projectlombok.version}
+
+
+ org.mapstruct
+ mapstruct-processor
+ ${org.mapstruct.version}
+
+
-
org.apache.maven.plugins
maven-resources-plugin
diff --git a/src/main/environment/common_ci.properties b/src/main/environment/common_ci.properties
index 84c70090..a9a8426f 100644
--- a/src/main/environment/common_ci.properties
+++ b/src/main/environment/common_ci.properties
@@ -34,6 +34,13 @@ send-message-url=@env.SMS_MESSAGE_URL@
start-sms-scheduler=false
cron-scheduler-sms=0 0/1 * * * ? *
+# Firebase Configuration
+firebase.enabled=@env.FIREBASE_ENABLE@
+# if using file
+firebase.credential-file=@env.FIREBASE_CREDENTIAL@
+# for CI/CD
+firebase.credential-base64=@env.CREDENTIAL_BASE64@
+
#### Email Configuration
send-email=@env.SEND_EMAIL@
spring.mail.host=@env.MAIL_HOST@
@@ -148,7 +155,7 @@ logging.file.name=@env.COMMON_API_LOGGING_FILE_NAME@
##grievance API call
-updateGrievanceDetails = @env.GRIEVANCE_API_BASE_URL@/grsbepro/igemr1097/public/api/v1/state-wise/grievance-list
+updateGrievanceDetails = @env.GRIEVANCE_API_BASE_URL@/grsbepro/igemr1097/public/api/v1/state-wise/grievance-list?page=PageNumber¤tpage=1
updateGrievanceTransactionDetails=@env.GRIEVANCE_API_BASE_URL@/grsbepro/igemr1097/public/api/v1/grievance_details/
## grievance variables
@@ -160,6 +167,12 @@ grievanceDataSyncDuration = @env.GRIEVANCE_DATA_SYNC_DURATION@
springdoc.api-docs.enabled=false
springdoc.swagger-ui.enabled=false
+
+isProduction=false
grievanceAllocationRetryConfiguration=3
+start-grievancedatasync-scheduler=false
+cron-scheduler-grievancedatasync=0 0/2 * * * ?
+
+
diff --git a/src/main/environment/common_dev.properties b/src/main/environment/common_dev.properties
index d59acb42..597a8bf6 100644
--- a/src/main/environment/common_dev.properties
+++ b/src/main/environment/common_dev.properties
@@ -118,7 +118,7 @@ nhm.agent.real.time.data.cron.flag=true
##----------------------------------------------------#grievance data sync-----------------------------------------------------------
start-grievancedatasync-scheduler=false
-cron-scheduler-grievancedatasync=0 0/5 * * * ? *
+cron-scheduler-grievancedatasync=0 0/2 * * * ?
carestream_socket_ip = 192.168.43.39
carestream_socket_port = 1235
@@ -173,7 +173,7 @@ fileBasePath =/Doc
jwt.secret=
##grievance API call
-updateGrievanceDetails = /grsbepro/igemr1097/public/api/v1/state-wise/grievance-list
+updateGrievanceDetails = /grsbepro/igemr1097/public/api/v1/state-wise/grievance-list?page=PageNumber¤tpage=1
updateGrievanceTransactionDetails=/grsbepro/igemr1097/public/api/v1/grievance_details/
## grievance variables
@@ -186,4 +186,6 @@ grievanceDataSyncDuration =
springdoc.api-docs.enabled=true
springdoc.swagger-ui.enabled=true
+isProduction=false
grievanceAllocationRetryConfiguration=3
+
diff --git a/src/main/environment/common_example.properties b/src/main/environment/common_example.properties
index bcc6c6ca..9a90154d 100644
--- a/src/main/environment/common_example.properties
+++ b/src/main/environment/common_example.properties
@@ -88,7 +88,7 @@ cron-scheduler-nhmdashboard=0 1 * * * ? *
##----------------------------------------------------#grievance data sync-----------------------------------------------------------
start-grievancedatasync-scheduler=false
-cron-scheduler-grievancedatasync=0 0/5 * * * ? *
+cron-scheduler-grievancedatasync=0 0/2 * * * ?
### Redis IP
spring.redis.host=localhost
@@ -173,7 +173,7 @@ jwt.secret=
fileBasePath =/Doc
##grievance API call
-updateGrievanceDetails = /grsbepro/igemr1097/public/api/v1/state-wise/grievance-list
+updateGrievanceDetails = /grsbepro/igemr1097/public/api/v1/state-wise/grievance-list?page=PageNumber¤tpage=1
updateGrievanceTransactionDetails=/grsbepro/igemr1097/public/api/v1/grievance_details/
## grievance variables
@@ -186,7 +186,7 @@ grievanceDataSyncDuration =
springdoc.api-docs.enabled=true
springdoc.swagger-ui.enabled=true
+isProduction=false
grievanceAllocationRetryConfiguration=3
-
diff --git a/src/main/environment/common_test.properties b/src/main/environment/common_test.properties
index 169317db..df9007ee 100644
--- a/src/main/environment/common_test.properties
+++ b/src/main/environment/common_test.properties
@@ -84,7 +84,7 @@ cron-scheduler-everwelldatasync=0 0/5 * * * ? *
##----------------------------------------------------#grievance data sync-----------------------------------------------------------
start-grievancedatasync-scheduler=false
-cron-scheduler-grievancedatasync=0 0/5 * * * ? *
+cron-scheduler-grievancedatasync=0 0/2 * * * ?
##-----------------------------------------------#NHM data dashboard schedular----------------------------------------------------------------
# run at everyday 12:01AM
start-nhmdashboard-scheduler=true
@@ -175,7 +175,7 @@ jwt.secret=
##grievance API call
-updateGrievanceDetails = /grsbepro/igemr1097/public/api/v1/state-wise/grievance-list
+updateGrievanceDetails = /grsbepro/igemr1097/public/api/v1/state-wise/grievance-list?page=PageNumber¤tpage=1
updateGrievanceTransactionDetails=/grsbepro/igemr1097/public/api/v1/grievance_details/
## grievance variables
@@ -187,5 +187,5 @@ grievanceDataSyncDuration =
springdoc.api-docs.enabled=true
springdoc.swagger-ui.enabled=true
-
+isProduction=false
grievanceAllocationRetryConfiguration=3
diff --git a/src/main/environment/common_uat.properties b/src/main/environment/common_uat.properties
index 0b55a003..92c55f4a 100644
--- a/src/main/environment/common_uat.properties
+++ b/src/main/environment/common_uat.properties
@@ -59,7 +59,7 @@ cron-scheduler-ctidatacheck=0 10 00 * * *
##----------------------------------------------------#grievance data sync-----------------------------------------------------------
start-grievancedatasync-scheduler=false
-cron-scheduler-grievancedatasync=0 0/5 * * * ? *
+cron-scheduler-grievancedatasync=0 0/2 * * * ?
### generate Beneficiary IDs URL
genben-api=/bengenapi-v1.0
@@ -146,7 +146,7 @@ fileBasePath =/Doc
jwt.secret=
##grievance API call
-updateGrievanceDetails = /grsbepro/igemr1097/public/api/v1/state-wise/grievance-list
+updateGrievanceDetails = /grsbepro/igemr1097/public/api/v1/state-wise/grievance-list?page=PageNumber¤tpage=1
updateGrievanceTransactionDetails=/grsbepro/igemr1097/public/api/v1/grievance_details/
## grievance variables
@@ -158,5 +158,5 @@ grievanceDataSyncDuration =
springdoc.api-docs.enabled=true
springdoc.swagger-ui.enabled=true
-
+isProduction=false
grievanceAllocationRetryConfiguration=3
diff --git a/src/main/java/com/iemr/common/CommonApplication.java b/src/main/java/com/iemr/common/CommonApplication.java
index 83078018..ea0adb97 100644
--- a/src/main/java/com/iemr/common/CommonApplication.java
+++ b/src/main/java/com/iemr/common/CommonApplication.java
@@ -21,11 +21,16 @@
*/
package com.iemr.common;
+import com.google.auth.oauth2.GoogleCredentials;
+import com.google.firebase.FirebaseApp;
+import com.google.firebase.FirebaseOptions;
+import com.google.firebase.messaging.FirebaseMessaging;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.Bean;
+import org.springframework.core.io.ClassPathResource;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
@@ -36,6 +41,8 @@
import com.iemr.common.data.users.User;
import com.iemr.common.utils.IEMRApplBeans;
+import java.io.IOException;
+
@SpringBootApplication
@EnableScheduling
public class CommonApplication extends SpringBootServletInitializer {
@@ -73,4 +80,6 @@ public RedisTemplate redisTemplate(RedisConnectionFactory factor
return template;
}
+
}
+
diff --git a/src/main/java/com/iemr/common/config/firebase/FirebaseMessagingConfig.java b/src/main/java/com/iemr/common/config/firebase/FirebaseMessagingConfig.java
new file mode 100644
index 00000000..438ca4f9
--- /dev/null
+++ b/src/main/java/com/iemr/common/config/firebase/FirebaseMessagingConfig.java
@@ -0,0 +1,57 @@
+package com.iemr.common.config.firebase;
+
+import com.google.auth.oauth2.GoogleCredentials;
+import com.google.firebase.FirebaseApp;
+import com.google.firebase.FirebaseOptions;
+import com.google.firebase.messaging.FirebaseMessaging;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.ClassPathResource;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.Base64;
+
+@Configuration
+public class FirebaseMessagingConfig {
+
+ @Value("${firebase.enabled:false}")
+ private boolean firebaseEnabled;
+
+ @Value("${firebase.credential-file:}")
+ private String firebaseCredentialFile;
+
+ @Value("${firebase.credential-base64:}")
+ private String firebaseCredentialBase64;
+
+ @Bean
+ public FirebaseMessaging firebaseMessaging() throws IOException {
+ if (!firebaseEnabled) {
+ throw new IllegalStateException("Firebase is disabled");
+ }
+
+ GoogleCredentials credentials;
+
+ if (!firebaseCredentialBase64.isBlank()) {
+ byte[] decoded = Base64.getDecoder().decode(firebaseCredentialBase64);
+ credentials = GoogleCredentials.fromStream(new ByteArrayInputStream(decoded));
+ } else if (!firebaseCredentialFile.isBlank()) {
+ credentials = GoogleCredentials.fromStream(
+ new ClassPathResource(firebaseCredentialFile).getInputStream()
+ );
+ } else {
+ throw new IllegalStateException("No Firebase credentials provided");
+ }
+
+ FirebaseOptions options = FirebaseOptions.builder()
+ .setCredentials(credentials)
+ .build();
+
+ FirebaseApp firebaseApp = FirebaseApp.getApps().isEmpty()
+ ? FirebaseApp.initializeApp(options)
+ : FirebaseApp.getInstance();
+
+ return FirebaseMessaging.getInstance(firebaseApp);
+ }
+}
diff --git a/src/main/java/com/iemr/common/controller/firebaseNotification/FirebaseNotificationController.java b/src/main/java/com/iemr/common/controller/firebaseNotification/FirebaseNotificationController.java
new file mode 100644
index 00000000..18601d22
--- /dev/null
+++ b/src/main/java/com/iemr/common/controller/firebaseNotification/FirebaseNotificationController.java
@@ -0,0 +1,24 @@
+package com.iemr.common.controller.firebaseNotification;
+
+import com.iemr.common.model.notification.NotificationMessage;
+import com.iemr.common.service.firebaseNotification.FirebaseNotificationService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping(value= "/firebaseNotification",headers = "Authorization")
+public class FirebaseNotificationController {
+ final Logger logger = LoggerFactory.getLogger(this.getClass().getName());
+
+ @Autowired
+ FirebaseNotificationService firebaseNotificationService;
+
+ @RequestMapping(value = "sendNotification",method = RequestMethod.POST)
+ public String sendNotificationByToken(@RequestBody NotificationMessage notificationMessage){
+ return firebaseNotificationService.sendNotification(notificationMessage);
+ }
+
+
+}
diff --git a/src/main/java/com/iemr/common/controller/grievance/GrievanceController.java b/src/main/java/com/iemr/common/controller/grievance/GrievanceController.java
index a4e3212c..bf243f69 100644
--- a/src/main/java/com/iemr/common/controller/grievance/GrievanceController.java
+++ b/src/main/java/com/iemr/common/controller/grievance/GrievanceController.java
@@ -1,6 +1,9 @@
package com.iemr.common.controller.grievance;
+import java.lang.reflect.Type;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -12,13 +15,17 @@
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
import com.iemr.common.data.grievance.UnallocationRequest;
import com.iemr.common.dto.grivance.GrievanceWorklistDTO;
import com.iemr.common.service.grievance.GrievanceDataSync;
@@ -130,11 +137,12 @@ public String moveToBin(@RequestBody String request) {
@Operation(summary = "get grievance outbound worklist)")
@PostMapping(value = "/getGrievanceOutboundWorklist", consumes = MediaType.APPLICATION_JSON, produces = MediaType.APPLICATION_JSON, headers = "Authorization")
- public ResponseEntity