44 lines
1.2 KiB
Dart
44 lines
1.2 KiB
Dart
|
import 'dart:async';
|
||
|
import 'dart:convert';
|
||
|
|
||
|
import 'package:sqflite/sqflite.dart';
|
||
|
import 'package:fooder/models/diary.dart';
|
||
|
import 'package:fooder/storage/based.dart';
|
||
|
|
||
|
class DiaryStorage extends StorageBased {
|
||
|
DiaryStorage({required super.db});
|
||
|
|
||
|
static Future<void> createTable(Batch batch) async {
|
||
|
batch.execute('''
|
||
|
CREATE TABLE diary(
|
||
|
date TEXT PRIMARY KEY,
|
||
|
content TEXT,
|
||
|
needs_sync BOOLEAN,
|
||
|
last_sync TEXT
|
||
|
)
|
||
|
''');
|
||
|
}
|
||
|
|
||
|
Future<Diary?> get({required DateTime date}) async {
|
||
|
var result = await db
|
||
|
.query('diary', where: 'date = ?', whereArgs: [date.toIso8601String()]);
|
||
|
if (result.isEmpty) {
|
||
|
return null;
|
||
|
}
|
||
|
return Diary.fromJson(
|
||
|
jsonDecode((result.first as Map<String, dynamic>)['content']));
|
||
|
}
|
||
|
|
||
|
Future<void> insert(Diary diary, {bool needsSync = false}) async {
|
||
|
var data = {
|
||
|
'id': diary.id,
|
||
|
'date': diary.date.toIso8601String(),
|
||
|
'content': jsonEncode(diary.toMap()),
|
||
|
'needs_sync': needsSync,
|
||
|
'last_sync': needsSync ? DateTime.now().toIso8601String() : null,
|
||
|
};
|
||
|
await db.insert('diary', data,
|
||
|
conflictAlgorithm: ConflictAlgorithm.replace);
|
||
|
}
|
||
|
}
|