Ultimato refactoring FirebaseService
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good

This commit is contained in:
2025-03-11 16:04:50 +01:00
parent 252584caf5
commit 1ef875434a
4 changed files with 50 additions and 65 deletions

View File

@@ -158,29 +158,21 @@ public class NotificationController {
ServiceRestResponse sendNotification(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestBody MessageDTO messageDTO) {
if (!firebaseService.isActive()) {
return ServiceRestResponse.createNegativeResponse("Servizio notifiche non attivo.");
}
Message.Builder builder = messageDTO.toBuilder();
if (messageDTO.getUserName() != null) {
builder.setTopic(firebaseService.getUserTopic(messageDTO.getUserName(), configuration));
}
ServiceRestResponse response;
try {
firebaseService.sendMessage(multiDBTransactionManager.getPrimaryDatasource(), builder.build());
Message.Builder builder = messageDTO.toBuilder();
response = ServiceRestResponse.createPositiveResponse("Notifica inviata.");
if (messageDTO.getUserName() != null) {
builder.setTopic(firebaseService.getUserTopic(multiDBTransactionManager.getPrimaryDatasource(), messageDTO.getUserName()));
}
firebaseService.sendMessage(multiDBTransactionManager.getPrimaryDatasource(), builder.build());
return ServiceRestResponse.createPositiveResponse("Notifica inviata.");
} catch (Exception e) {
logger.error(request.getRequestURI(), e);
response = ServiceRestResponse.createNegativeResponse(e);
return ServiceRestResponse.createNegativeResponse(e);
}
return response;
}
@RequestMapping(value = EmsRestConstants.PATH_NOTIF_SEND_USER_DEVICES, method = RequestMethod.POST)
@@ -188,10 +180,6 @@ public class NotificationController {
ServiceRestResponse sendNotificationToUserDevices(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestBody MessageDTO messageDTO) {
if (!firebaseService.isActive()) {
return ServiceRestResponse.createNegativeResponse("Servizio notifiche non attivo.");
}
ServiceRestResponse response;
try {
@@ -225,10 +213,6 @@ public class NotificationController {
public ServiceRestResponse sendNotificheCRM(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestParam int expiryMins) {
if (!firebaseService.isActive()) {
return ServiceRestResponse.createNegativeResponse("Servizio notifiche non attivo.");
}
String titoloNotificheCRM = null;
try {
titoloNotificheCRM = setupGest.getSetup("FIREBASE", "NOTIFICATION", "TITOLO_NOTIFICHE_CRM");

View File

@@ -55,16 +55,16 @@ public class DeviceTokenService {
String userName = UtilityHashMap.getValueIfExists(result, "user_name");
if (userName != null && !userDeviceToken.getUserName().equals(userName)) {
firebaseService.unsubscribeFromUser(userDeviceToken.getDeviceToken(), userName, multiDBTransactionManager.getPrimaryDatasource().getProfile());
firebaseService.unsubscribeFromUser(multiDBTransactionManager.getPrimaryDatasource(), userDeviceToken.getDeviceToken(), userName);
WtbDeviceTokenTopic deviceTokenTopic = new WtbDeviceTokenTopic();
deviceTokenTopic.setOperation(OperationType.DELETE);
deviceTokenTopic.setTopicName(firebaseService.getUserTopic(userName, multiDBTransactionManager.getPrimaryDatasource().getProfile()));
deviceTokenTopic.setTopicName(firebaseService.getUserTopic(multiDBTransactionManager.getPrimaryDatasource(), userName));
userDeviceToken.addWtbDeviceTokenTopic(deviceTokenTopic);
firebaseService.subscribeToUser(userDeviceToken.getDeviceToken(), userDeviceToken.getUserName(), multiDBTransactionManager.getPrimaryDatasource().getProfile());
firebaseService.subscribeToUser(multiDBTransactionManager.getPrimaryDatasource(), userDeviceToken.getDeviceToken(), userDeviceToken.getUserName());
}
this.manageSubscriptionToTopics(userDeviceToken, SubscribeOperation.SUBSCRIBE, deleteOldTopics);
@@ -93,7 +93,7 @@ public class DeviceTokenService {
entityProcessor.processEntity(userDeviceToken, multiDBTransactionManager);
firebaseService.unsubscribeFromUser(userDeviceToken.getDeviceToken(), userDeviceToken.getUserName(), multiDBTransactionManager.getPrimaryDatasource().getProfile());
firebaseService.unsubscribeFromUser(multiDBTransactionManager.getPrimaryDatasource(), userDeviceToken.getDeviceToken(), userDeviceToken.getUserName());
this.manageSubscriptionToTopics(userDeviceToken, SubscribeOperation.UNSUBSCRIBE);
@@ -116,7 +116,7 @@ public class DeviceTokenService {
entityProcessor.processEntity(userDeviceToken, multiDBTransactionManager);
firebaseService.unsubscribeFromUser(userDeviceToken.getDeviceToken(), userDeviceToken.getUserName(), multiDBTransactionManager.getPrimaryDatasource().getProfile());
firebaseService.unsubscribeFromUser(multiDBTransactionManager.getPrimaryDatasource(), userDeviceToken.getDeviceToken(), userDeviceToken.getUserName());
this.manageSubscriptionToTopics(userDeviceToken, SubscribeOperation.UNSUBSCRIBE);
@@ -207,7 +207,7 @@ public class DeviceTokenService {
}
}
final String userTopic = firebaseService.getUserTopic(userDeviceToken.getUserName(), multiDBTransactionManager.getPrimaryDatasource().getProfile());
final String userTopic = firebaseService.getUserTopic(multiDBTransactionManager.getPrimaryDatasource(), userDeviceToken.getUserName());
if (userDeviceToken.getTopics() == null) {
userDeviceToken.setWtbDeviceTokenTopicFromTopics(Collections.singletonList(userTopic));
@@ -218,13 +218,13 @@ public class DeviceTokenService {
switch (operation) {
case SUBSCRIBE:
for (WtbDeviceTokenTopic deviceTokenTopic : userDeviceToken.getWtbDeviceTokenTopic()) {
firebaseService.subscribeToTopic(userDeviceToken.getDeviceToken(), deviceTokenTopic.getTopicName());
firebaseService.subscribeToTopic(multiDBTransactionManager.getPrimaryDatasource(), userDeviceToken.getDeviceToken(), deviceTokenTopic.getTopicName());
}
break;
case UNSUBSCRIBE:
for (WtbDeviceTokenTopic deviceTokenTopic : userDeviceToken.getWtbDeviceTokenTopic()) {
firebaseService.unsubscribeFromTopic(userDeviceToken.getDeviceToken(), deviceTokenTopic.getTopicName());
firebaseService.unsubscribeFromTopic(multiDBTransactionManager.getPrimaryDatasource(), userDeviceToken.getDeviceToken(), deviceTokenTopic.getTopicName());
}
break;
@@ -295,7 +295,7 @@ public class DeviceTokenService {
ps.close();
firebaseService.unsubscribeFromTopic(userDeviceToken.getDeviceToken(), topic);
firebaseService.unsubscribeFromTopic(multiDBTransactionManager.getPrimaryDatasource(), userDeviceToken.getDeviceToken(), topic);
}
break;

View File

@@ -90,99 +90,100 @@ public class FirebaseService {
}
public String sendMessage(DataSource datasource, Message message) throws Exception {
if (!this.isInitialized()) {
if (!this.isInitialized(datasource)) {
throw new FirebaseNotReadyException();
}
return FirebaseMessaging.getInstance().send(message, this.isDryRun(datasource));
}
public TopicManagementResponse subscribeToTopic(String deviceToken, String topic) throws Exception {
if (!this.isInitialized()) {
public TopicManagementResponse subscribeToTopic(DataSource datasource, String deviceToken, String topic) throws Exception {
if (!this.isInitialized(datasource)) {
throw new FirebaseNotReadyException();
}
return FirebaseMessaging.getInstance().subscribeToTopic(Collections.singletonList(deviceToken), topic);
}
public TopicManagementResponse subscribeToTopic(List<String> deviceTokens, String topic) throws Exception {
if (!this.isInitialized()) {
public TopicManagementResponse subscribeToTopic(DataSource datasource, List<String> deviceTokens, String topic) throws Exception {
if (!this.isInitialized(datasource)) {
throw new FirebaseNotReadyException();
}
return FirebaseMessaging.getInstance().subscribeToTopic(deviceTokens, topic);
}
public void subscribeToTopics(String deviceToken, List<String> topics) throws Exception {
public void subscribeToTopics(DataSource datasource, String deviceToken, List<String> topics) throws Exception {
for (String topic : topics) {
this.subscribeToTopic(deviceToken, topic);
this.subscribeToTopic(datasource, deviceToken, topic);
}
}
public TopicManagementResponse subscribeToUser(String deviceToken, String userName, String profileDb) throws Exception {
if (!this.isInitialized()) {
public TopicManagementResponse subscribeToUser(DataSource datasource, String deviceToken, String userName) throws Exception {
if (!this.isInitialized(datasource)) {
throw new FirebaseNotReadyException();
}
return this.subscribeToTopic(deviceToken, getUserTopic(userName, profileDb));
return this.subscribeToTopic(datasource, deviceToken, getUserTopic(datasource, userName));
}
public TopicManagementResponse subscribeToUser(List<String> deviceTokens, String userName, String profileDb) throws Exception {
if (!this.isInitialized()) {
public TopicManagementResponse subscribeToUser(DataSource datasource, List<String> deviceTokens, String userName) throws Exception {
if (!this.isInitialized(datasource)) {
throw new FirebaseNotReadyException();
}
return this.subscribeToTopic(deviceTokens, getUserTopic(userName, profileDb));
return this.subscribeToTopic(datasource, deviceTokens, getUserTopic(datasource, userName));
}
public TopicManagementResponse unsubscribeFromTopic(String deviceToken, String topic) throws Exception {
if (!this.isInitialized())
public TopicManagementResponse unsubscribeFromTopic(DataSource dataSource, String deviceToken, String topic) throws Exception {
if (!this.isInitialized(dataSource))
throw new FirebaseNotReadyException();
return FirebaseMessaging.getInstance().unsubscribeFromTopic(Collections.singletonList(deviceToken), topic);
}
public TopicManagementResponse unsubscribeFromTopic(List<String> deviceTokens, String topic) throws Exception {
if (!this.isInitialized()) {
public TopicManagementResponse unsubscribeFromTopic(DataSource dataSource, List<String> deviceTokens, String topic) throws Exception {
if (!this.isInitialized(dataSource)) {
throw new FirebaseNotReadyException();
}
return FirebaseMessaging.getInstance().unsubscribeFromTopic(deviceTokens, topic);
}
public void unsubscribeFromTopics(String deviceToken, List<String> topics) throws Exception {
public void unsubscribeFromTopics(DataSource dataSource, String deviceToken, List<String> topics) throws Exception {
for (String topic : topics) {
this.unsubscribeFromTopic(deviceToken, topic);
this.unsubscribeFromTopic(dataSource, deviceToken, topic);
}
}
public TopicManagementResponse unsubscribeFromUser(String deviceToken, String userName, String profileDb) throws Exception {
if (!this.isInitialized()) {
public TopicManagementResponse unsubscribeFromUser(DataSource dataSource, String deviceToken, String userName) throws Exception {
if (!this.isInitialized(dataSource)) {
throw new FirebaseNotReadyException();
}
return this.unsubscribeFromTopic(deviceToken, getUserTopic(userName, profileDb));
return this.unsubscribeFromTopic(dataSource, deviceToken, getUserTopic(dataSource, userName));
}
public TopicManagementResponse unsubscribeFromUser(List<String> deviceTokens, String userName, String profileDb) throws Exception {
if (!this.isInitialized()) {
public TopicManagementResponse unsubscribeFromUser(DataSource dataSource, List<String> deviceTokens, String userName) throws Exception {
if (!this.isInitialized(dataSource)) {
throw new FirebaseNotReadyException();
}
return this.unsubscribeFromTopic(deviceTokens, getUserTopic(userName, profileDb));
return this.unsubscribeFromTopic(dataSource, deviceTokens, getUserTopic(dataSource, userName));
}
private boolean isInitialized() {
return initialized;
private boolean isInitialized(DataSource advancedDataSource) {
String dbName = advancedDataSource.getDbName();
return initializedInstances.getOrDefault(dbName, false);
}
private boolean isDryRun(DataSource advancedDataSource) {
public boolean isDryRun(DataSource advancedDataSource) {
return !IntegryCustomerDB.Integry_Studioml.getValue().equalsIgnoreCase(advancedDataSource.getDbName()) &&
(UtilityDebug.isDebugExecution() || UtilityDebug.isIntegryServer());
}
public String getUserTopic(String userName, String profileDb) {
return (NOTIF_USER_TOPIC_PREFIX + userName + "_" + profileDb).toLowerCase();
public String getUserTopic(DataSource dataSource, String userName) {
return (NOTIF_USER_TOPIC_PREFIX + userName + "_" + dataSource.getProfile()).toLowerCase();
}
}

View File

@@ -401,7 +401,7 @@ public class NotificationService {
builder.setToken(deviceToken);
try {
if (firebaseService.isDryRun()) {
if (firebaseService.isDryRun(multiDBTransactionManager.getPrimaryDatasource())) {
logger.debug("Invio notifica Firebase in dry run: \n" + notification);
}
@@ -536,7 +536,7 @@ public class NotificationService {
Message.Builder builder = messageDTO.toBuilder();
if (messageDTO.getUserName() != null) {
builder.setTopic(firebaseService.getUserTopic(messageDTO.getUserName(), multiDBTransactionManager.getPrimaryDatasource().getProfile()));
builder.setTopic(firebaseService.getUserTopic(multiDBTransactionManager.getPrimaryDatasource(), messageDTO.getUserName()));
}
firebaseService.sendMessage(multiDBTransactionManager.getPrimaryDatasource(), builder.build());