flutter-freaccess-hub/lib/shared/helpers/database/database_helper.dart

81 lines
2.5 KiB
Dart

import 'package:hub/shared/components/molecules/modules/index.dart';
import 'package:hub/shared/constants/index.dart';
import 'package:hub/shared/helpers/storage/keychain_storage.dart';
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
import 'dart:developer';
class DatabaseStorage {
static final String _dbName = 'database.db';
static final int _dbVersion = 4;
static final DatabaseStorage instance = DatabaseStorage._internal();
factory DatabaseStorage() => instance;
DatabaseStorage._internal();
static Database? _database;
static Database get database {
if (_database == null) {
throw Exception('Database has not been initialized. Call init() first.');
}
return _database!;
}
bool isInitialized = false;
Future<void> init() async {
if (isInitialized) return;
_database = await openDatabase(
join(await getDatabasesPath(), _dbName),
version: _dbVersion,
onCreate: _onCreate,
onUpgrade: _onUpgrade,
onDowngrade: _onDowngrade,
);
await LicenseRepositoryImpl().updateLicense();
isInitialized = true;
}
Future<void> _onCreate(Database database, int version) async {
log('Creating database...');
await database.execute(createKeychainTable);
await database.execute(createLicenseTable);
if (version >= 2) {
await database.execute(updatePetsHistoryTrigger);
}
if (version >= 3) {
await database.execute(updateDisplayTrigger);
}
if (version >= 4) {
await database.execute(updatePeopleDisplayTrigger);
}
}
Future<void> _onUpgrade(Database database, int oldVersion, int newVersion) async {
log('Upgrading database from version $oldVersion to $newVersion...');
if (oldVersion < 2 && newVersion >= 2) {
await database.execute(createLicenseTable);
await database.execute(updatePetsHistoryTrigger);
}
if (oldVersion < 3 && newVersion >= 3) {
await database.execute(updateDisplayTrigger);
}
if (oldVersion < 4 && newVersion >= 4) {
await database.execute(updatePeopleDisplayTrigger);
}
}
Future<void> _onDowngrade(Database database, int oldVersion, int newVersion) async {
log('Downgrading database from version $oldVersion to $newVersion...');
if (oldVersion >= 4 && newVersion < 4) {
await database.execute(dropPeopleDisplayTrigger);
}
if (oldVersion >= 3 && newVersion < 3) {
await database.execute(dropDisplayTrigger);
}
if (oldVersion >= 2 && newVersion < 2) {
await database.execute(dropPetsHistoryTrigger);
}
}
}