xiao_pet_activity_tracker/lib/db/dbprovider.dart
2024-10-08 16:22:54 +02:00

82 lines
2.1 KiB
Dart

import 'dart:convert';
import 'dart:math';
import 'package:pet_activity_tracker/db/models.dart';
import 'package:sqflite/sqflite.dart';
import 'package:sqflite/sqlite_api.dart';
class DBProvider {
late Database db;
Future<Database> open(String path) async {
db = await databaseFactory.openDatabase(path,
options: OpenDatabaseOptions(
version: 1,
onCreate: (db, version) async {
var batch = db.batch();
_createTablesV1(batch);
_insertWeeklyData(batch);
await batch.commit();
},
onDowngrade: onDatabaseDowngradeDelete));
return db;
}
Future<DailyLog?> getDailyLog(int id) async {
List<Map<String, Object?>> maps =
await db.query("DailyLog", where: 'id = ?', whereArgs: [id]);
if (maps.isNotEmpty) {
return DailyLog.fromMap(maps.first);
}
return null;
}
Future<DailyLog> insertDailyLog(DailyLog dl) async {
dl.id = await db.insert("DailyLog", dl.toMap());
return dl;
}
Future<int> updateDailyLog(DailyLog dl) async {
return await db
.update("DailyLog", dl.toMap(), where: 'id = ?', whereArgs: [dl.id]);
}
Future<int> updateWeeklyLog(WeeklyLog wl) async {
return await db.rawUpdate(
'UPDATE WeeklyLog SET log = ? WHERE day = ?', [wl.log, wl.day]);
}
/// Create tables
void _createTablesV1(Batch batch) {
batch.execute('DROP TABLE IF EXISTS WeeklyLog');
batch.execute('''CREATE TABLE WeeklyLog (
day TEXT PRIMARY KEY,
seq INTEGER ,
log TEXT
)''');
batch.execute('DROP TABLE IF EXISTS DailyLog');
batch.execute('''CREATE TABLE DailyLog (
id INTEGER PRIMARY KEY,
day TEXT,
ts INTEGER,
ttl INTEGER,
series TEXT,
log TEXT
)''');
}
void _insertWeeklyData(Batch batch) {
//final _random = Random();
List<String> weekDays = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
for (var day in weekDays) {
batch.insert('WeeklyLog', {
'seq': 1,
'day': day,
'log': json.encode({'rest': 0, 'walk': 0, 'run': 0, 'stair': 0})
});
}
}
}