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
79 lines
2.1 KiB
3 weeks ago
|
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]);
|
||
|
});
|
||
|
}
|
||
|
}
|