diff --git a/dao/src/main/java/org/thingsboard/server/dao/Dao.java b/dao/src/main/java/org/thingsboard/server/dao/Dao.java index a5d4dfd9d1..830dc2855a 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/Dao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/Dao.java @@ -30,6 +30,10 @@ public interface Dao { ListenableFuture findByIdAsync(TenantId tenantId, UUID id); + boolean existsById(TenantId tenantId, UUID id); + + ListenableFuture existsByIdAsync(TenantId tenantId, UUID id); + T save(TenantId tenantId, T t); boolean removeById(TenantId tenantId, UUID id); diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/JpaAbstractDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/JpaAbstractDao.java index 18852cbf11..80629a2f4e 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/JpaAbstractDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/JpaAbstractDao.java @@ -80,6 +80,18 @@ public abstract class JpaAbstractDao, D> return service.submit(() -> DaoUtil.getData(getCrudRepository().findById(key))); } + @Override + public boolean existsById(TenantId tenantId, UUID key) { + log.debug("Exists by key {}", key); + return getCrudRepository().existsById(key); + } + + @Override + public ListenableFuture existsByIdAsync(TenantId tenantId, UUID key) { + log.debug("Exists by key async {}", key); + return service.submit(() -> getCrudRepository().existsById(key)); + } + @Override @Transactional public boolean removeById(TenantId tenantId, UUID id) { diff --git a/dao/src/test/java/org/thingsboard/server/dao/sql/tenant/JpaTenantDaoTest.java b/dao/src/test/java/org/thingsboard/server/dao/sql/tenant/JpaTenantDaoTest.java index 3b31be7a04..8ee7296153 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/sql/tenant/JpaTenantDaoTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/sql/tenant/JpaTenantDaoTest.java @@ -27,8 +27,9 @@ import org.thingsboard.server.dao.AbstractJpaDaoTest; import org.thingsboard.server.dao.service.AbstractServiceTest; import org.thingsboard.server.dao.tenant.TenantDao; -import java.util.List; +import java.util.UUID; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; /** @@ -75,4 +76,19 @@ public class JpaTenantDaoTest extends AbstractJpaDaoTest { tenantDao.save(AbstractServiceTest.SYSTEM_TENANT_ID, tenant); } + @Test + @DatabaseSetup("classpath:dbunit/empty_dataset.xml") + public void testIsExistsTenantById() { + final UUID uuid = Uuids.timeBased(); + final TenantId tenantId = new TenantId(uuid); + assertThat(tenantDao.existsById(tenantId, uuid)).as("Is tenant exists before save").isFalse(); + + final Tenant tenant = new Tenant(); + tenant.setId(tenantId); + tenant.setTitle("Tenant " + uuid); + tenantDao.save(AbstractServiceTest.SYSTEM_TENANT_ID, tenant); + + assertThat(tenantDao.existsById(tenantId, uuid)).as("Is tenant exists after save").isTrue(); + } + }