From 89aa75718d2262458a221d9f90a895296a5fbefa Mon Sep 17 00:00:00 2001 From: ViacheslavKlimov Date: Tue, 17 Jan 2023 19:29:27 +0200 Subject: [PATCH] Notification request info --- .../controller/NotificationController.java | 35 ++++++++----- .../AbstractNotificationApiTest.java | 10 +++- .../notification/NotificationApiTest.java | 21 +++++++- .../NotificationRequestService.java | 5 ++ .../NotificationTargetService.java | 2 +- .../notification/NotificationRequest.java | 13 +++++ .../notification/NotificationRequestInfo.java | 38 ++++++++++++++ .../NotificationRequestPreview.java | 3 +- .../model/sql/NotificationRequestEntity.java | 15 ++++++ .../sql/NotificationRequestInfoEntity.java | 51 +++++++++++++++++++ .../DefaultNotificationRequestService.java | 11 ++++ .../DefaultNotificationTargetService.java | 4 +- .../notification/NotificationRequestDao.java | 5 ++ .../JpaNotificationRequestDao.java | 17 ++++++- .../NotificationRequestRepository.java | 12 +++++ 15 files changed, 219 insertions(+), 23 deletions(-) create mode 100644 common/data/src/main/java/org/thingsboard/server/common/data/notification/NotificationRequestInfo.java create mode 100644 dao/src/main/java/org/thingsboard/server/dao/model/sql/NotificationRequestInfoEntity.java 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 c7c69659f0..bd03040b3f 100644 --- a/application/src/main/java/org/thingsboard/server/controller/NotificationController.java +++ b/application/src/main/java/org/thingsboard/server/controller/NotificationController.java @@ -39,8 +39,10 @@ import org.thingsboard.server.common.data.notification.Notification; import org.thingsboard.server.common.data.notification.NotificationDeliveryMethod; import org.thingsboard.server.common.data.notification.NotificationProcessingContext; import org.thingsboard.server.common.data.notification.NotificationRequest; +import org.thingsboard.server.common.data.notification.NotificationRequestInfo; import org.thingsboard.server.common.data.notification.NotificationRequestPreview; import org.thingsboard.server.common.data.notification.settings.NotificationSettings; +import org.thingsboard.server.common.data.notification.targets.NotificationTarget; import org.thingsboard.server.common.data.notification.template.DeliveryMethodNotificationTemplate; import org.thingsboard.server.common.data.notification.template.NotificationTemplate; import org.thingsboard.server.common.data.page.PageData; @@ -56,6 +58,7 @@ import org.thingsboard.server.service.security.permission.Operation; import org.thingsboard.server.service.security.permission.Resource; import javax.validation.Valid; +import java.util.HashMap; import java.util.Map; import java.util.UUID; import java.util.stream.Collectors; @@ -147,10 +150,16 @@ public class NotificationController extends BaseController { })); preview.setProcessedTemplates(processedTemplates); - Map recipientsCountByTarget = notificationRequest.getTargets().stream() - .collect(Collectors.toMap(id -> id, targetId -> { - return notificationTargetService.countRecipientsForNotificationTarget(user.getTenantId(), new NotificationTargetId(targetId)); - })); + Map recipientsCountByTarget = new HashMap<>(); + notificationRequest.getTargets().forEach(targetId -> { + NotificationTarget notificationTarget = notificationTargetService.findNotificationTargetById(user.getTenantId(), new NotificationTargetId(targetId)); + if (notificationTarget == null) { + throw new IllegalArgumentException("Notification target with id " + targetId + " not found"); + } + + int recipientsCount = notificationTargetService.countRecipientsForNotificationTargetConfig(user.getTenantId(), notificationTarget.getConfiguration()); + recipientsCountByTarget.put(notificationTarget.getName(), recipientsCount); + }); preview.setRecipientsCountByTarget(recipientsCountByTarget); preview.setTotalRecipientsCount(recipientsCountByTarget.values().stream().mapToInt(Integer::intValue).sum()); @@ -159,21 +168,21 @@ public class NotificationController extends BaseController { @GetMapping("/notification/request/{id}") @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')") - public NotificationRequest getNotificationRequestById(@PathVariable UUID id) throws ThingsboardException { + public NotificationRequestInfo getNotificationRequestById(@PathVariable UUID id) throws ThingsboardException { NotificationRequestId notificationRequestId = new NotificationRequestId(id); - return checkEntityId(notificationRequestId, notificationRequestService::findNotificationRequestById, Operation.READ); + return checkEntityId(notificationRequestId, notificationRequestService::findNotificationRequestInfoById, Operation.READ); } @GetMapping("/notification/requests") @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')") - public PageData getNotificationRequests(@RequestParam int pageSize, - @RequestParam int page, - @RequestParam(required = false) String textSearch, - @RequestParam(required = false) String sortProperty, - @RequestParam(required = false) String sortOrder, - @AuthenticationPrincipal SecurityUser user) throws ThingsboardException { + public PageData getNotificationRequests(@RequestParam int pageSize, + @RequestParam int page, + @RequestParam(required = false) String textSearch, + @RequestParam(required = false) String sortProperty, + @RequestParam(required = false) String sortOrder, + @AuthenticationPrincipal SecurityUser user) throws ThingsboardException { PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder); - return notificationRequestService.findNotificationRequestsByTenantIdAndOriginatorType(user.getTenantId(), EntityType.USER, pageLink); + return notificationRequestService.findNotificationRequestsInfosByTenantIdAndOriginatorType(user.getTenantId(), EntityType.USER, pageLink); } @DeleteMapping("/notification/request/{id}") diff --git a/application/src/test/java/org/thingsboard/server/service/notification/AbstractNotificationApiTest.java b/application/src/test/java/org/thingsboard/server/service/notification/AbstractNotificationApiTest.java index 3fa812151b..8b9d40cc51 100644 --- a/application/src/test/java/org/thingsboard/server/service/notification/AbstractNotificationApiTest.java +++ b/application/src/test/java/org/thingsboard/server/service/notification/AbstractNotificationApiTest.java @@ -32,6 +32,7 @@ import org.thingsboard.server.common.data.notification.Notification; import org.thingsboard.server.common.data.notification.NotificationDeliveryMethod; import org.thingsboard.server.common.data.notification.NotificationRequest; import org.thingsboard.server.common.data.notification.NotificationRequestConfig; +import org.thingsboard.server.common.data.notification.NotificationRequestInfo; import org.thingsboard.server.common.data.notification.NotificationRequestStats; import org.thingsboard.server.common.data.notification.NotificationType; import org.thingsboard.server.common.data.notification.info.UserOriginatedNotificationInfo; @@ -177,8 +178,13 @@ public abstract class AbstractNotificationApiTest extends AbstractControllerTest return Pair.of(user, wsClient); } - protected NotificationRequest findNotificationRequest(NotificationRequestId id) throws Exception { - return doGet("/api/notification/request/" + id, NotificationRequest.class); + protected NotificationRequestInfo findNotificationRequest(NotificationRequestId id) throws Exception { + return doGet("/api/notification/request/" + id, NotificationRequestInfo.class); + } + + protected PageData findNotificationRequests() throws Exception { + PageLink pageLink = new PageLink(10); + return doGetTypedWithPageLink("/api/notification/requests?", new TypeReference>() {}, pageLink); } protected void deleteNotificationRequest(NotificationRequestId id) throws Exception { diff --git a/application/src/test/java/org/thingsboard/server/service/notification/NotificationApiTest.java b/application/src/test/java/org/thingsboard/server/service/notification/NotificationApiTest.java index 4d6864e187..07b490d4a0 100644 --- a/application/src/test/java/org/thingsboard/server/service/notification/NotificationApiTest.java +++ b/application/src/test/java/org/thingsboard/server/service/notification/NotificationApiTest.java @@ -29,6 +29,7 @@ import org.thingsboard.server.common.data.notification.Notification; import org.thingsboard.server.common.data.notification.NotificationDeliveryMethod; import org.thingsboard.server.common.data.notification.NotificationRequest; import org.thingsboard.server.common.data.notification.NotificationRequestConfig; +import org.thingsboard.server.common.data.notification.NotificationRequestInfo; import org.thingsboard.server.common.data.notification.NotificationRequestPreview; import org.thingsboard.server.common.data.notification.NotificationRequestStats; import org.thingsboard.server.common.data.notification.NotificationRequestStatus; @@ -63,6 +64,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; @@ -424,8 +426,8 @@ public class NotificationApiTest extends AbstractNotificationApiTest { notificationRequest.setAdditionalConfig(new NotificationRequestConfig()); NotificationRequestPreview preview = doPost("/api/notification/request/preview", notificationRequest, NotificationRequestPreview.class); - assertThat(preview.getRecipientsCountByTarget().get(target1.getUuidId())).isEqualTo(1); - assertThat(preview.getRecipientsCountByTarget().get(target2.getUuidId())).isEqualTo(customerUsersCount); + assertThat(preview.getRecipientsCountByTarget().get(target1.getName())).isEqualTo(1); + assertThat(preview.getRecipientsCountByTarget().get(target2.getName())).isEqualTo(customerUsersCount); assertThat(preview.getTotalRecipientsCount()).isEqualTo(1 + customerUsersCount); Map processedTemplates = preview.getProcessedTemplates(); @@ -461,6 +463,21 @@ public class NotificationApiTest extends AbstractNotificationApiTest { }); } + @Test + public void testNotificationRequestInfo() throws Exception { + NotificationDeliveryMethod[] deliveryMethods = new NotificationDeliveryMethod[]{ + NotificationDeliveryMethod.PUSH, NotificationDeliveryMethod.EMAIL + }; + NotificationTemplate template = createNotificationTemplate(NotificationType.GENERAL, "Test subject", "Test text", deliveryMethods); + NotificationTarget target = createNotificationTarget(tenantAdminUserId); + NotificationRequest request = submitNotificationRequest(List.of(target.getId()), template.getId(), 0); + + NotificationRequestInfo requestInfo = findNotificationRequests().getData().get(0); + assertThat(requestInfo.getId()).isEqualTo(request.getId()); + assertThat(requestInfo.getTemplateName()).isEqualTo(template.getName()); + assertThat(requestInfo.getDeliveryMethods()).containsOnly(deliveryMethods); + } + @Test public void testNotificationRequestStats() throws Exception { wsClient.subscribeForUnreadNotifications(10); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/notification/NotificationRequestService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/notification/NotificationRequestService.java index cbfbe8a408..6ec226b75e 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/notification/NotificationRequestService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/notification/NotificationRequestService.java @@ -21,6 +21,7 @@ import org.thingsboard.server.common.data.id.NotificationRequestId; import org.thingsboard.server.common.data.id.NotificationRuleId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.notification.NotificationRequest; +import org.thingsboard.server.common.data.notification.NotificationRequestInfo; import org.thingsboard.server.common.data.notification.NotificationRequestStats; import org.thingsboard.server.common.data.notification.NotificationRequestStatus; import org.thingsboard.server.common.data.page.PageData; @@ -34,8 +35,12 @@ public interface NotificationRequestService { NotificationRequest findNotificationRequestById(TenantId tenantId, NotificationRequestId id); + NotificationRequestInfo findNotificationRequestInfoById(TenantId tenantId, NotificationRequestId id); + PageData findNotificationRequestsByTenantIdAndOriginatorType(TenantId tenantId, EntityType originatorType, PageLink pageLink); + PageData findNotificationRequestsInfosByTenantIdAndOriginatorType(TenantId tenantId, EntityType originatorType, PageLink pageLink); + List findNotificationRequestsIdsByStatusAndRuleId(TenantId tenantId, NotificationRequestStatus requestStatus, NotificationRuleId ruleId); List findNotificationRequestsByRuleIdAndOriginatorEntityId(TenantId tenantId, NotificationRuleId ruleId, EntityId originatorEntityId); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/notification/NotificationTargetService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/notification/NotificationTargetService.java index d7eb5a8427..89199333b4 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/notification/NotificationTargetService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/notification/NotificationTargetService.java @@ -34,7 +34,7 @@ public interface NotificationTargetService { PageData findRecipientsForNotificationTarget(TenantId tenantId, CustomerId customerId, NotificationTargetId targetId, PageLink pageLink); - int countRecipientsForNotificationTarget(TenantId tenantId, NotificationTargetId targetId); + int countRecipientsForNotificationTargetConfig(TenantId tenantId, NotificationTargetConfig targetConfig); PageData findRecipientsForNotificationTargetConfig(TenantId tenantId, CustomerId customerId, NotificationTargetConfig targetConfig, PageLink pageLink); diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/notification/NotificationRequest.java b/common/data/src/main/java/org/thingsboard/server/common/data/notification/NotificationRequest.java index 852adbdc60..68be39f93e 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/notification/NotificationRequest.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/notification/NotificationRequest.java @@ -63,6 +63,19 @@ public class NotificationRequest extends BaseData impleme private NotificationRequestStats stats; + public NotificationRequest(NotificationRequest other) { + super(other); + this.tenantId = other.tenantId; + this.targets = other.targets; + this.templateId = other.templateId; + this.info = other.info; + this.additionalConfig = other.additionalConfig; + this.originatorEntityId = other.originatorEntityId; + this.ruleId = other.ruleId; + this.status = other.status; + this.stats = other.stats; + } + @JsonIgnore @Override public String getName() { diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/notification/NotificationRequestInfo.java b/common/data/src/main/java/org/thingsboard/server/common/data/notification/NotificationRequestInfo.java new file mode 100644 index 0000000000..eb2aade288 --- /dev/null +++ b/common/data/src/main/java/org/thingsboard/server/common/data/notification/NotificationRequestInfo.java @@ -0,0 +1,38 @@ +/** + * Copyright © 2016-2022 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.server.common.data.notification; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class NotificationRequestInfo extends NotificationRequest { + + private String templateName; + private List deliveryMethods; + + public NotificationRequestInfo(NotificationRequest request, String templateName, List deliveryMethods) { + super(request); + this.templateName = templateName; + this.deliveryMethods = deliveryMethods; + } + +} diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/notification/NotificationRequestPreview.java b/common/data/src/main/java/org/thingsboard/server/common/data/notification/NotificationRequestPreview.java index c98afe0c36..1cf8c50d97 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/notification/NotificationRequestPreview.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/notification/NotificationRequestPreview.java @@ -19,13 +19,12 @@ import lombok.Data; import org.thingsboard.server.common.data.notification.template.DeliveryMethodNotificationTemplate; import java.util.Map; -import java.util.UUID; @Data public class NotificationRequestPreview { private Map processedTemplates; private int totalRecipientsCount; - private Map recipientsCountByTarget; + private Map recipientsCountByTarget; } diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/NotificationRequestEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/NotificationRequestEntity.java index 9cf631a118..515998b2c7 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/NotificationRequestEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/NotificationRequestEntity.java @@ -103,6 +103,21 @@ public class NotificationRequestEntity extends BaseSqlEntity deliveryMethods = fromJson(templateConfig, NotificationTemplateConfig.class) + .getDeliveryMethodsTemplates().entrySet().stream() + .filter(entry -> entry.getValue().isEnabled()) + .map(Map.Entry::getKey).collect(Collectors.toList()); + return new NotificationRequestInfo(super.toData(), templateName, deliveryMethods); + } + +} diff --git a/dao/src/main/java/org/thingsboard/server/dao/notification/DefaultNotificationRequestService.java b/dao/src/main/java/org/thingsboard/server/dao/notification/DefaultNotificationRequestService.java index e23eef9c14..561f29c190 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/notification/DefaultNotificationRequestService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/notification/DefaultNotificationRequestService.java @@ -24,6 +24,7 @@ import org.thingsboard.server.common.data.id.NotificationRequestId; import org.thingsboard.server.common.data.id.NotificationRuleId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.notification.NotificationRequest; +import org.thingsboard.server.common.data.notification.NotificationRequestInfo; import org.thingsboard.server.common.data.notification.NotificationRequestStats; import org.thingsboard.server.common.data.notification.NotificationRequestStatus; import org.thingsboard.server.common.data.page.PageData; @@ -52,11 +53,21 @@ public class DefaultNotificationRequestService implements NotificationRequestSer return notificationRequestDao.findById(tenantId, id.getId()); } + @Override + public NotificationRequestInfo findNotificationRequestInfoById(TenantId tenantId, NotificationRequestId id) { + return notificationRequestDao.findInfoById(tenantId, id); + } + @Override public PageData findNotificationRequestsByTenantIdAndOriginatorType(TenantId tenantId, EntityType originatorType, PageLink pageLink) { return notificationRequestDao.findByTenantIdAndOriginatorTypeAndPageLink(tenantId, originatorType, pageLink); } + @Override + public PageData findNotificationRequestsInfosByTenantIdAndOriginatorType(TenantId tenantId, EntityType originatorType, PageLink pageLink) { + return notificationRequestDao.findInfosByTenantIdAndOriginatorTypeAndPageLink(tenantId, originatorType, pageLink); + } + @Override public List findNotificationRequestsIdsByStatusAndRuleId(TenantId tenantId, NotificationRequestStatus requestStatus, NotificationRuleId ruleId) { return notificationRequestDao.findIdsByRuleId(tenantId, requestStatus, ruleId); 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 89442e5b46..83ea270a28 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 @@ -70,8 +70,8 @@ public class DefaultNotificationTargetService implements NotificationTargetServi } @Override - public int countRecipientsForNotificationTarget(TenantId tenantId, NotificationTargetId targetId) { - return (int) findRecipientsForNotificationTarget(tenantId, null, targetId, new PageLink(1)).getTotalElements(); + public int countRecipientsForNotificationTargetConfig(TenantId tenantId, NotificationTargetConfig targetConfig) { + return (int) findRecipientsForNotificationTargetConfig(tenantId, null, targetConfig, new PageLink(1)).getTotalElements(); } @Override diff --git a/dao/src/main/java/org/thingsboard/server/dao/notification/NotificationRequestDao.java b/dao/src/main/java/org/thingsboard/server/dao/notification/NotificationRequestDao.java index ee1e6ab683..a32232e47e 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/notification/NotificationRequestDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/notification/NotificationRequestDao.java @@ -23,6 +23,7 @@ import org.thingsboard.server.common.data.id.NotificationTargetId; import org.thingsboard.server.common.data.id.NotificationTemplateId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.notification.NotificationRequest; +import org.thingsboard.server.common.data.notification.NotificationRequestInfo; import org.thingsboard.server.common.data.notification.NotificationRequestStats; import org.thingsboard.server.common.data.notification.NotificationRequestStatus; import org.thingsboard.server.common.data.page.PageData; @@ -35,6 +36,8 @@ public interface NotificationRequestDao extends Dao { PageData findByTenantIdAndOriginatorTypeAndPageLink(TenantId tenantId, EntityType originatorType, PageLink pageLink); + PageData findInfosByTenantIdAndOriginatorTypeAndPageLink(TenantId tenantId, EntityType originatorType, PageLink pageLink); + List findIdsByRuleId(TenantId tenantId, NotificationRequestStatus requestStatus, NotificationRuleId ruleId); List findByRuleIdAndOriginatorEntityId(TenantId tenantId, NotificationRuleId ruleId, EntityId originatorEntityId); @@ -49,4 +52,6 @@ public interface NotificationRequestDao extends Dao { int removeAllByCreatedTimeBefore(long ts); + NotificationRequestInfo findInfoById(TenantId tenantId, NotificationRequestId id); + } 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 2b30d5d8fe..e5403286ee 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 @@ -27,12 +27,14 @@ import org.thingsboard.server.common.data.id.NotificationTargetId; import org.thingsboard.server.common.data.id.NotificationTemplateId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.notification.NotificationRequest; +import org.thingsboard.server.common.data.notification.NotificationRequestInfo; import org.thingsboard.server.common.data.notification.NotificationRequestStats; import org.thingsboard.server.common.data.notification.NotificationRequestStatus; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.dao.DaoUtil; import org.thingsboard.server.dao.model.sql.NotificationRequestEntity; +import org.thingsboard.server.dao.model.sql.NotificationRequestInfoEntity; import org.thingsboard.server.dao.notification.NotificationRequestDao; import org.thingsboard.server.dao.sql.JpaAbstractDao; import org.thingsboard.server.dao.util.SqlDao; @@ -52,7 +54,14 @@ public class JpaNotificationRequestDao extends JpaAbstractDao findByTenantIdAndOriginatorTypeAndPageLink(TenantId tenantId, EntityType originatorType, PageLink pageLink) { - return DaoUtil.toPageData(notificationRequestRepository.findByTenantIdAndOriginatorEntityType(getId(tenantId, true), originatorType, DaoUtil.toPageable(pageLink))); + return DaoUtil.toPageData(notificationRequestRepository.findByTenantIdAndOriginatorEntityType(getId(tenantId, true), + originatorType, DaoUtil.toPageable(pageLink))); + } + + @Override + public PageData findInfosByTenantIdAndOriginatorTypeAndPageLink(TenantId tenantId, EntityType originatorType, PageLink pageLink) { + return DaoUtil.pageToPageData(notificationRequestRepository.findInfosByTenantIdAndOriginatorEntityType(getId(tenantId, true), + originatorType, DaoUtil.toPageable(pageLink))).mapData(NotificationRequestInfoEntity::toData); } @Override @@ -91,6 +100,12 @@ public class JpaNotificationRequestDao extends JpaAbstractDao getEntityClass() { return NotificationRequestEntity.class; diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/notification/NotificationRequestRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/notification/NotificationRequestRepository.java index 27b65c6924..8efbdfb569 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/notification/NotificationRequestRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/notification/NotificationRequestRepository.java @@ -27,6 +27,7 @@ import org.springframework.transaction.annotation.Transactional; import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.notification.NotificationRequestStatus; import org.thingsboard.server.dao.model.sql.NotificationRequestEntity; +import org.thingsboard.server.dao.model.sql.NotificationRequestInfoEntity; import java.util.List; import java.util.UUID; @@ -34,8 +35,19 @@ import java.util.UUID; @Repository public interface NotificationRequestRepository extends JpaRepository { + String REQUEST_INFO_QUERY = "SELECT new org.thingsboard.server.dao.model.sql.NotificationRequestInfoEntity(r, t.name, t.configuration) " + + "FROM NotificationRequestEntity r INNER JOIN NotificationTemplateEntity t ON r.templateId = t.id"; + Page findByTenantIdAndOriginatorEntityType(UUID tenantId, EntityType originatorType, Pageable pageable); + @Query(REQUEST_INFO_QUERY + " WHERE r.tenantId = :tenantId AND r.originatorEntityType = :originatorType") + Page findInfosByTenantIdAndOriginatorEntityType(@Param("tenantId") UUID tenantId, + @Param("originatorType") EntityType originatorType, + Pageable pageable); + + @Query(REQUEST_INFO_QUERY + " WHERE r.id = :id") + NotificationRequestInfoEntity findInfoById(@Param("id") UUID id); + @Query("SELECT r.id FROM NotificationRequestEntity r WHERE r.status = :status AND r.ruleId = :ruleId") List findAllIdsByStatusAndRuleId(@Param("status") NotificationRequestStatus status, @Param("ruleId") UUID ruleId);