From 392c5980ffab579139840bbe574101fd7dc91895 Mon Sep 17 00:00:00 2001 From: "J. A. Messias" Date: Thu, 19 Sep 2024 13:46:44 -0300 Subject: [PATCH] WIP --- lib/main.dart | 1 + lib/shared/helpers/db_helper.dart | 212 ++++++++++++++++-------------- 2 files changed, 111 insertions(+), 102 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 54bb6db8..bf6bcbb3 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -23,6 +23,7 @@ final GlobalKey navigatorKey = GlobalKey(); Future initializeApp() async { WidgetsFlutterBinding.ensureInitialized(); + DatabaseHelper().deleteDatabaseDB(); await DatabaseHelper().database; final status = await AppTrackingTransparency.requestTrackingAuthorization(); diff --git a/lib/shared/helpers/db_helper.dart b/lib/shared/helpers/db_helper.dart index 13fc50c1..6840be44 100644 --- a/lib/shared/helpers/db_helper.dart +++ b/lib/shared/helpers/db_helper.dart @@ -1,10 +1,21 @@ import 'dart:developer'; - import 'package:flutter/foundation.dart'; -import 'package:flutter/services.dart'; import 'package:path/path.dart'; import 'package:sqflite/sqflite.dart'; +class DatabaseConfig { + static const String dbName = 'database.db'; + static const int dbVersion = 1; + + static const String tableKeychain = 'keychain'; + static const String columnKey = 'key'; + static const String columnValue = 'value'; + static const String columnType = 'type'; + static const String columnUpdateAt = 'updateAt'; + static const String columnResolvedAt = 'resolvedAt'; + static const String columnCreatedAt = 'createdAt'; +} + class DatabaseHelper { static final DatabaseHelper _instance = DatabaseHelper._internal(); static Database? _database; @@ -19,28 +30,12 @@ class DatabaseHelper { return _database!; } - Future _onUpgrade(Database db, int oldVersion, int newVersion) async { - log('Upgrading database from version $oldVersion to $newVersion'); - - // if (oldVersion < 2) { - // // await db.execute('ALTER TABLE keychain ADD COLUMN newColumn TEXT'); - // } - } - - Future _onDowngrade(Database db, int oldVersion, int newVersion) async { - log('Downgrading database from version $oldVersion to $newVersion'); - } - - Future _onConfigure(Database db) async { - log('Configuring database...'); - } - Future _initDatabase() async { final path = await _getDatabasePath(); log('Database path: $path'); return await openDatabase( path, - version: 1, + version: DatabaseConfig.dbVersion, onCreate: _onCreate, onOpen: _onOpen, onUpgrade: _onUpgrade, @@ -51,50 +46,83 @@ class DatabaseHelper { }).whenComplete(() => log('Database initialized')); } + Future _getDatabasePath() async { + final databasesPath = await getDatabasesPath(); + final path = join(databasesPath, DatabaseConfig.dbName); + log('Database path: $path'); + return path; + } + Future _onCreate(Database db, int version) async { log('Creating tables...'); - await db.execute(''' - CREATE TABLE keychain ( - key TEXT, - value TEXT, - type TEXT, - updateAt TEXT, - resolvedAt TEXT, - createdAt TEXT - ); - '''); -// ---------------------------------------------- - insert('devUUID', '', 'user'); - insert('userUUID', '', 'user'); - insert('userDevUUID', '', 'user'); - insert('status', '', 'user'); - insert('userName', '', 'user'); -// ---------------------------------------------- - insert('cliUUID', '', 'local'); - insert('ownerUUID', '', 'local'); - insert('cliName', '', 'local'); -// ---------------------------------------------- - insert('whatsapp', 'false', 'util'); - insert('provisional', 'false', 'util'); - insert('pets', 'false', 'util'); - insert('local', 'false', 'util'); - insert('notify', 'false', 'util'); - insert('fingerprint', 'false', 'util'); - insert('access', 'false', 'util'); - insert('panic', 'false', 'util'); - insert('person', 'false', 'util'); - insert('requestOSnotification', 'false', 'util'); - insert('petAmountRegister', '', 'local'); -// ---------------------------------------------- + CREATE TABLE ${DatabaseConfig.tableKeychain} ( + ${DatabaseConfig.columnKey} TEXT, + ${DatabaseConfig.columnValue} TEXT, + ${DatabaseConfig.columnType} TEXT, + ${DatabaseConfig.columnUpdateAt} TEXT, + ${DatabaseConfig.columnResolvedAt} TEXT, + ${DatabaseConfig.columnCreatedAt} TEXT + ); + '''); + await _insertInitialData(db); log('Tables created'); } + Future _insertInitialData(Database db) async { + final initialData = [ + {'key': 'devUUID', 'value': '', 'type': 'user'}, + {'key': 'userUUID', 'value': '', 'type': 'user'}, + {'key': 'userDevUUID', 'value': '', 'type': 'user'}, + {'key': 'status', 'value': '', 'type': 'user'}, + {'key': 'userName', 'value': '', 'type': 'user'}, + {'key': 'cliUUID', 'value': '', 'type': 'local'}, + {'key': 'ownerUUID', 'value': '', 'type': 'local'}, + {'key': 'cliName', 'value': '', 'type': 'local'}, + {'key': 'whatsapp', 'value': 'false', 'type': 'util'}, + {'key': 'provisional', 'value': 'false', 'type': 'util'}, + {'key': 'pets', 'value': 'false', 'type': 'util'}, + {'key': 'local', 'value': 'false', 'type': 'util'}, + {'key': 'notify', 'value': 'false', 'type': 'util'}, + {'key': 'fingerprint', 'value': 'false', 'type': 'util'}, + {'key': 'access', 'value': 'false', 'type': 'util'}, + {'key': 'panic', 'value': 'false', 'type': 'util'}, + {'key': 'person', 'value': 'false', 'type': 'util'}, + {'key': 'requestOSnotification', 'value': 'false', 'type': 'util'}, + {'key': 'petAmountRegister', 'value': '', 'type': 'local'}, + ]; + + for (var data in initialData) { + await db.insert(DatabaseConfig.tableKeychain, data); + } + } + Future _onOpen(Database db) async { log('Checking existing data...'); await _checkExistingData(db); } + Future _onUpgrade(Database db, int oldVersion, int newVersion) async { + log('Upgrading database from version $oldVersion to $newVersion'); + } + + Future _onDowngrade(Database db, int oldVersion, int newVersion) async { + log('Downgrading database from version $oldVersion to $newVersion'); + } + + Future _onConfigure(Database db) async { + log('Configuring database...'); + } + + Future _checkExistingData(Database db) async { + try { + final maps = await db.query(DatabaseConfig.tableKeychain); + log('Existing data: $maps'); + } catch (error) { + log('Error checking existing data: $error'); + } + } + Future deleteDatabaseDB() async { final path = await _getDatabasePath(); await deleteDatabase(path); @@ -102,50 +130,33 @@ class DatabaseHelper { _database = null; } - Future _getDatabasePath() async { - final databasesPath = await getDatabasesPath(); - final path = join(databasesPath, 'database.db'); - log('Database path: $path'); - return path; - } - - Future _checkExistingData(Database db) async { - try { - final maps = await db.query('keychain'); - log('Existing data: $maps'); - } catch (error) { - log('Error checking existing data: $error'); - } - } - Future get({String? key, String? field}) async { try { final db = await database; - List> queryResult; + if (field != null && key != null) { queryResult = await db.query( - 'keychain', + DatabaseConfig.tableKeychain, columns: [field], - where: 'key = ?', + where: '${DatabaseConfig.columnKey} = ?', whereArgs: [key], ); } else if (field != null) { queryResult = await db.query( - 'keychain', + DatabaseConfig.tableKeychain, columns: [field], ); } else if (key != null) { - field = 'value'; - + field = DatabaseConfig.columnValue; queryResult = await db.query( - 'keychain', + DatabaseConfig.tableKeychain, columns: [field], - where: 'key = ?', + where: '${DatabaseConfig.columnKey} = ?', whereArgs: [key], ); } else { - queryResult = await db.query('keychain'); + queryResult = await db.query(DatabaseConfig.tableKeychain); } log('Query result for key: $key, field: $field -> $queryResult'); @@ -165,35 +176,35 @@ class DatabaseHelper { final db = await database; final Map data = { - 'key': key, - 'value': value.toString(), - 'type': type, - 'updateAt': DateTime.now().toIso8601String(), - 'resolvedAt': null, - 'createdAt': DateTime.now().toIso8601String(), + DatabaseConfig.columnKey: key, + DatabaseConfig.columnValue: value.toString(), + DatabaseConfig.columnType: type, + DatabaseConfig.columnUpdateAt: DateTime.now().toIso8601String(), + DatabaseConfig.columnResolvedAt: null, + DatabaseConfig.columnCreatedAt: DateTime.now().toIso8601String(), }; log('Inserting: $data'); - return await db.insert('keychain', data); + return await db.insert(DatabaseConfig.tableKeychain, data); } Future update(String key, dynamic value, String? type) async { final db = await database; final Map data = { - 'key': key, - if (value != null) 'value': value.toString(), - if (type != null) 'type': type, - 'updateAt': DateTime.now().toIso8601String(), - 'resolvedAt': null, - 'createdAt': DateTime.now().toIso8601String(), + DatabaseConfig.columnKey: key, + if (value != null) DatabaseConfig.columnValue: value.toString(), + if (type != null) DatabaseConfig.columnType: type, + DatabaseConfig.columnUpdateAt: DateTime.now().toIso8601String(), + DatabaseConfig.columnResolvedAt: null, + DatabaseConfig.columnCreatedAt: DateTime.now().toIso8601String(), }; log('Updating: $data'); return await db.update( - 'keychain', + DatabaseConfig.tableKeychain, data, - where: 'key = ?', + where: '${DatabaseConfig.columnKey} = ?', whereArgs: [key], ); } @@ -203,9 +214,9 @@ class DatabaseHelper { log('Setting value of key: $key to empty string'); return await db.update( - 'keychain', - {'value': ''}, - where: 'key = ?', + DatabaseConfig.tableKeychain, + {DatabaseConfig.columnValue: ''}, + where: '${DatabaseConfig.columnKey} = ?', whereArgs: [key], ); } @@ -215,18 +226,15 @@ class DatabaseHelper { log('Deleting key: $key'); return await db.delete( - 'keychain', - where: 'key = ?', + DatabaseConfig.tableKeychain, + where: '${DatabaseConfig.columnKey} = ?', whereArgs: [key], ); } Future purge() async { - final DatabaseHelper helper = DatabaseHelper(); - - await helper.deleteDatabaseDB(); - await helper.database; - + await deleteDatabaseDB(); + await database; log('Purge'); } }