Browse Source

Notification system refactoring

pull/7911/head
ViacheslavKlimov 4 years ago
parent
commit
8a922f36a4
  1. 8
      application/src/main/java/org/thingsboard/server/controller/NotificationController.java
  2. 1
      application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java
  3. 2
      application/src/main/java/org/thingsboard/server/service/entitiy/AbstractTbEntityService.java
  4. 3
      common/data/src/main/java/org/thingsboard/server/common/data/User.java
  5. 2
      common/data/src/main/java/org/thingsboard/server/common/data/notification/template/NotificationTemplate.java
  6. 15
      dao/src/main/java/org/thingsboard/server/dao/DaoUtil.java
  7. 4
      dao/src/main/java/org/thingsboard/server/dao/model/BaseSqlEntity.java
  8. 1
      dao/src/main/java/org/thingsboard/server/dao/notification/DefaultNotificationTargetService.java
  9. 4
      dao/src/main/java/org/thingsboard/server/dao/sql/notification/JpaNotificationRequestDao.java
  10. 6
      dao/src/main/java/org/thingsboard/server/dao/sql/notification/JpaNotificationRuleDao.java
  11. 2
      dao/src/main/java/org/thingsboard/server/dao/sql/notification/JpaNotificationTargetDao.java
  12. 2
      dao/src/main/java/org/thingsboard/server/dao/sql/notification/JpaNotificationTemplateDao.java
  13. 5
      dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java

8
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<NotificationDeliveryMethod, DeliveryMethodNotificationTemplate> processedTemplates = mockProcessingCtx.getDeliveryMethods().stream()
Map<NotificationDeliveryMethod, DeliveryMethodNotificationTemplate> processedTemplates = tmpProcessingCtx.getDeliveryMethods().stream()
.collect(Collectors.toMap(m -> m, deliveryMethod -> {
Map<String, String> 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);

1
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:

2
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<Void> removeAlarmsByEntityId(TenantId tenantId, EntityId entityId) {

3
common/data/src/main/java/org/thingsboard/server/common/data/User.java

@ -145,6 +145,7 @@ public class User extends SearchTextBasedWithAdditionalInfo<UserId> 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<UserId> 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();

2
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<NotificationTemplateId> imple
private TenantId tenantId;
@NoXss
@NotEmpty
private String name;
@NoXss
@NotNull

15
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<UUID> toUUIDs(List<? extends UUIDBased> idBasedIds) {

4
dao/src/main/java/org/thingsboard/server/dao/model/BaseSqlEntity.java

@ -77,10 +77,10 @@ public abstract class BaseSqlEntity<D> implements BaseEntity<D> {
}
protected static UUID getTenantUuid(TenantId tenantId) {
if (tenantId != null && !tenantId.isNullUid()) {
if (tenantId != null) {
return tenantId.getId();
} else {
return null;
return EntityId.NULL_UUID;
}
}

1
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<User> 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);

4
dao/src/main/java/org/thingsboard/server/dao/sql/notification/JpaNotificationRequestDao.java

@ -55,13 +55,13 @@ public class JpaNotificationRequestDao extends JpaAbstractDao<NotificationReques
@Override
public PageData<NotificationRequest> 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<NotificationRequestInfo> 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);
}

6
dao/src/main/java/org/thingsboard/server/dao/sql/notification/JpaNotificationRuleDao.java

@ -49,13 +49,13 @@ public class JpaNotificationRuleDao extends JpaAbstractDao<NotificationRuleEntit
@Override
public PageData<NotificationRule> 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<NotificationRuleInfo> 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<NotificationRuleEntit
@Override
public List<NotificationRule> findByTenantIdAndTriggerType(TenantId tenantId, NotificationRuleTriggerType triggerType) {
return DaoUtil.convertDataList(notificationRuleRepository.findAllByTenantIdAndTriggerType(getId(tenantId, true), triggerType));
return DaoUtil.convertDataList(notificationRuleRepository.findAllByTenantIdAndTriggerType(tenantId.getId(), triggerType));
}
@Override

2
dao/src/main/java/org/thingsboard/server/dao/sql/notification/JpaNotificationTargetDao.java

@ -47,7 +47,7 @@ public class JpaNotificationTargetDao extends JpaAbstractDao<NotificationTargetE
@Override
public PageData<NotificationTarget> 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)));
}

2
dao/src/main/java/org/thingsboard/server/dao/sql/notification/JpaNotificationTemplateDao.java

@ -50,7 +50,7 @@ public class JpaNotificationTemplateDao extends JpaAbstractDao<NotificationTempl
@Override
public PageData<NotificationTemplate> findByTenantIdAndNotificationTypesAndPageLink(TenantId tenantId, List<NotificationType> 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)));
}

5
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<TenantId, Ten
@Autowired
private AdminSettingsService adminSettingsService;
@Autowired
private NotificationSettingsService notificationSettingsService;
@Autowired
protected TbTransactionalCache<TenantId, Boolean> existsTenantCache;
@ -175,6 +179,7 @@ public class TenantServiceImpl extends AbstractCachedEntityService<TenantId, Ten
deviceProfileService.createDefaultDeviceProfile(savedTenant.getId());
assetProfileService.createDefaultAssetProfile(savedTenant.getId());
apiUsageStateService.createDefaultApiUsageState(savedTenant.getId(), null);
notificationSettingsService.createDefaultNotificationConfigs(savedTenant.getId());
}
return savedTenant;
}

Loading…
Cancel
Save