myhomie_app/lib/Helpers/DatabaseHelper.dart
2024-01-24 16:00:41 +01:00

108 lines
3.0 KiB
Dart

import 'package:myhomie_app/Models/homieContext.dart';
import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';
class DatabaseHelper {
static final _databaseName = "homie_database.db";
static final _databaseVersion = 1;
static final table = 'homieAppContext';
static final columnUserId = 'userId';
static final columnHomeId = 'homeId';
static final columnToken = 'token';
static final columnHost = 'host';
static final columnLanguage = 'language';
DatabaseHelper._privateConstructor();
static final DatabaseHelper instance = DatabaseHelper._privateConstructor();
static Database? _database;
Future<Database> get database async =>
_database ??= await _initDatabase();
_initDatabase() async {
String path = join(await getDatabasesPath(), _databaseName);
return await openDatabase(path,
version: _databaseVersion, onCreate: _onCreate);
}
// SQL code to create the database table
Future _onCreate(Database db, int version) async {
await db.execute('''
CREATE TABLE $table (
$columnUserId TEXT NOT NULL PRIMARY KEY,
$columnHomeId TEXT,
$columnHost TEXT NOT NULL,
$columnLanguage TEXT NOT NULL,
$columnToken TEXT NOT NULL
)
''');
}
Future<int> insert(HomieAppContext homieAppContext) async {
Database db = await instance.database;
var test = await instance.getData();
if(test != null) {
var res = await db.update(table, homieAppContext.toMap());
return res;
} else {
var res = await db.insert(table, homieAppContext.toMap());
return res;
}
}
Future<void> update(HomieAppContext homieAppContext) async {
// Get a reference to the database.
final db = await instance.database;
await db.update(
'homieAppContext',
homieAppContext.toMap(),
where: "$columnHomeId = ?",
whereArgs: [homieAppContext.userId],
);
}
Future<List<Map<String, dynamic>>> queryAllRows() async {
Database db = await instance.database;
var res = await db.query(table, orderBy: "$columnUserId DESC");
return res;
}
Future<int> delete(String userId) async {
Database db = await instance.database;
return await db.delete(table, where: '$columnUserId = ?', whereArgs: [userId]);
}
Future<List<Map<String, Object?>>> clearTable() async {
Database db = await instance.database;
return await db.rawQuery("DELETE FROM $table");
}
Future<HomieAppContext?> getData() async {
HomieAppContext? homieAppContext;
await DatabaseHelper.instance.queryAllRows().then((value) {
print("value");
print(value);
value.forEach((element) {
print("DB - CONTEXT --- ");
homieAppContext = HomieAppContext(
userId: element["userId"],
homeId: element["homeId"],
token: element["token"],
host: element["host"],
language: element["language"]
);
});
}).catchError((error) {
print(error);
});
return homieAppContext;
}
}