diff --git a/lib/shared/helpers/base_storage.dart b/lib/shared/helpers/base_storage.dart index 3fae76dd..76efbc99 100644 --- a/lib/shared/helpers/base_storage.dart +++ b/lib/shared/helpers/base_storage.dart @@ -2,7 +2,6 @@ abstract class BaseStorage { Future init(); Future set(String key, T value); - Future get(String key); @@ -94,6 +93,7 @@ enum KeychainStorageKey { panic, person, requestOSNotification, + isNewVersion, } extension KeychainStorageKeyExtension on KeychainStorageKey { @@ -137,6 +137,68 @@ extension KeychainStorageKeyExtension on KeychainStorageKey { return 'fre_person'; case KeychainStorageKey.requestOSNotification: return 'fre_requestOSnotification'; + case KeychainStorageKey.isNewVersion: + return 'fre_isNewVersion'; + default: + return ''; + } + } +} + +enum InactiveLicenseKey { + residents, + vehicles, + openedVisits, +} + +enum ActiveLicenseKey { + messages, + liberations, + reservations, + access, + orders, + completeSchedule, + providerSchedule, + deliverySchedule, + fastPass, +} + +extension InactiveLicenseKeyExtension on InactiveLicenseKey { + String get value { + switch (this) { + case InactiveLicenseKey.residents: + return 'FRE-HUB-RESIDENTS'; + case InactiveLicenseKey.vehicles: + return 'FRE-HUB-VEHICLES'; + case InactiveLicenseKey.openedVisits: + return 'FRE-HUB-OPENED-VISITS'; + default: + return ''; + } + } +} + +extension ActiveLicenseKeyExtension on ActiveLicenseKey { + String get value { + switch (this) { + case ActiveLicenseKey.messages: + return 'FRE-HUB-MESSAGES'; + case ActiveLicenseKey.liberations: + return 'FRE-HUB-LIBERATIONS'; + case ActiveLicenseKey.reservations: + return 'FRE-HUB-RESERVATIONS'; + case ActiveLicenseKey.access: + return 'FRE-HUB-ACCESS'; + case ActiveLicenseKey.orders: + return 'FRE-HUB-ORDERS'; + case ActiveLicenseKey.completeSchedule: + return 'FRE-HUB-COMPLETE-SCHEDULE'; + case ActiveLicenseKey.providerSchedule: + return 'FRE-HUB-AGE-PROV-PRESTADOR'; + case ActiveLicenseKey.deliverySchedule: + return 'FRE-HUB-AGE-PROV-DELIVERY'; + case ActiveLicenseKey.fastPass: + return 'FRE-HUB-FASTPASS'; default: return ''; } diff --git a/lib/shared/helpers/database_storage.dart b/lib/shared/helpers/database_helper.dart similarity index 56% rename from lib/shared/helpers/database_storage.dart rename to lib/shared/helpers/database_helper.dart index e46b21bb..84b33c35 100644 --- a/lib/shared/helpers/database_storage.dart +++ b/lib/shared/helpers/database_helper.dart @@ -1,13 +1,11 @@ -import 'package:hub/shared/helpers/base_storage.dart'; -import 'package:hub/shared/services/keychain/keychain_database_delegate.dart'; -import 'package:hub/shared/services/keychain/keychain_service.dart'; -import 'package:hub/shared/services/license/license_database_delegate.dart'; +import 'package:hub/shared/helpers/keychain_storage.dart'; +import 'package:hub/shared/helpers/license_helper.dart'; import 'package:hub/shared/services/license/license_service.dart'; import 'package:sqflite/sqflite.dart'; import 'package:path/path.dart'; import 'dart:developer'; -class DatabaseStorage implements BaseStorage { +class DatabaseStorage { static final String _dbName = 'database.db'; static final int _dbVersion = 2; @@ -23,16 +21,6 @@ class DatabaseStorage implements BaseStorage { return _database!; } - static BaseStorage getInstanceByKey(String key) { - if (KeychainStorageKey.values.map((e) => e.value).toList().contains(key)) { - return KeychainDelegate.instance; - } - if (LicenseStorageKey.values.map((e) => e.value).toList().contains(key)) { - return LicenseDelegate.instance; - } - throw Exception('Storage not found'); - } - Future init() async { if (_database != null && _database!.isOpen) return; _database = await openDatabase( @@ -61,25 +49,4 @@ class DatabaseStorage implements BaseStorage { Future _onDowngrade(Database database, int oldVersion, int newVersion) async {} - @override - Future clearAll() async { - await _database?.delete(KeychainDelegate.tableKeychain); - await _database?.delete(LicenseDelegate.tableLicense); - return; - } - - @override - Future delete(String key) async { - return await getInstanceByKey(key).delete(key); - } - - @override - Future get(String key) async { - return await getInstanceByKey(key).get(key); - } - - @override - Future set(String key, T value) async { - return await getInstanceByKey(key).set(key, value); - } -} \ No newline at end of file +} diff --git a/lib/shared/services/keychain/keychain_database_delegate.dart b/lib/shared/helpers/keychain_storage.dart similarity index 96% rename from lib/shared/services/keychain/keychain_database_delegate.dart rename to lib/shared/helpers/keychain_storage.dart index 35ccf130..8be43ccc 100644 --- a/lib/shared/services/keychain/keychain_database_delegate.dart +++ b/lib/shared/helpers/keychain_storage.dart @@ -1,5 +1,5 @@ import 'package:hub/shared/helpers/base_storage.dart'; -import 'package:hub/shared/helpers/database_storage.dart'; +import 'package:hub/shared/helpers/database_helper.dart'; import 'package:sqflite/sqflite.dart'; class KeychainDelegate implements BaseStorage { diff --git a/lib/shared/services/license/license_database_delegate.dart b/lib/shared/helpers/license_helper.dart similarity index 76% rename from lib/shared/services/license/license_database_delegate.dart rename to lib/shared/helpers/license_helper.dart index 873b0bde..17896651 100644 --- a/lib/shared/services/license/license_database_delegate.dart +++ b/lib/shared/helpers/license_helper.dart @@ -1,8 +1,7 @@ -import 'dart:convert'; import 'dart:developer'; import 'package:hub/shared/helpers/base_storage.dart'; -import 'package:hub/shared/helpers/database_storage.dart'; +import 'package:hub/shared/helpers/database_helper.dart'; import 'package:sqflite/sqflite.dart'; class LicenseDelegate implements BaseStorage { @@ -53,6 +52,22 @@ class LicenseDelegate implements BaseStorage { conflictAlgorithm: ConflictAlgorithm.replace); } + static Future insertLicenseFoo(final List key, final String display) async { + for (var element in key) { + DatabaseStorage.database.insert( + LicenseDelegate.tableLicense, + { + 'key': element, + 'display': display, + 'expirationDate': '', + 'startDate': '', + 'quantity': '', + }, + conflictAlgorithm: ConflictAlgorithm.ignore, + ); + } + } + @override Future delete(String key) async { await DatabaseStorage.database.delete(tableLicense, where: 'key = ?', whereArgs: [key]); diff --git a/lib/shared/helpers/secure_storage.dart b/lib/shared/helpers/secure_storage.dart index 949e1ca9..b579c543 100644 --- a/lib/shared/helpers/secure_storage.dart +++ b/lib/shared/helpers/secure_storage.dart @@ -1,4 +1,3 @@ -import 'package:flutter/material.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:hub/shared/helpers/base_storage.dart'; diff --git a/lib/shared/helpers/shared_preferences_storage.dart b/lib/shared/helpers/shared_preferences_storage.dart index 358f5920..9a9b4fd1 100644 --- a/lib/shared/helpers/shared_preferences_storage.dart +++ b/lib/shared/helpers/shared_preferences_storage.dart @@ -1,4 +1,3 @@ -import 'package:flutter/material.dart'; import 'package:hub/shared/helpers/base_storage.dart'; import 'package:shared_preferences/shared_preferences.dart'; diff --git a/lib/shared/helpers/storage_helper.dart b/lib/shared/helpers/storage_helper.dart index 286115ab..4c5418d3 100644 --- a/lib/shared/helpers/storage_helper.dart +++ b/lib/shared/helpers/storage_helper.dart @@ -1,6 +1,7 @@ import 'package:flutter/cupertino.dart'; import 'package:hub/shared/helpers/base_storage.dart'; -import 'package:hub/shared/helpers/database_storage.dart'; +import 'package:hub/shared/helpers/database_helper.dart'; +import 'package:hub/shared/helpers/keychain_storage.dart'; import 'package:hub/shared/helpers/secure_storage.dart'; import 'package:hub/shared/helpers/shared_preferences_storage.dart'; @@ -37,7 +38,7 @@ class StorageHelper { case Storage.sharedPreferences: return SharedPreferencesStorage.instance; default: - return DatabaseStorage.instance; + return KeychainDelegate.instance; } } @@ -47,7 +48,7 @@ class StorageHelper { } else if (SharedPreferencesKey.values.map((e) => e.value).toList().contains(key)) { return SharedPreferencesStorage.instance; } else { - return DatabaseStorage.instance; + return KeychainDelegate.instance; } } diff --git a/lib/shared/services/license/license_service.dart b/lib/shared/services/license/license_service.dart index 49851806..215aa663 100644 --- a/lib/shared/services/license/license_service.dart +++ b/lib/shared/services/license/license_service.dart @@ -4,11 +4,10 @@ import 'dart:developer'; import 'package:hub/backend/api_requests/api_calls.dart'; import 'package:hub/shared/helpers/base_storage.dart'; -import 'package:hub/shared/helpers/database_storage.dart'; -import 'dart:convert'; +import 'package:hub/shared/helpers/database_helper.dart'; +import 'package:hub/shared/helpers/license_helper.dart'; import 'package:hub/shared/helpers/storage_helper.dart'; -import 'package:hub/shared/services/license/license_database_delegate.dart'; import 'package:sqflite/sqflite.dart'; class LicenseService { @@ -17,20 +16,8 @@ class LicenseService { LicenseService._internal(); static Future setupLicense(Database database) async { - log('All modules are visible'); - for (var element in LicenseStorageKey.values.map((e) => e.value)) { - await database.insert( - LicenseDelegate.tableLicense, - { - 'key': element, - 'display': 'VISIVEL', - 'expirationDate': '', - 'startDate': '', - 'quantity': '', - }, - conflictAlgorithm: ConflictAlgorithm.ignore, - ); - } + await LicenseDelegate.insertLicenseFoo(InactiveLicenseKey.values.map((e) => e.value).toList(), 'INVISIVEL'); + await LicenseDelegate.insertLicenseFoo(ActiveLicenseKey.values.map((e) => e.value).toList(), 'VISIVEL'); } static Future initLicenseService() async { diff --git a/lib/shared/services/localization/localization_service.dart b/lib/shared/services/localization/localization_service.dart index 59a3a409..08501be0 100644 --- a/lib/shared/services/localization/localization_service.dart +++ b/lib/shared/services/localization/localization_service.dart @@ -7,6 +7,7 @@ import 'package:http/src/response.dart'; import 'package:hub/backend/api_requests/api_manager.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; import 'package:hub/shared/helpers/base_storage.dart'; +import 'package:hub/shared/helpers/database_helper.dart'; import 'package:hub/shared/helpers/storage_helper.dart'; import 'package:hub/shared/services/license/license_service.dart'; import 'package:hub/shared/utils/dialog_util.dart'; @@ -150,7 +151,11 @@ class LocalizationService { await DialogUtil.error(context, errorMsg).whenComplete(() => selectLocal(context, response)); return false; } else { - await _updateStorageUtil(response.jsonBody); + final bool isNewVersion = await _updateStorageUtil(response.jsonBody); + if (!isNewVersion) { + await LicenseService.setupLicense(DatabaseStorage.database); + return false; + } return await LicenseService.fetchLicenses(); } } catch (e, s) { @@ -293,19 +298,20 @@ class LocalizationService { } } - static Future _updateStorageUtil(Map jsonBody) async { + static Future _updateStorageUtil(Map jsonBody) async { + await StorageHelper().s(KeychainStorageKey.whatsapp.value, jsonBody['whatsapp'] != null && jsonBody['whatsapp']); await StorageHelper() - .s(KeychainStorageKey.whatsapp.value, jsonBody['whatsapp'] != null && jsonBody['whatsapp'] ? 'true' : 'false'); - await StorageHelper().s(KeychainStorageKey.provisional.value, - jsonBody['provisional'] != null && jsonBody['provisional'] ? 'true' : 'false'); - await StorageHelper() - .s(KeychainStorageKey.pets.value, jsonBody['pet'] != null && jsonBody['pet'] ? 'true' : 'false'); + .s(KeychainStorageKey.provisional.value, jsonBody['provisional'] != null && jsonBody['provisional']); + await StorageHelper().s(KeychainStorageKey.pets.value, jsonBody['pet'] != null && jsonBody['pet']); await StorageHelper().s( KeychainStorageKey.petAmount.value, jsonBody['petAmountRegister'] != null && jsonBody['petAmountRegister'].toString().isEmpty ? '0' : jsonBody['petAmountRegister'].toString()); await StorageHelper().s(KeychainStorageKey.userName.value, jsonBody['visitado']['VDO_NOME']); + await StorageHelper() + .s(KeychainStorageKey.isNewVersion.value, jsonBody['newVersion'] != null && jsonBody['newVersion']); + return jsonBody['newVersion'] != null && jsonBody['newVersion']; } static bool _isActive(List locals) {