@ -14,198 +14,3 @@
-- limitations under the License.
- -
ALTER TABLE user_credentials ADD COLUMN IF NOT EXISTS last_login_ts BIGINT ;
UPDATE user_credentials c SET last_login_ts = ( SELECT ( additional_info : : json - > > ' lastLoginTs ' ) : : bigint FROM tb_user u WHERE u . id = c . user_id )
WHERE last_login_ts IS NULL ;
ALTER TABLE user_credentials ADD COLUMN IF NOT EXISTS failed_login_attempts INT ;
UPDATE user_credentials c SET failed_login_attempts = ( SELECT ( additional_info : : json - > > ' failedLoginAttempts ' ) : : int FROM tb_user u WHERE u . id = c . user_id )
WHERE failed_login_attempts IS NULL ;
UPDATE tb_user SET additional_info = ( additional_info : : jsonb - ' lastLoginTs ' - ' failedLoginAttempts ' - ' userCredentialsEnabled ' ) : : text
WHERE additional_info IS NOT NULL AND additional_info ! = ' null ' AND jsonb_typeof ( additional_info : : jsonb ) = ' object ' ;
-- UPDATE RULE NODE DEBUG MODE TO DEBUG STRATEGY START
ALTER TABLE rule_node ADD COLUMN IF NOT EXISTS debug_settings varchar ( 1024 ) DEFAULT null ;
DO
$ $
BEGIN
IF EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_name = ' rule_node ' AND column_name = ' debug_mode ' )
THEN
UPDATE rule_node SET debug_settings = ' {"failuresEnabled": true, "allEnabledUntil": ' | | cast ( ( extract ( epoch from now ( ) ) + 900 ) * 1000 as bigint ) | | ' } ' WHERE debug_mode = true ; -- 15 minutes according to thingsboard.yml default settings.
ALTER TABLE rule_node DROP COLUMN debug_mode ;
END IF ;
END
$ $ ;
-- UPDATE RULE NODE DEBUG MODE TO DEBUG STRATEGY END
-- CREATE MOBILE APP BUNDLES FROM EXISTING APPS
CREATE TABLE IF NOT EXISTS mobile_app_bundle (
id uuid NOT NULL CONSTRAINT mobile_app_bundle_pkey PRIMARY KEY ,
created_time bigint NOT NULL ,
tenant_id uuid ,
title varchar ( 255 ) ,
description varchar ( 1024 ) ,
android_app_id uuid UNIQUE ,
ios_app_id uuid UNIQUE ,
layout_config varchar ( 16384 ) ,
oauth2_enabled boolean ,
CONSTRAINT fk_android_app_id FOREIGN KEY ( android_app_id ) REFERENCES mobile_app ( id ) ON DELETE SET NULL ,
CONSTRAINT fk_ios_app_id FOREIGN KEY ( ios_app_id ) REFERENCES mobile_app ( id ) ON DELETE SET NULL
) ;
CREATE INDEX IF NOT EXISTS mobile_app_bundle_tenant_id ON mobile_app_bundle ( tenant_id ) ;
ALTER TABLE mobile_app ADD COLUMN IF NOT EXISTS platform_type varchar ( 32 ) ,
ADD COLUMN IF NOT EXISTS status varchar ( 32 ) ,
ADD COLUMN IF NOT EXISTS version_info varchar ( 100000 ) ,
ADD COLUMN IF NOT EXISTS store_info varchar ( 16384 ) ,
DROP CONSTRAINT IF EXISTS mobile_app_pkg_name_key ,
DROP CONSTRAINT IF EXISTS mobile_app_unq_key ;
-- rename mobile_app_oauth2_client to mobile_app_bundle_oauth2_client
DO
$ $
BEGIN
-- in case of running the upgrade script a second time
IF EXISTS ( SELECT 1 FROM information_schema . tables WHERE table_name = ' mobile_app_oauth2_client ' ) THEN
ALTER TABLE mobile_app_oauth2_client RENAME TO mobile_app_bundle_oauth2_client ;
ALTER TABLE mobile_app_bundle_oauth2_client DROP CONSTRAINT IF EXISTS fk_domain ;
ALTER TABLE mobile_app_bundle_oauth2_client RENAME COLUMN mobile_app_id TO mobile_app_bundle_id ;
END IF ;
END ;
$ $ ;
CREATE EXTENSION IF NOT EXISTS " uuid-ossp " ;
-- duplicate each mobile app and create mobile app bundle for the pair of android and ios app
DO
$ $
DECLARE
generatedBundleId uuid ;
iosAppId uuid ;
mobileAppRecord RECORD ;
BEGIN
-- in case of running the upgrade script a second time
IF EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_name = ' mobile_app ' and column_name = ' oauth2_enabled ' ) THEN
UPDATE mobile_app SET platform_type = ' ANDROID ' WHERE platform_type IS NULL ;
UPDATE mobile_app SET status = ' DRAFT ' WHERE mobile_app . status IS NULL ;
FOR mobileAppRecord IN SELECT * FROM mobile_app
LOOP
-- duplicate app for iOS platform type
iosAppId : = uuid_generate_v4 ( ) ;
INSERT INTO mobile_app ( id , created_time , tenant_id , pkg_name , app_secret , platform_type , status )
VALUES ( iosAppId , mobileAppRecord . created_time , mobileAppRecord . tenant_id , mobileAppRecord . pkg_name , mobileAppRecord . app_secret , ' IOS ' , mobileAppRecord . status )
ON CONFLICT DO NOTHING ;
-- create bundle for android and iOS app
generatedBundleId : = uuid_generate_v4 ( ) ;
INSERT INTO mobile_app_bundle ( id , created_time , tenant_id , title , android_app_id , ios_app_id , oauth2_enabled )
VALUES ( generatedBundleId , mobileAppRecord . created_time , mobileAppRecord . tenant_id ,
mobileAppRecord . pkg_name | | ' (autogenerated) ' , mobileAppRecord . id , iosAppId , mobileAppRecord . oauth2_enabled )
ON CONFLICT DO NOTHING ;
UPDATE mobile_app_bundle_oauth2_client SET mobile_app_bundle_id = generatedBundleId WHERE mobile_app_bundle_id = mobileAppRecord . id ;
END LOOP ;
END IF ;
IF NOT EXISTS ( SELECT 1 FROM pg_constraint WHERE conname = ' fk_mobile_app_bundle_oauth2_client_bundle_id ' ) THEN
ALTER TABLE mobile_app_bundle_oauth2_client ADD CONSTRAINT fk_mobile_app_bundle_oauth2_client_bundle_id
FOREIGN KEY ( mobile_app_bundle_id ) REFERENCES mobile_app_bundle ( id ) ON DELETE CASCADE ;
END IF ;
ALTER TABLE mobile_app DROP COLUMN IF EXISTS oauth2_enabled ;
IF NOT EXISTS ( SELECT 1 FROM pg_constraint WHERE conname = ' mobile_app_pkg_name_platform_unq_key ' ) THEN
ALTER TABLE mobile_app ADD CONSTRAINT mobile_app_pkg_name_platform_unq_key UNIQUE ( pkg_name , platform_type ) ;
END IF ;
END ;
$ $ ;
ALTER TABLE IF EXISTS mobile_app_settings RENAME TO qr_code_settings ;
ALTER TABLE qr_code_settings ADD COLUMN IF NOT EXISTS mobile_app_bundle_id uuid ,
ADD COLUMN IF NOT EXISTS android_enabled boolean ,
ADD COLUMN IF NOT EXISTS ios_enabled boolean ;
-- migrate mobile apps from qr code settings to mobile_app, create mobile app bundle for the pair of apps
DO
$ $
DECLARE
androidPkgName varchar ;
iosPkgName varchar ;
androidAppId uuid ;
iosAppId uuid ;
generatedBundleId uuid ;
qrCodeRecord RECORD ;
BEGIN
-- in case of running the upgrade script a second time
IF EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_name = ' qr_code_settings ' AND column_name = ' android_config ' ) THEN
FOR qrCodeRecord IN SELECT * FROM qr_code_settings
LOOP
generatedBundleId : = NULL ;
-- migrate android config
IF ( qrCodeRecord . android_config : : jsonb - > > ' appPackage ' IS NOT NULL ) THEN
androidPkgName : = qrCodeRecord . android_config : : jsonb - > > ' appPackage ' ;
SELECT id into androidAppId FROM mobile_app WHERE pkg_name = androidPkgName AND platform_type = ' ANDROID ' ;
IF androidAppId IS NULL THEN
androidAppId : = uuid_generate_v4 ( ) ;
INSERT INTO mobile_app ( id , created_time , tenant_id , pkg_name , platform_type , status , store_info )
VALUES ( androidAppId , ( extract ( epoch from now ( ) ) * 1000 ) , qrCodeRecord . tenant_id ,
androidPkgName , ' ANDROID ' , ' DRAFT ' , qrCodeRecord . android_config : : jsonb - ' appPackage ' - ' enabled ' ) ;
generatedBundleId : = uuid_generate_v4 ( ) ;
INSERT INTO mobile_app_bundle ( id , created_time , tenant_id , title , android_app_id )
VALUES ( generatedBundleId , ( extract ( epoch from now ( ) ) * 1000 ) , qrCodeRecord . tenant_id , androidPkgName | | ' (autogenerated) ' , androidAppId ) ;
UPDATE qr_code_settings SET mobile_app_bundle_id = generatedBundleId ;
ELSE
UPDATE mobile_app SET store_info = qrCodeRecord . android_config : : jsonb - ' appPackage ' - ' enabled ' WHERE id = androidAppId ;
UPDATE qr_code_settings SET mobile_app_bundle_id = ( SELECT id FROM mobile_app_bundle WHERE mobile_app_bundle . android_app_id = androidAppId ) ;
END IF ;
END IF ;
UPDATE qr_code_settings SET android_enabled = ( qrCodeRecord . android_config : : jsonb - > > ' enabled ' ) : : boolean WHERE id = qrCodeRecord . id ;
-- migrate ios config
IF ( qrCodeRecord . ios_config : : jsonb - > > ' appId ' IS NOT NULL ) THEN
iosPkgName : = substring ( qrCodeRecord . ios_config : : jsonb - > > ' appId ' , strpos ( qrCodeRecord . ios_config : : jsonb - > > ' appId ' , ' . ' ) + 1 ) ;
SELECT id INTO iosAppId FROM mobile_app WHERE pkg_name = iosPkgName AND platform_type = ' IOS ' ;
IF iosAppId IS NULL THEN
iosAppId : = uuid_generate_v4 ( ) ;
INSERT INTO mobile_app ( id , created_time , tenant_id , pkg_name , platform_type , status , store_info )
VALUES ( iosAppId , ( extract ( epoch from now ( ) ) * 1000 ) , qrCodeRecord . tenant_id ,
iosPkgName , ' IOS ' , ' DRAFT ' , qrCodeRecord . ios_config : : jsonb - ' enabled ' ) ;
IF generatedBundleId IS NULL THEN
generatedBundleId : = uuid_generate_v4 ( ) ;
INSERT INTO mobile_app_bundle ( id , created_time , tenant_id , title , ios_app_id )
VALUES ( generatedBundleId , ( extract ( epoch from now ( ) ) * 1000 ) , qrCodeRecord . tenant_id , iosPkgName | | ' (autogenerated) ' , iosAppId ) ;
UPDATE qr_code_settings SET mobile_app_bundle_id = generatedBundleId ;
ELSE
UPDATE mobile_app_bundle SET ios_app_id = iosAppId WHERE id = generatedBundleId ;
END IF ;
ELSE
UPDATE qr_code_settings SET mobile_app_bundle_id = ( SELECT id FROM mobile_app_bundle WHERE mobile_app_bundle . ios_app_id = iosAppId ) ;
UPDATE mobile_app SET store_info = qrCodeRecord . ios_config : : jsonb - ' enabled ' WHERE id = iosAppId ;
END IF ;
END IF ;
UPDATE qr_code_settings SET ios_enabled = ( qrCodeRecord . ios_config : : jsonb - > ' enabled ' ) : : boolean WHERE id = qrCodeRecord . id ;
END LOOP ;
ALTER TABLE qr_code_settings RENAME CONSTRAINT mobile_app_settings_tenant_id_unq_key TO qr_code_settings_tenant_id_unq_key ;
ALTER TABLE qr_code_settings RENAME CONSTRAINT mobile_app_settings_pkey TO qr_code_settings_pkey ;
END IF ;
ALTER TABLE qr_code_settings DROP COLUMN IF EXISTS android_config , DROP COLUMN IF EXISTS ios_config ;
END ;
$ $ ;
-- update constraint name
DO
$ $
BEGIN
ALTER TABLE domain DROP CONSTRAINT IF EXISTS domain_unq_key ;
IF NOT EXISTS ( SELECT 1 FROM pg_constraint WHERE conname = ' domain_name_key ' ) THEN
ALTER TABLE domain ADD CONSTRAINT domain_name_key UNIQUE ( name ) ;
END IF ;
END ;
$ $ ;
-- UPDATE RESOURCE JS_MODULE SUB TYPE START
UPDATE resource SET resource_sub_type = ' EXTENSION ' WHERE resource_type = ' JS_MODULE ' AND resource_sub_type IS NULL ;
-- UPDATE RESOURCE JS_MODULE SUB TYPE END