You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
2.1 KiB

import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
import 'package:uuid/uuid.dart';
import '../models/problem_model.dart';
class LocalDatabase {
static final LocalDatabase _instance = LocalDatabase._internal();
factory LocalDatabase() => _instance;
static Database? _database;
LocalDatabase._internal();
Future<Database> get database async {
if (_database != null) return _database!;
_database = await _initDatabase();
return _database!;
}
Future<Database> _initDatabase() async {
String path = join(await getDatabasesPath(), 'problems.db');
return await openDatabase(path, version: 1, onCreate: _onCreate);
}
Future<void> _onCreate(Database db, int version) async {
await db.execute('''
CREATE TABLE problems(
id TEXT PRIMARY KEY,
description TEXT NOT NULL,
location TEXT NOT NULL,
imagePaths TEXT NOT NULL,
createdAt TEXT NOT NULL,
isUploaded INTEGER NOT NULL,
boundInfo TEXT
)
''');
}
Future<int> insertProblem(Problem problem) async {
final db = await database;
problem.id = Uuid().v4();
return await db.insert('problems', problem.toMap());
}
Future<List<Problem>> getProblems() async {
final db = await database;
final List<Map<String, dynamic>> maps = await db.query('problems');
return List.generate(maps.length, (i) {
return Problem.fromMap(maps[i]);
});
}
Future<int> updateProblem(Problem problem) async {
final db = await database;
return await db.update(
'problems',
problem.toMap(),
where: 'id = ?',
whereArgs: [problem.id],
);
}
Future<int> deleteProblem(int id) async {
final db = await database;
return await db.delete('problems', where: 'id = ?', whereArgs: [id]);
}
Future<List<Problem>> getUnuploadedProblems() async {
final db = await database;
final List<Map<String, dynamic>> maps = await db.query(
'problems',
where: 'isUploaded = ?',
whereArgs: [0],
);
return List.generate(maps.length, (i) {
return Problem.fromMap(maps[i]);
});
}
}