import 'package:Intaleq/constant/table_names.dart'; import 'package:sqflite/sqflite.dart'; import 'package:path/path.dart'; class DbSql { static final DbSql instance = DbSql._(); static Database? _database; DbSql._(); Future get database async { if (_database != null) return _database!; _database = await _initDatabase(); return _database!; } Future _initDatabase() async { String path = join(await getDatabasesPath(), 'my_database.db'); return await openDatabase( path, version: 1, onCreate: (db, version) async { await db.execute(''' CREATE TABLE IF NOT EXISTS ${TableName.carLocations}( id INTEGER PRIMARY KEY AUTOINCREMENT, driver_id TEXT, latitude REAL, longitude REAL, created_at TEXT, updated_at TEXT ) '''); await db.execute(''' CREATE TABLE IF NOT EXISTS ${TableName.placesFavorite}( id INTEGER PRIMARY KEY AUTOINCREMENT, latitude REAL, longitude REAL, name TEXT UNIQUE, rate TEXT, createdAt TEXT ) '''); // await db.execute('DROP TABLE IF EXISTS ${TableName.recentLocations}'); await db.execute(''' CREATE TABLE ${TableName.recentLocations}( id INTEGER PRIMARY KEY AUTOINCREMENT, latitude REAL, longitude REAL, name TEXT, rate TEXT, createdAt TEXT ) '''); await db.execute(''' CREATE TABLE IF NOT EXISTS ${TableName.driverOrdersRefuse}( id INTEGER PRIMARY KEY AUTOINCREMENT, order_id TEXT UNIQUE, created_at TEXT, driver_id TEXT ) '''); await db.execute(''' CREATE TABLE IF NOT EXISTS ${TableName.rideLocation}( id INTEGER PRIMARY KEY AUTOINCREMENT, order_id TEXT , created_at TEXT, lat TEXT, lng TEXT ) '''); await db.execute(''' CREATE TABLE IF NOT EXISTS ${TableName.faceDetectTimes}( id INTEGER PRIMARY KEY AUTOINCREMENT, faceDetectTimes INTEGER ) '''); await db.execute(''' CREATE TABLE IF NOT EXISTS ${TableName.captainNotification}( id INTEGER PRIMARY KEY AUTOINCREMENT, faceDetectTimes INTEGER ) '''); }, ); } Future>> getAllData(String table) async { Database db = await instance.database; return await db.query(table); } Future>> getCustomQuery(String query) async { Database db = await instance.database; return await db.rawQuery(query); } Future insertData(Map map, String table) async { Database db = await instance.database; return await db.insert(table, map); } Future insertMapLocation(Map map, String table) async { Database db = await instance.database; // Check if the record already exists (based on latitude, longitude, and name) var existing = await db.query( table, where: 'latitude = ? AND longitude = ? AND name = ?', whereArgs: [map['latitude'], map['longitude'], map['name']], ); if (existing.isNotEmpty) { // If record exists, update the createdAt field with the current timestamp var updatedMap = Map.from(map); updatedMap['createdAt'] = DateTime.now().toIso8601String(); // Update timestamp return await db.update( table, updatedMap, where: 'id = ?', whereArgs: [existing.first['id']], // Update the existing row ); } else { // If record doesn't exist, insert new record with the current timestamp map['createdAt'] = DateTime.now().toIso8601String(); return await db.insert(table, map); } } Future updateData(Map map, String table, int id) async { Database db = await instance.database; return await db.update(table, map, where: 'id = ?', whereArgs: [id]); } Future deleteData(String table, int id) async { Database db = await instance.database; return await db.delete(table, where: 'id = ?', whereArgs: [id]); } Future deleteAllData(String table) async { Database db = await instance.database; return await db.delete(table); } }