From 1382c49881d70b1fc66a171f462ffa6346b92f40 Mon Sep 17 00:00:00 2001 From: ViacheslavKlimov Date: Mon, 20 Mar 2023 14:06:53 +0200 Subject: [PATCH] Endpoint to find tenant profiles by ids --- .../controller/TenantProfileController.java | 15 +++++++++++++++ .../server/dao/tenant/TenantProfileService.java | 5 +++++ .../DefaultNotificationSettingsService.java | 2 -- .../DefaultNotificationTargetService.java | 2 +- .../dao/sql/tenant/JpaTenantProfileDao.java | 8 ++++++++ .../dao/sql/tenant/TenantProfileRepository.java | 3 +++ .../server/dao/tenant/TenantProfileDao.java | 3 +++ .../dao/tenant/TenantProfileServiceImpl.java | 6 ++++++ 8 files changed, 41 insertions(+), 3 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/controller/TenantProfileController.java b/application/src/main/java/org/thingsboard/server/controller/TenantProfileController.java index 6c46fc0fdf..a28842a6ee 100644 --- a/application/src/main/java/org/thingsboard/server/controller/TenantProfileController.java +++ b/application/src/main/java/org/thingsboard/server/controller/TenantProfileController.java @@ -21,6 +21,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -32,14 +34,19 @@ import org.springframework.web.bind.annotation.RestController; import org.thingsboard.server.common.data.EntityInfo; import org.thingsboard.server.common.data.TenantProfile; import org.thingsboard.server.common.data.exception.ThingsboardException; +import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.TenantProfileId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.queue.util.TbCoreComponent; import org.thingsboard.server.service.entitiy.tenant.profile.TbTenantProfileService; +import org.thingsboard.server.service.security.model.SecurityUser; import org.thingsboard.server.service.security.permission.Operation; import org.thingsboard.server.service.security.permission.Resource; +import java.util.List; +import java.util.UUID; + import static org.thingsboard.server.controller.ControllerConstants.MARKDOWN_CODE_BLOCK_END; import static org.thingsboard.server.controller.ControllerConstants.MARKDOWN_CODE_BLOCK_START; import static org.thingsboard.server.controller.ControllerConstants.PAGE_DATA_PARAMETERS; @@ -268,4 +275,12 @@ public class TenantProfileController extends BaseController { throw handleException(e); } } + + @GetMapping(value = "/tenantProfiles", params = {"ids"}) + @PreAuthorize("hasAuthority('SYS_ADMIN')") + public List getTenantProfilesByIds(@RequestParam("ids") UUID[] ids) { + return tenantProfileService.findTenantProfilesByIds(TenantId.SYS_TENANT_ID, ids); + } + + } diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileService.java index 02345e77fd..d1b5bcc1cb 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileService.java @@ -23,6 +23,9 @@ import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.dao.entity.EntityDaoService; +import java.util.List; +import java.util.UUID; + public interface TenantProfileService extends EntityDaoService { TenantProfile findTenantProfileById(TenantId tenantId, TenantProfileId tenantProfileId); @@ -47,4 +50,6 @@ public interface TenantProfileService extends EntityDaoService { void deleteTenantProfiles(TenantId tenantId); + List findTenantProfilesByIds(TenantId tenantId, UUID[] ids); + } diff --git a/dao/src/main/java/org/thingsboard/server/dao/notification/DefaultNotificationSettingsService.java b/dao/src/main/java/org/thingsboard/server/dao/notification/DefaultNotificationSettingsService.java index 80b56da689..b6d976e57a 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/notification/DefaultNotificationSettingsService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/notification/DefaultNotificationSettingsService.java @@ -101,8 +101,6 @@ public class DefaultNotificationSettingsService implements NotificationSettingsS }); } - // TODO: validate that wasn't already created (catch exception unique name) - // FIXME: user that does not have access to some entity, gets notifications about this entity - check permissions? @Transactional(propagation = Propagation.NOT_SUPPORTED) // so that parent transaction is not aborted on method failure @Override public void createDefaultNotificationConfigs(TenantId tenantId) { 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 01180c6ee4..fe85e4c6fc 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 @@ -147,7 +147,7 @@ public class DefaultNotificationTargetService extends AbstractEntityService impl if (customerId != null && !customerId.isNullUid()) { return userService.findCustomerUsers(tenantId, customerId, pageLink); } else { - return userService.findTenantAdmins(tenantId, pageLink); // TODO: or should we send to all users within tenant? + return userService.findTenantAdmins(tenantId, pageLink); } } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/tenant/JpaTenantProfileDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/tenant/JpaTenantProfileDao.java index 147d065e8b..6ba2337f5f 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/tenant/JpaTenantProfileDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/tenant/JpaTenantProfileDao.java @@ -29,6 +29,8 @@ import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; import org.thingsboard.server.dao.tenant.TenantProfileDao; import org.thingsboard.server.dao.util.SqlDao; +import java.util.Arrays; +import java.util.List; import java.util.Objects; import java.util.UUID; @@ -79,4 +81,10 @@ public class JpaTenantProfileDao extends JpaAbstractSearchTextDao findTenantProfilesByIds(TenantId tenantId, UUID[] ids) { + return DaoUtil.convertDataList(tenantProfileRepository.findByIdIn(Arrays.asList(ids))); + } + } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/tenant/TenantProfileRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/tenant/TenantProfileRepository.java index 21d44daa59..74cc24be86 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/tenant/TenantProfileRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/tenant/TenantProfileRepository.java @@ -23,6 +23,7 @@ import org.springframework.data.repository.query.Param; import org.thingsboard.server.common.data.EntityInfo; import org.thingsboard.server.dao.model.sql.TenantProfileEntity; +import java.util.List; import java.util.UUID; public interface TenantProfileRepository extends JpaRepository { @@ -52,4 +53,6 @@ public interface TenantProfileRepository extends JpaRepository findByIdIn(List ids); + } diff --git a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileDao.java b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileDao.java index 0875c7664e..d6353b213c 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileDao.java @@ -22,6 +22,7 @@ import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.dao.Dao; +import java.util.List; import java.util.UUID; public interface TenantProfileDao extends Dao { @@ -38,4 +39,6 @@ public interface TenantProfileDao extends Dao { EntityInfo findDefaultTenantProfileInfo(TenantId tenantId); + List findTenantProfilesByIds(TenantId tenantId, UUID[] ids); + } diff --git a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileServiceImpl.java index b52bab1d3a..4262aca2e4 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileServiceImpl.java @@ -40,6 +40,7 @@ import org.thingsboard.server.dao.service.Validator; import java.util.ArrayList; import java.util.List; import java.util.Optional; +import java.util.UUID; import static org.thingsboard.server.dao.service.Validator.validateId; @@ -202,6 +203,11 @@ public class TenantProfileServiceImpl extends AbstractCachedEntityService findTenantProfilesByIds(TenantId tenantId, UUID[] ids) { + return tenantProfileDao.findTenantProfilesByIds(tenantId, ids); + } + @Override public void deleteTenantProfiles(TenantId tenantId) { log.trace("Executing deleteTenantProfiles");