From 2d146c2416cc6ad27112c0edf2b7df3584b1fb60 Mon Sep 17 00:00:00 2001 From: Volodymyr Babak Date: Fri, 9 Jun 2017 19:52:26 +0300 Subject: [PATCH] Added KV entity for postgres --- .../dao/model/sql/AttributeKvEntity.java | 56 +++++++++++++++++++ .../model/sql/AttributesKvCompositeKey.java | 14 +++++ .../dao/model/sql/RelationCompositeKey.java | 2 + .../sql/attributes/AttributeKvRepository.java | 10 ++++ ...ttributesDao.java => JpaAttributeDao.java} | 6 +- dao/src/main/resources/postgres/schema.sql | 14 +++++ 6 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 dao/src/main/java/org/thingsboard/server/dao/model/sql/AttributeKvEntity.java create mode 100644 dao/src/main/java/org/thingsboard/server/dao/model/sql/AttributesKvCompositeKey.java create mode 100644 dao/src/main/java/org/thingsboard/server/dao/sql/attributes/AttributeKvRepository.java rename dao/src/main/java/org/thingsboard/server/dao/sql/attributes/{JpaAttributesDao.java => JpaAttributeDao.java} (91%) diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/AttributeKvEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AttributeKvEntity.java new file mode 100644 index 0000000000..6637ecbf3a --- /dev/null +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AttributeKvEntity.java @@ -0,0 +1,56 @@ +package org.thingsboard.server.dao.model.sql; + +import lombok.Data; +import org.thingsboard.server.common.data.kv.AttributeKvEntry; +import org.thingsboard.server.dao.model.ToData; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.util.UUID; + +import static org.thingsboard.server.dao.model.ModelConstants.*; + +@Data +@Entity +@Table(name = "attributes_kv") +public class AttributeKvEntity implements ToData { + + @Id + @Column(name = ENTITY_TYPE_COLUMN) + private String entityType; + + @Id + @Column(name = ENTITY_ID_COLUMN) + private UUID entityId; + + @Id + @Column(name = ATTRIBUTE_TYPE_COLUMN) + private String attributeType; + + @Id + @Column(name = ATTRIBUTE_KEY_COLUMN) + private String attributeKey; + + @Column(name = BOOLEAN_VALUE_COLUMN) + private Boolean booleanValue; + + @Column(name = STRING_VALUE_COLUMN) + private String strValue; + + @Column(name = LONG_VALUE_COLUMN) + private Long longValue; + + @Column(name = DOUBLE_VALUE_COLUMN) + private Double doubleValue; + + @Column(name = LAST_UPDATE_TS_COLUMN) + private Long lastUpdateTs; + + @Override + public AttributeKvEntry toData() { + // TODO - add implementation + return null; + } +} diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/AttributesKvCompositeKey.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AttributesKvCompositeKey.java new file mode 100644 index 0000000000..a2d5513b9d --- /dev/null +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AttributesKvCompositeKey.java @@ -0,0 +1,14 @@ +package org.thingsboard.server.dao.model.sql; + +import lombok.Data; + +import java.io.Serializable; +import java.util.UUID; + +@Data +public class AttributesKvCompositeKey implements Serializable { + private String entityType; + private UUID entityId; + private String attributeType; + private String attributeKey; +} diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/RelationCompositeKey.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/RelationCompositeKey.java index 4af848c2e6..3e13ff5e6f 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/RelationCompositeKey.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/RelationCompositeKey.java @@ -16,12 +16,14 @@ package org.thingsboard.server.dao.model.sql; import lombok.AllArgsConstructor; +import lombok.Data; import org.thingsboard.server.common.data.relation.EntityRelation; import java.io.Serializable; import java.util.UUID; @AllArgsConstructor +@Data public class RelationCompositeKey implements Serializable { private UUID fromId; diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/attributes/AttributeKvRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/attributes/AttributeKvRepository.java new file mode 100644 index 0000000000..27e366e096 --- /dev/null +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/attributes/AttributeKvRepository.java @@ -0,0 +1,10 @@ +package org.thingsboard.server.dao.sql.attributes; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.data.repository.CrudRepository; +import org.thingsboard.server.dao.model.sql.AttributeKvEntity; +import org.thingsboard.server.dao.model.sql.AttributesKvCompositeKey; + +@ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true") +public interface AttributeKvRepository extends CrudRepository { +} diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/attributes/JpaAttributesDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/attributes/JpaAttributeDao.java similarity index 91% rename from dao/src/main/java/org/thingsboard/server/dao/sql/attributes/JpaAttributesDao.java rename to dao/src/main/java/org/thingsboard/server/dao/sql/attributes/JpaAttributeDao.java index d3a111fa9e..eb02acafcd 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/attributes/JpaAttributesDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/attributes/JpaAttributeDao.java @@ -17,6 +17,7 @@ package org.thingsboard.server.dao.sql.attributes; import com.google.common.util.concurrent.ListenableFuture; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.id.EntityId; @@ -30,7 +31,10 @@ import java.util.Optional; @Component @Slf4j @ConditionalOnProperty(prefix = "sql", value = "enabled", havingValue = "true") -public class JpaAttributesDao implements AttributesDao { +public class JpaAttributeDao implements AttributesDao { + + @Autowired + private AttributeKvRepository attributeKvRepository; @Override public ListenableFuture> find(EntityId entityId, String attributeType, String attributeKey) { diff --git a/dao/src/main/resources/postgres/schema.sql b/dao/src/main/resources/postgres/schema.sql index afaf936da6..684ec00956 100644 --- a/dao/src/main/resources/postgres/schema.sql +++ b/dao/src/main/resources/postgres/schema.sql @@ -74,6 +74,20 @@ CREATE TABLE IF NOT EXISTS asset ( ); ALTER TABLE asset OWNER TO postgres; +CREATE TABLE IF NOT EXISTS attributes_kv ( + entity_type character varying(255), + entity_id uuid, + attribute_type character varying(255), + attribute_key character varying(255), + bool_v boolean, + str_v character varying(255), + long_v bigint, + dbl_v double precision, + last_update_ts bigint, + CONSTRAINT attributes_kv_unq_key UNIQUE (entity_type, entity_id, attribute_type, attribute_key) +); +ALTER TABLE relation OWNER TO postgres; + CREATE TABLE IF NOT EXISTS component_descriptor ( id uuid NOT NULL CONSTRAINT component_descriptor_pkey PRIMARY KEY, actions character varying(255),