Browse Source

refactoring due to comments

pull/8825/head
YevhenBondarenko 3 years ago
parent
commit
ffa00bd94a
  1. 8
      application/src/main/data/upgrade/3.5.1/schema_update.sql
  2. 11
      application/src/test/java/org/thingsboard/server/controller/AlarmControllerTest.java
  3. 7
      common/data/src/main/java/org/thingsboard/server/common/data/page/PageData.java
  4. 14
      dao/src/main/java/org/thingsboard/server/dao/DaoUtil.java
  5. 1
      dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java
  6. 2
      dao/src/main/java/org/thingsboard/server/dao/sql/alarm/AlarmRepository.java
  7. 2
      dao/src/main/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDao.java
  8. 6
      dao/src/main/resources/sql/schema-entities-idx.sql
  9. 2
      dao/src/main/resources/sql/schema-entities.sql

8
application/src/main/data/upgrade/3.5.1/schema_update.sql

@ -131,7 +131,13 @@ CREATE TABLE IF NOT EXISTS alarm_types (
tenant_id uuid NOT NULL,
type varchar(255) NOT NULL,
CONSTRAINT tenant_id_type_unq_key UNIQUE (tenant_id, type)
);
);
-- Activate the pg_trgm module for trigram-based searches.
CREATE EXTENSION IF NOT EXISTS pg_trgm;
-- Create a GIN index on the `type` column. (for optimizing `ILIKE` in search query)
CREATE INDEX IF NOT EXISTS idx_gin_alarm_types_type ON alarm_types USING GIN(type gin_trgm_ops);
INSERT INTO alarm_types (tenant_id, type) SELECT DISTINCT tenant_id, type FROM alarm ON CONFLICT (tenant_id, type) DO NOTHING;

11
application/src/test/java/org/thingsboard/server/controller/AlarmControllerTest.java

