From 8a922f36a4aa81648c626a85af5fff2b36fa7a93 Mon Sep 17 00:00:00 2001 From: ViacheslavKlimov Date: Thu, 23 Feb 2023 12:45:16 +0200 Subject: [PATCH] Notification system refactoring --- .../server/controller/NotificationController.java | 8 ++++---- .../server/install/ThingsboardInstallService.java | 1 + .../service/entitiy/AbstractTbEntityService.java | 2 +- .../org/thingsboard/server/common/data/User.java | 3 ++- .../template/NotificationTemplate.java | 2 ++ .../java/org/thingsboard/server/dao/DaoUtil.java | 15 ++++----------- .../server/dao/model/BaseSqlEntity.java | 4 ++-- .../DefaultNotificationTargetService.java | 1 + .../notification/JpaNotificationRequestDao.java | 4 ++-- .../sql/notification/JpaNotificationRuleDao.java | 6 +++--- .../notification/JpaNotificationTargetDao.java | 2 +- .../notification/JpaNotificationTemplateDao.java | 2 +- .../server/dao/tenant/TenantServiceImpl.java | 5 +++++ 13 files changed, 29 insertions(+), 26 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/controller/NotificationController.java b/application/src/main/java/org/thingsboard/server/controller/NotificationController.java index 45b99920ac..ba223141c5 100644 --- a/application/src/main/java/org/thingsboard/server/controller/NotificationController.java +++ b/application/src/main/java/org/thingsboard/server/controller/NotificationController.java @@ -212,22 +212,22 @@ public class NotificationController extends BaseController { if (template == null) { throw new IllegalArgumentException("Template is missing"); } - NotificationProcessingContext mockProcessingCtx = NotificationProcessingContext.builder() + NotificationProcessingContext tmpProcessingCtx = NotificationProcessingContext.builder() .tenantId(user.getTenantId()) .request(request) .settings(null) .template(template) .build(); - Map processedTemplates = mockProcessingCtx.getDeliveryMethods().stream() + Map processedTemplates = tmpProcessingCtx.getDeliveryMethods().stream() .collect(Collectors.toMap(m -> m, deliveryMethod -> { Map templateContext; if (NotificationTargetType.PLATFORM_USERS.getSupportedDeliveryMethods().contains(deliveryMethod)) { - templateContext = mockProcessingCtx.createTemplateContext(user); + templateContext = tmpProcessingCtx.createTemplateContext(user); } else { templateContext = Collections.emptyMap(); } - return mockProcessingCtx.getProcessedTemplate(deliveryMethod, templateContext); + return tmpProcessingCtx.getProcessedTemplate(deliveryMethod, templateContext); })); preview.setProcessedTemplates(processedTemplates); diff --git a/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java b/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java index c0f4bd5cf4..a22b8854bb 100644 --- a/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java +++ b/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java @@ -242,6 +242,7 @@ public class ThingsboardInstallService { databaseEntitiesUpgradeService.upgradeDatabase("3.4.4"); log.info("Updating system data..."); systemDataLoaderService.updateSystemWidgets(); + systemDataLoaderService.createDefaultNotificationConfigs(); break; //TODO update CacheCleanupService on the next version upgrade default: diff --git a/application/src/main/java/org/thingsboard/server/service/entitiy/AbstractTbEntityService.java b/application/src/main/java/org/thingsboard/server/service/entitiy/AbstractTbEntityService.java index 3eb97dc2a1..334a9aed0b 100644 --- a/application/src/main/java/org/thingsboard/server/service/entitiy/AbstractTbEntityService.java +++ b/application/src/main/java/org/thingsboard/server/service/entitiy/AbstractTbEntityService.java @@ -69,7 +69,7 @@ public abstract class AbstractTbEntityService { protected CustomerService customerService; @Autowired protected TbClusterService tbClusterService; - @Autowired(required = false) + @Autowired(required = false) @Lazy private EntitiesVersionControlService vcService; protected ListenableFuture removeAlarmsByEntityId(TenantId tenantId, EntityId entityId) { diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/User.java b/common/data/src/main/java/org/thingsboard/server/common/data/User.java index 7416b2a165..60afaf36d0 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/User.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/User.java @@ -145,6 +145,7 @@ public class User extends SearchTextBasedWithAdditionalInfo implements H this.lastName = lastName; } + @ApiModelProperty(position = 10, required = true, value = "Phone number of the user", example = "38012345123") public String getPhone() { return phone; } @@ -153,7 +154,7 @@ public class User extends SearchTextBasedWithAdditionalInfo implements H this.phone = phone; } - @ApiModelProperty(position = 10, value = "Additional parameters of the user", dataType = "com.fasterxml.jackson.databind.JsonNode") + @ApiModelProperty(position = 11, value = "Additional parameters of the user", dataType = "com.fasterxml.jackson.databind.JsonNode") @Override public JsonNode getAdditionalInfo() { return super.getAdditionalInfo(); diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/notification/template/NotificationTemplate.java b/common/data/src/main/java/org/thingsboard/server/common/data/notification/template/NotificationTemplate.java index abdd0c428a..afef32aa09 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/notification/template/NotificationTemplate.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/notification/template/NotificationTemplate.java @@ -26,6 +26,7 @@ import org.thingsboard.server.common.data.notification.NotificationType; import org.thingsboard.server.common.data.validation.NoXss; import javax.validation.Valid; +import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; @Data @@ -34,6 +35,7 @@ public class NotificationTemplate extends BaseData imple private TenantId tenantId; @NoXss + @NotEmpty private String name; @NoXss @NotNull diff --git a/dao/src/main/java/org/thingsboard/server/dao/DaoUtil.java b/dao/src/main/java/org/thingsboard/server/dao/DaoUtil.java index e7bf0e255b..5c45e4d44b 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/DaoUtil.java +++ b/dao/src/main/java/org/thingsboard/server/dao/DaoUtil.java @@ -95,18 +95,11 @@ public abstract class DaoUtil { } public static UUID getId(UUIDBased idBased) { - return getId(idBased, false); - } - - public static UUID getId(UUIDBased uuidBased, boolean nullUuidToNull) { - UUID uuid = null; - if (uuidBased != null) { - uuid = uuidBased.getId(); - if (nullUuidToNull && uuid.equals(EntityId.NULL_UUID)) { - uuid = null; - } + UUID id = null; + if (idBased != null) { + id = idBased.getId(); } - return uuid; + return id; } public static List toUUIDs(List idBasedIds) { diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/BaseSqlEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/BaseSqlEntity.java index 8e7bc494ad..916c459a6b 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/BaseSqlEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/BaseSqlEntity.java @@ -77,10 +77,10 @@ public abstract class BaseSqlEntity implements BaseEntity { } protected static UUID getTenantUuid(TenantId tenantId) { - if (tenantId != null && !tenantId.isNullUid()) { + if (tenantId != null) { return tenantId.getId(); } else { - return null; + return EntityId.NULL_UUID; } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/notification/DefaultNotificationTargetService.java b/dao/src/main/java/org/thingsboard/server/dao/notification/DefaultNotificationTargetService.java index c048f978e3..3c40774ec6 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/notification/DefaultNotificationTargetService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/notification/DefaultNotificationTargetService.java @@ -100,6 +100,7 @@ public class DefaultNotificationTargetService extends AbstractEntityService impl switch (usersFilter.getType()) { case USER_LIST: { List users = ((UserListFilter) usersFilter).getUsersIds().stream() + .limit(pageLink.getPageSize()) .map(UserId::new).map(userId -> userService.findUserById(tenantId, userId)) .collect(Collectors.toList()); return new PageData<>(users, 1, users.size(), false); diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/notification/JpaNotificationRequestDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/notification/JpaNotificationRequestDao.java index 4e2cfc7467..5c2017fd53 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/notification/JpaNotificationRequestDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/notification/JpaNotificationRequestDao.java @@ -55,13 +55,13 @@ public class JpaNotificationRequestDao extends JpaAbstractDao findByTenantIdAndOriginatorTypeAndPageLink(TenantId tenantId, EntityType originatorType, PageLink pageLink) { - return DaoUtil.toPageData(notificationRequestRepository.findByTenantIdAndOriginatorEntityType(getId(tenantId, true), + return DaoUtil.toPageData(notificationRequestRepository.findByTenantIdAndOriginatorEntityType(tenantId.getId(), originatorType, DaoUtil.toPageable(pageLink))); } @Override public PageData findInfosByTenantIdAndOriginatorTypeAndPageLink(TenantId tenantId, EntityType originatorType, PageLink pageLink) { - return DaoUtil.pageToPageData(notificationRequestRepository.findInfosByTenantIdAndOriginatorEntityTypeAndSearchText(getId(tenantId, true), + return DaoUtil.pageToPageData(notificationRequestRepository.findInfosByTenantIdAndOriginatorEntityTypeAndSearchText(tenantId.getId(), originatorType, Strings.nullToEmpty(pageLink.getTextSearch()), DaoUtil.toPageable(pageLink))).mapData(NotificationRequestInfoEntity::toData); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/notification/JpaNotificationRuleDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/notification/JpaNotificationRuleDao.java index 0496a10587..66a8bfae3f 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/notification/JpaNotificationRuleDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/notification/JpaNotificationRuleDao.java @@ -49,13 +49,13 @@ public class JpaNotificationRuleDao extends JpaAbstractDao findByTenantIdAndPageLink(TenantId tenantId, PageLink pageLink) { - return DaoUtil.toPageData(notificationRuleRepository.findByTenantIdAndSearchText(getId(tenantId, true), + return DaoUtil.toPageData(notificationRuleRepository.findByTenantIdAndSearchText(tenantId.getId(), Strings.nullToEmpty(pageLink.getTextSearch()), DaoUtil.toPageable(pageLink))); } @Override public PageData findInfosByTenantIdAndPageLink(TenantId tenantId, PageLink pageLink) { - return DaoUtil.pageToPageData(notificationRuleRepository.findInfosByTenantIdAndSearchText(getId(tenantId, true), + return DaoUtil.pageToPageData(notificationRuleRepository.findInfosByTenantIdAndSearchText(tenantId.getId(), Strings.nullToEmpty(pageLink.getTextSearch()), DaoUtil.toPageable(pageLink))).mapData(NotificationRuleInfoEntity::toData); } @@ -66,7 +66,7 @@ public class JpaNotificationRuleDao extends JpaAbstractDao findByTenantIdAndTriggerType(TenantId tenantId, NotificationRuleTriggerType triggerType) { - return DaoUtil.convertDataList(notificationRuleRepository.findAllByTenantIdAndTriggerType(getId(tenantId, true), triggerType)); + return DaoUtil.convertDataList(notificationRuleRepository.findAllByTenantIdAndTriggerType(tenantId.getId(), triggerType)); } @Override diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/notification/JpaNotificationTargetDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/notification/JpaNotificationTargetDao.java index 5e04836f2d..1a82981112 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/notification/JpaNotificationTargetDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/notification/JpaNotificationTargetDao.java @@ -47,7 +47,7 @@ public class JpaNotificationTargetDao extends JpaAbstractDao findByTenantIdAndPageLink(TenantId tenantId, PageLink pageLink) { - return DaoUtil.toPageData(notificationTargetRepository.findByTenantIdAndNameContainingIgnoreCase(getId(tenantId, true), + return DaoUtil.toPageData(notificationTargetRepository.findByTenantIdAndNameContainingIgnoreCase(tenantId.getId(), Strings.nullToEmpty(pageLink.getTextSearch()), DaoUtil.toPageable(pageLink))); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/notification/JpaNotificationTemplateDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/notification/JpaNotificationTemplateDao.java index dd494ca441..cf13190bd2 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/notification/JpaNotificationTemplateDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/notification/JpaNotificationTemplateDao.java @@ -50,7 +50,7 @@ public class JpaNotificationTemplateDao extends JpaAbstractDao findByTenantIdAndNotificationTypesAndPageLink(TenantId tenantId, List notificationTypes, PageLink pageLink) { - return DaoUtil.toPageData(notificationTemplateRepository.findByTenantIdAndNotificationTypesAndSearchText(getId(tenantId, true), + return DaoUtil.toPageData(notificationTemplateRepository.findByTenantIdAndNotificationTypesAndSearchText(tenantId.getId(), notificationTypes, Strings.nullToEmpty(pageLink.getTextSearch()), DaoUtil.toPageable(pageLink))); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java index b5fd0bace7..7a9116a0b7 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java @@ -40,6 +40,7 @@ import org.thingsboard.server.dao.dashboard.DashboardService; import org.thingsboard.server.dao.device.DeviceProfileService; import org.thingsboard.server.dao.device.DeviceService; import org.thingsboard.server.dao.entity.AbstractCachedEntityService; +import org.thingsboard.server.dao.notification.NotificationSettingsService; import org.thingsboard.server.dao.ota.OtaPackageService; import org.thingsboard.server.dao.queue.QueueService; import org.thingsboard.server.dao.resource.ResourceService; @@ -123,6 +124,9 @@ public class TenantServiceImpl extends AbstractCachedEntityService existsTenantCache; @@ -175,6 +179,7 @@ public class TenantServiceImpl extends AbstractCachedEntityService