From 0d7d9b481bd93008f44c022c5927c98a4d4e4fa2 Mon Sep 17 00:00:00 2001 From: ViacheslavKlimov Date: Tue, 7 May 2024 12:09:36 +0300 Subject: [PATCH] Refactoring for mobile settings api --- .../main/data/upgrade/3.6.4/schema_update.sql | 5 +++-- .../MobileApplicationController.java | 7 ++++--- .../secret}/MobileAppSecretService.java | 2 +- .../secret}/MobileAppSecretServiceImpl.java | 2 +- .../secret}/MobileSecretCaffeineCache.java | 2 +- .../secret}/MobileSecretEvictEvent.java | 2 +- .../secret}/MobileSecretRedisCache.java | 2 +- .../mobile/BaseMobileAppSettingsService.java | 20 ++++++++----------- .../mobile/MobileAppSettingsRedisCache.java | 2 +- .../model/sql/MobileAppSettingsEntity.java | 9 +++++---- .../main/resources/sql/schema-entities.sql | 7 ++++--- 11 files changed, 30 insertions(+), 30 deletions(-) rename application/src/main/java/org/thingsboard/server/service/{qr => mobile/secret}/MobileAppSecretService.java (94%) rename application/src/main/java/org/thingsboard/server/service/{qr => mobile/secret}/MobileAppSecretServiceImpl.java (98%) rename application/src/main/java/org/thingsboard/server/service/{qr => mobile/secret}/MobileSecretCaffeineCache.java (96%) rename application/src/main/java/org/thingsboard/server/service/{qr => mobile/secret}/MobileSecretEvictEvent.java (93%) rename application/src/main/java/org/thingsboard/server/service/{qr => mobile/secret}/MobileSecretRedisCache.java (96%) diff --git a/application/src/main/data/upgrade/3.6.4/schema_update.sql b/application/src/main/data/upgrade/3.6.4/schema_update.sql index 287991ffd1..9a5204379c 100644 --- a/application/src/main/data/upgrade/3.6.4/schema_update.sql +++ b/application/src/main/data/upgrade/3.6.4/schema_update.sql @@ -157,11 +157,12 @@ DELETE FROM asset_profile WHERE name ='TbServiceQueue'; CREATE TABLE IF NOT EXISTS mobile_app_settings ( id uuid NOT NULL CONSTRAINT mobile_app_settings_pkey PRIMARY KEY, created_time bigint NOT NULL, - tenant_id uuid UNIQUE NOT NULL, + tenant_id uuid NOT NULL, use_default_app boolean, android_config VARCHAR(1000), ios_config VARCHAR(1000), - qr_code_config VARCHAR(100000) + qr_code_config VARCHAR(100000), + CONSTRAINT mobile_app_settings_tenant_id_unq_key UNIQUE (tenant_id) ); -- MOBILE APP SETTINGS TABLE CREATE END \ No newline at end of file diff --git a/application/src/main/java/org/thingsboard/server/controller/MobileApplicationController.java b/application/src/main/java/org/thingsboard/server/controller/MobileApplicationController.java index ddd49ab975..626f6f3b0f 100644 --- a/application/src/main/java/org/thingsboard/server/controller/MobileApplicationController.java +++ b/application/src/main/java/org/thingsboard/server/controller/MobileApplicationController.java @@ -39,7 +39,7 @@ import org.thingsboard.server.common.data.security.model.JwtPair; import org.thingsboard.server.config.annotations.ApiOperation; import org.thingsboard.server.dao.mobile.MobileAppSettingsService; import org.thingsboard.server.queue.util.TbCoreComponent; -import org.thingsboard.server.service.qr.MobileAppSecretService; +import org.thingsboard.server.service.mobile.secret.MobileAppSecretService; import org.thingsboard.server.service.security.model.SecurityUser; import org.thingsboard.server.service.security.permission.Operation; import org.thingsboard.server.service.security.permission.Resource; @@ -84,7 +84,7 @@ public class MobileApplicationController extends BaseController { public static final String ANDROID_APPLICATION_STORE_LINK = "https://play.google.com/store/apps/details?id=org.thingsboard.demo.app"; public static final String APPLE_APPLICATION_STORE_LINK = "https://apps.apple.com/us/app/thingsboard-live/id1594355695"; public static final String SECRET = "secret"; - public static final String SECRET_PARAM_DESCRIPTION = "A string value representing short-live secret key"; + public static final String SECRET_PARAM_DESCRIPTION = "A string value representing short-lived secret key"; public static final String DEFAULT_APP_DOMAIN = "demo.thingsboard.io"; public static final String DEEP_LINK_PATTERN = "https://%s/api/noauth/qr?secret=%s&ttl=%s"; @@ -164,7 +164,7 @@ public class MobileApplicationController extends BaseController { notes = "Returns the token of the User based on the provided secret key.") @GetMapping(value = "/api/noauth/qr/{secret}") public JwtPair getUserTokenByMobileSecret(@Parameter(description = SECRET_PARAM_DESCRIPTION) - @PathVariable(SECRET) String secret) throws ThingsboardException { + @PathVariable(SECRET) String secret) throws ThingsboardException { checkParameter(SECRET, secret); return mobileAppSecretService.getJwtPair(secret); } @@ -184,4 +184,5 @@ public class MobileApplicationController extends BaseController { .build(); } } + } diff --git a/application/src/main/java/org/thingsboard/server/service/qr/MobileAppSecretService.java b/application/src/main/java/org/thingsboard/server/service/mobile/secret/MobileAppSecretService.java similarity index 94% rename from application/src/main/java/org/thingsboard/server/service/qr/MobileAppSecretService.java rename to application/src/main/java/org/thingsboard/server/service/mobile/secret/MobileAppSecretService.java index 943fd45c54..83c1b55c6e 100644 --- a/application/src/main/java/org/thingsboard/server/service/qr/MobileAppSecretService.java +++ b/application/src/main/java/org/thingsboard/server/service/mobile/secret/MobileAppSecretService.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.thingsboard.server.service.qr; +package org.thingsboard.server.service.mobile.secret; import org.thingsboard.server.common.data.exception.ThingsboardException; import org.thingsboard.server.common.data.security.model.JwtPair; diff --git a/application/src/main/java/org/thingsboard/server/service/qr/MobileAppSecretServiceImpl.java b/application/src/main/java/org/thingsboard/server/service/mobile/secret/MobileAppSecretServiceImpl.java similarity index 98% rename from application/src/main/java/org/thingsboard/server/service/qr/MobileAppSecretServiceImpl.java rename to application/src/main/java/org/thingsboard/server/service/mobile/secret/MobileAppSecretServiceImpl.java index f8d8629d10..bef31622ff 100644 --- a/application/src/main/java/org/thingsboard/server/service/qr/MobileAppSecretServiceImpl.java +++ b/application/src/main/java/org/thingsboard/server/service/mobile/secret/MobileAppSecretServiceImpl.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.thingsboard.server.service.qr; +package org.thingsboard.server.service.mobile.secret; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/application/src/main/java/org/thingsboard/server/service/qr/MobileSecretCaffeineCache.java b/application/src/main/java/org/thingsboard/server/service/mobile/secret/MobileSecretCaffeineCache.java similarity index 96% rename from application/src/main/java/org/thingsboard/server/service/qr/MobileSecretCaffeineCache.java rename to application/src/main/java/org/thingsboard/server/service/mobile/secret/MobileSecretCaffeineCache.java index 916d58afd7..ce21041d27 100644 --- a/application/src/main/java/org/thingsboard/server/service/qr/MobileSecretCaffeineCache.java +++ b/application/src/main/java/org/thingsboard/server/service/mobile/secret/MobileSecretCaffeineCache.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.thingsboard.server.service.qr; +package org.thingsboard.server.service.mobile.secret; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.cache.CacheManager; diff --git a/application/src/main/java/org/thingsboard/server/service/qr/MobileSecretEvictEvent.java b/application/src/main/java/org/thingsboard/server/service/mobile/secret/MobileSecretEvictEvent.java similarity index 93% rename from application/src/main/java/org/thingsboard/server/service/qr/MobileSecretEvictEvent.java rename to application/src/main/java/org/thingsboard/server/service/mobile/secret/MobileSecretEvictEvent.java index 1f97e9ab07..b015291d78 100644 --- a/application/src/main/java/org/thingsboard/server/service/qr/MobileSecretEvictEvent.java +++ b/application/src/main/java/org/thingsboard/server/service/mobile/secret/MobileSecretEvictEvent.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.thingsboard.server.service.qr; +package org.thingsboard.server.service.mobile.secret; import lombok.Data; diff --git a/application/src/main/java/org/thingsboard/server/service/qr/MobileSecretRedisCache.java b/application/src/main/java/org/thingsboard/server/service/mobile/secret/MobileSecretRedisCache.java similarity index 96% rename from application/src/main/java/org/thingsboard/server/service/qr/MobileSecretRedisCache.java rename to application/src/main/java/org/thingsboard/server/service/mobile/secret/MobileSecretRedisCache.java index d29a104ae9..81fa8672f8 100644 --- a/application/src/main/java/org/thingsboard/server/service/qr/MobileSecretRedisCache.java +++ b/application/src/main/java/org/thingsboard/server/service/mobile/secret/MobileSecretRedisCache.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.thingsboard.server.service.qr; +package org.thingsboard.server.service.mobile.secret; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.data.redis.connection.RedisConnectionFactory; diff --git a/dao/src/main/java/org/thingsboard/server/dao/mobile/BaseMobileAppSettingsService.java b/dao/src/main/java/org/thingsboard/server/dao/mobile/BaseMobileAppSettingsService.java index 86de46fed1..4e8a2cd503 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/mobile/BaseMobileAppSettingsService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/mobile/BaseMobileAppSettingsService.java @@ -17,7 +17,6 @@ package org.thingsboard.server.dao.mobile; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.hibernate.exception.ConstraintViolationException; import org.springframework.stereotype.Service; import org.springframework.transaction.event.TransactionalEventListener; import org.thingsboard.server.common.data.id.TenantId; @@ -28,9 +27,10 @@ import org.thingsboard.server.common.data.mobile.IosConfig; import org.thingsboard.server.common.data.mobile.MobileAppSettings; import org.thingsboard.server.common.data.mobile.QRCodeConfig; import org.thingsboard.server.dao.entity.AbstractCachedEntityService; -import org.thingsboard.server.dao.exception.DataValidationException; import org.thingsboard.server.dao.service.DataValidator; +import java.util.Map; + import static org.thingsboard.server.dao.service.Validator.validateId; @Service @@ -51,16 +51,12 @@ public class BaseMobileAppSettingsService extends AbstractCachedEntityService { private JsonNode qrCodeConfig; public MobileAppSettingsEntity(MobileAppSettings mobileAppSettings) { - if (mobileAppSettings.getId() != null) { - this.setId(mobileAppSettings.getId().getId()); - } + this.setId(mobileAppSettings.getUuidId()); this.setCreatedTime(mobileAppSettings.getCreatedTime()); this.tenantId = mobileAppSettings.getTenantId().getId(); this.useDefaultApp = mobileAppSettings.isUseDefaultApp(); this.androidConfig = toJson(mobileAppSettings.getAndroidConfig()); this.iosConfig = toJson(mobileAppSettings.getIosConfig()); this.qrCodeConfig = toJson(mobileAppSettings.getQrCodeConfig()); - } + } @Override public MobileAppSettings toData() { @@ -81,4 +81,5 @@ public class MobileAppSettingsEntity extends BaseSqlEntity { mobileAppSettings.setQrCodeConfig(fromJson(qrCodeConfig, QRCodeConfig.class)); return mobileAppSettings; } + } diff --git a/dao/src/main/resources/sql/schema-entities.sql b/dao/src/main/resources/sql/schema-entities.sql index 3a96580011..f2978b7f4a 100644 --- a/dao/src/main/resources/sql/schema-entities.sql +++ b/dao/src/main/resources/sql/schema-entities.sql @@ -900,9 +900,10 @@ CREATE TABLE IF NOT EXISTS queue_stats ( CREATE TABLE IF NOT EXISTS mobile_app_settings ( id uuid NOT NULL CONSTRAINT mobile_app_settings_pkey PRIMARY KEY, created_time bigint NOT NULL, - tenant_id uuid UNIQUE NOT NULL, + tenant_id uuid NOT NULL, use_default_app boolean, android_config VARCHAR(1000), ios_config VARCHAR(1000), - qr_code_config VARCHAR(100000) -); \ No newline at end of file + qr_code_config VARCHAR(100000), + CONSTRAINT mobile_app_settings_tenant_id_unq_key UNIQUE (tenant_id) +);