@ -801,7 +801,7 @@ public class AlarmControllerTest extends AbstractControllerTest {
}
@Test
public void testGetAlarmTypes() throws Exception {
public void testSaveAlarmTypes() throws Exception {
loginTenantAdmin();
List<String> types = new ArrayList<>();
@ -810,6 +810,15 @@ public class AlarmControllerTest extends AbstractControllerTest {
types.add(createAlarm(TEST_ALARM_TYPE + i).getType());
}
Device device = new Device();
device.setName("Test device 2");
device.setCustomerId(customerId);
customerDevice = doPost("/api/device", device, Device.class);
for (int i = 1; i < 10; i++) {
createAlarm(TEST_ALARM_TYPE + i);
}
List<String> foundTypes = doGetTyped("/api/alarm/types?pageSize=1024&page=0", new TypeReference<PageData<EntitySubtype>>() {
})
.getData()

7
common/data/src/main/java/org/thingsboard/server/common/data/page/PageData.java

@ -29,6 +29,8 @@ import java.util.stream.Collectors;
@ApiModel
public class PageData<T> implements Serializable {
public static final PageData EMPTY_PAGE_DATA = new PageData<>();
private final List<T> data;
private final int totalPages;
private final long totalElements;
@ -49,6 +51,11 @@ public class PageData<T> implements Serializable {
this.hasNext = hasNext;
}
@SuppressWarnings("unchecked")
public static <T> PageData<T> emptyPageData() {
return (PageData<T>) EMPTY_PAGE_DATA;
}
@ApiModelProperty(position = 1, value = "Array of the entities", accessMode = ApiModelProperty.AccessMode.READ_ONLY)
public List<T> getData() {
return data;

14
dao/src/main/java/org/thingsboard/server/dao/DaoUtil.java

@ -18,6 +18,7 @@ package org.thingsboard.server.dao;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.util.CollectionUtils;
import org.thingsboard.server.common.data.EntitySubtype;
import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.id.TenantId;
@ -147,12 +148,13 @@ public abstract class DaoUtil {
}
public static List<EntitySubtype> convertTenantEntityTypesToDto(UUID tenantId, EntityType entityType, List<String> types) {
List<EntitySubtype> list = Collections.emptyList();
if (types != null && !types.isEmpty()) {
list = new ArrayList<>();
for (String type : types) {
list.add(new EntitySubtype(TenantId.fromUUID(tenantId), entityType, type));
}
if (CollectionUtils.isEmpty(types)) {
return Collections.emptyList();
}
List<EntitySubtype> list = new ArrayList<>(types.size());
for (String type : types) {
list.add(new EntitySubtype(TenantId.fromUUID(tenantId), entityType, type));
}
return list;
}

1
dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java

@ -241,6 +241,7 @@ public class BaseAlarmService extends AbstractCachedEntityService<TenantId, Page
}
@Override
@Transactional
public void delAlarmTypes(TenantId tenantId, Set<String> types) {
if (!types.isEmpty() && alarmDao.removeAlarmTypes(tenantId.getId(), types)) {
publishEvictEvent(new AlarmTypesCacheEvictEvent(tenantId));

2
dao/src/main/java/org/thingsboard/server/dao/sql/alarm/AlarmRepository.java

@ -348,7 +348,7 @@ public interface AlarmRepository extends JpaRepository<AlarmEntity, UUID> {
@Query(value = "SELECT unassign_alarm(:t_id, :a_id, :a_ts)", nativeQuery = true)
String unassignAlarm(@Param("t_id") UUID tenantId, @Param("a_id") UUID alarmId, @Param("a_ts") long unassignTime);
@Query(value = "SELECT at.type FROM alarm_types AS at WHERE at.tenant_id = :tenantId AND LOWER(at.type) LIKE LOWER(CONCAT('%', :searchText, '%'))", nativeQuery = true)
@Query(value = "SELECT at.type FROM alarm_types AS at WHERE at.tenant_id = :tenantId AND at.type ILIKE CONCAT('%', :searchText, '%')", nativeQuery = true)
Page<String> findTenantAlarmTypes(@Param("tenantId") UUID tenantId, @Param("searchText") String searchText, Pageable pageable);
@Transactional

2
dao/src/main/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDao.java

@ -375,7 +375,7 @@ public class JpaAlarmDao extends JpaAbstractDao<AlarmEntity, Alarm> implements A
public PageData<EntitySubtype> findTenantAlarmTypes(UUID tenantId, PageLink pageLink) {
Page<String> page = alarmRepository.findTenantAlarmTypes(tenantId, Objects.toString(pageLink.getTextSearch(), ""), toPageable(pageLink));
if (page.isEmpty()) {
return new PageData<>();
return PageData.emptyPageData();
}
List<EntitySubtype> data = convertTenantEntityTypesToDto(tenantId, EntityType.ALARM, page.getContent());

6
dao/src/main/resources/sql/schema-entities-idx.sql

@ -115,3 +115,9 @@ CREATE INDEX IF NOT EXISTS idx_notification_id ON notification(id);
CREATE INDEX IF NOT EXISTS idx_notification_recipient_id_created_time ON notification(recipient_id, created_time DESC);
CREATE INDEX IF NOT EXISTS idx_notification_recipient_id_unread ON notification(recipient_id) WHERE status <> 'READ';
-- Activate the pg_trgm module for trigram-based searches.
CREATE EXTENSION IF NOT EXISTS pg_trgm;
-- Create a GIN index on the `type` column. (for optimizing `ILIKE` in search query)
CREATE INDEX IF NOT EXISTS idx_gin_alarm_types_type ON alarm_types USING GIN(type gin_trgm_ops);

2
dao/src/main/resources/sql/schema-entities.sql

@ -25,7 +25,7 @@ CREATE OR REPLACE PROCEDURE insert_tb_schema_settings()
$$
BEGIN
IF (SELECT COUNT(*) FROM tb_schema_settings) = 0 THEN
INSERT INTO tb_schema_settings (schema_version) VALUES (3003000);
INSERT INTO tb_schema_settings (schema_version) VALUES (3005002);
END IF;
END;
$$;

Loading…
Cancel
Save