Feat: DAL (Data Access Layer) Added

This commit is contained in:
Hadi Mottale 2025-06-11 10:40:03 +03:30
parent e86d882e8c
commit 568a923982
1 changed files with 93 additions and 0 deletions

View File

@ -0,0 +1,93 @@
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
import 'package:path/path.dart';
import '../models/contact.dart';
class DatabaseHelper {
static final DatabaseHelper _instance = DatabaseHelper._internal();
static Database? _database;
factory DatabaseHelper() {
return _instance;
}
DatabaseHelper._internal();
Future<Database> get database async {
if (_database != null) {
return _database!;
}
_database = await _initDatabase();
return _database!;
}
Future<Database> _initDatabase() async {
sqfliteFfiInit();
var databaseFactory = databaseFactoryFfi;
final databasePath = await getDatabasesPath();
final path = join(databasePath, 'contacts.db');
return await databaseFactory.openDatabase(
path,
options: OpenDatabaseOptions(
version: 1,
onCreate: (db, version) async {
await db.execute('''
CREATE TABLE contacts(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
phone TEXT,
email TEXT,
address TEXT,
company TEXT,
notes TEXT
)
''');
},
),
);
}
Future<int> insertContact(Contact contact) async {
final db = await database;
return await db.insert(
'contacts',
contact.toMap(),
conflictAlgorithm: ConflictAlgorithm.replace,
);
}
Future<List<Contact>> getContacts() async {
final db = await database;
final List<Map<String, dynamic>> maps = await db.query(
'contacts',
orderBy: 'name ASC',
); // Order by name for display
return List.generate(maps.length, (i) {
return Contact.fromMap(maps[i]);
});
}
Future<int> updateContact(Contact contact) async {
final db = await database;
return await db.update(
'contacts',
contact.toMap(),
where: 'id = ?',
whereArgs: [contact.id],
);
}
Future<int> deleteContact(int id) async {
final db = await database;
return await db.delete('contacts', where: 'id = ?', whereArgs: [id]);
}
Future<void> closeDatabase() async {
final db = await _database;
if (db != null && db.isOpen) {
await db.close();
_database = null; // Clear the instance
}
}
}