|
|
|
@ -41,6 +41,7 @@ CREATE TABLE IF NOT EXISTS mobile_app_bundle ( |
|
|
|
CONSTRAINT fk_android_app_id FOREIGN KEY (android_app_id) REFERENCES mobile_app(id), |
|
|
|
CONSTRAINT fk_ios_app_id FOREIGN KEY (ios_app_id) REFERENCES mobile_app(id) |
|
|
|
); |
|
|
|
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), |
|
|
|
@ -82,31 +83,34 @@ $$ |
|
|
|
-- 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, (extract(epoch from now()) * 1000), mobileAppRecord.tenant_id, mobileAppRecord.pkg_name, mobileAppRecord.app_secret, 'IOS', mobileAppRecord.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, (extract(epoch from now()) * 1000), mobileAppRecord.tenant_id, |
|
|
|
'Autogenerated for ' || mobileAppRecord.pkg_name, mobileAppRecord.id, iosAppId, mobileAppRecord.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; |
|
|
|
ALTER TABLE mobile_app DROP COLUMN IF EXISTS oauth2_enabled; |
|
|
|
IF NOT EXISTS(SELECT 1 FROM pg_constraint WHERE conname = 'pkg_name_platform_unique') THEN |
|
|
|
ALTER TABLE mobile_app ADD CONSTRAINT pkg_name_platform_unique UNIQUE (pkg_name, platform_type); |
|
|
|
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; |
|
|
|
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; |
|
|
|
@ -119,40 +123,49 @@ $$ |
|
|
|
LOOP |
|
|
|
generatedBundleId := NULL; |
|
|
|
-- migrate android config |
|
|
|
SELECT id into androidAppId FROM mobile_app WHERE pkg_name = qrCodeRecord.android_config::jsonb ->> 'appPackage' 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, |
|
|
|
qrCodeRecord.android_config::jsonb ->> 'appPackage', 'ANDROID', 'DRAFT', qrCodeRecord.android_config::jsonb - 'appPackage'); |
|
|
|
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, 'Autogenerated for qr code', androidAppId); |
|
|
|
UPDATE qr_code_settings SET mobile_app_bundle_id = generatedBundleId WHERE id = qrCodeRecord.id; |
|
|
|
ELSE |
|
|
|
UPDATE mobile_app SET store_info = qrCodeRecord.android_config::jsonb - 'appPackage' 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) WHERE id = qrCodeRecord.id; |
|
|
|
IF (qrCodeRecord.android_config IS NOT NULL AND 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, |
|
|
|
android_enabled = (qrCodeRecord.android_config::jsonb ->> 'enabled')::boolean WHERE id = qrCodeRecord.id; |
|
|
|
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), |
|
|
|
android_enabled = (qrCodeRecord.android_config::jsonb ->> 'enabled')::boolean WHERE id = qrCodeRecord.id; |
|
|
|
END IF; |
|
|
|
END IF; |
|
|
|
|
|
|
|
-- migrate ios config |
|
|
|
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); |
|
|
|
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, 'Autogenerated for qr code', iosAppId); |
|
|
|
UPDATE qr_code_settings SET mobile_app_bundle_id = generatedBundleId WHERE id = qrCodeRecord.id; |
|
|
|
IF (qrCodeRecord.ios_config IS NOT NULL AND 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); |
|
|
|
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, |
|
|
|
ios_enabled = (qrCodeRecord.ios_config::jsonb ->> 'enabled')::boolean WHERE id = qrCodeRecord.id; |
|
|
|
ELSE |
|
|
|
UPDATE mobile_app_bundle SET ios_app_id = iosAppId WHERE id = generatedBundleId; |
|
|
|
END IF; |
|
|
|
ELSE |
|
|
|
UPDATE mobile_app_bundle SET ios_app_id = iosAppId WHERE id = generatedBundleId; |
|
|
|
UPDATE qr_code_settings SET mobile_app_bundle_id = (SELECT id FROM mobile_app_bundle WHERE mobile_app_bundle.ios_app_id = iosAppId), |
|
|
|
ios_enabled = (qrCodeRecord.ios_config::jsonb -> 'enabled')::boolean WHERE id = qrCodeRecord.id; |
|
|
|
UPDATE mobile_app SET store_info = qrCodeRecord.ios_config::jsonb - 'enabled' WHERE id = iosAppId; |
|
|
|
END IF; |
|
|
|
ELSE |
|
|
|
UPDATE mobile_app SET store_info = qrCodeRecord.ios_config WHERE id = iosAppId; |
|
|
|
UPDATE qr_code_settings SET mobile_app_bundle_id = (SELECT id FROM mobile_app_bundle WHERE mobile_app_bundle.ios_app_id = iosAppId) WHERE id = qrCodeRecord.id; |
|
|
|
END IF; |
|
|
|
END LOOP; |
|
|
|
ALTER TABLE qr_code_settings RENAME CONSTRAINT mobile_app_settings_tenant_id_unq_key TO qr_code_settings_tenant_id_unq_key; |
|
|
|
|