diff --git a/lib/services/database_helper.dart b/lib/services/database_helper.dart new file mode 100644 index 0000000..df2b5c7 --- /dev/null +++ b/lib/services/database_helper.dart @@ -0,0 +1,75 @@ +import 'package:sqflite_common_ffi/sqflite_ffi.dart'; +import 'package:path/path.dart'; +import '../models/product.dart'; + +class DatabaseHelper { + static final DatabaseHelper _instance = DatabaseHelper._internal(); + static Database? _database; + + factory DatabaseHelper() { + return _instance; + } + + DatabaseHelper._internal(); + + Future get database async { + if (_database != null) { + return _database!; + } + _database = await _initDatabase(); + return _database!; + } + + Future _initDatabase() async { + String documentsDirectory = await getDatabasesPath(); + String path = join(documentsDirectory, 'product_database.db'); + + return await openDatabase(path, version: 1, onCreate: _onCreate); + } + + Future _onCreate(Database db, int version) async { + await db.execute(''' + CREATE TABLE products( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + code TEXT NOT NULL, + quantity INTEGER NOT NULL, + price REAL NOT NULL, + description TEXT + ) + '''); + } + + Future insertProduct(Product product) async { + final db = await database; + return await db.insert( + 'products', + product.toMap(), + conflictAlgorithm: ConflictAlgorithm.replace, + ); + } + + Future> getProducts() async { + final db = await database; + final List> maps = await db.query('products'); + + return List.generate(maps.length, (i) { + return Product.fromMap(maps[i]); + }); + } + + Future updateProduct(Product product) async { + final db = await database; + return await db.update( + 'products', + product.toMap(), + where: 'id = ?', + whereArgs: [product.id], + ); + } + + Future deleteProduct(int id) async { + final db = await database; + return await db.delete('products', where: 'id = ?', whereArgs: [id]); + } +}