mirror of
https://github.com/vleeuwenmenno/supplements.git
synced 2025-09-11 18:29:12 +02:00
feat adds proper syncing feature
Signed-off-by: Menno van Leeuwen <menno@vleeuwen.me>
This commit is contained in:
@@ -6,7 +6,7 @@ import 'package:sqflite_common_ffi/sqflite_ffi.dart';
|
||||
|
||||
import '../models/supplement.dart';
|
||||
import '../models/supplement_intake.dart';
|
||||
import '../models/sync_enums.dart';
|
||||
import 'database_sync_service.dart';
|
||||
|
||||
class DatabaseHelper {
|
||||
static const _databaseName = 'supplements.db';
|
||||
@@ -399,7 +399,43 @@ class DatabaseHelper {
|
||||
Database db = await database;
|
||||
return await db.update(
|
||||
supplementsTable,
|
||||
{'isActive': 0},
|
||||
{
|
||||
'isActive': 0,
|
||||
'isDeleted': 1,
|
||||
'lastModified': DateTime.now().toIso8601String(),
|
||||
},
|
||||
where: 'id = ?',
|
||||
whereArgs: [id],
|
||||
);
|
||||
}
|
||||
|
||||
Future<int> permanentlyDeleteSupplement(int id) async {
|
||||
Database db = await database;
|
||||
|
||||
// For sync compatibility, we should mark as deleted rather than completely removing
|
||||
// This prevents the supplement from reappearing during sync
|
||||
|
||||
// First mark all related intakes as deleted
|
||||
await db.update(
|
||||
intakesTable,
|
||||
{
|
||||
'isDeleted': 1,
|
||||
'lastModified': DateTime.now().toIso8601String(),
|
||||
'syncStatus': RecordSyncStatus.modified.name,
|
||||
},
|
||||
where: 'supplementId = ? AND isDeleted = ?',
|
||||
whereArgs: [id, 0],
|
||||
);
|
||||
|
||||
// Then mark the supplement as deleted instead of removing it completely
|
||||
return await db.update(
|
||||
supplementsTable,
|
||||
{
|
||||
'isDeleted': 1,
|
||||
'isActive': 0, // Also ensure it's archived
|
||||
'lastModified': DateTime.now().toIso8601String(),
|
||||
'syncStatus': RecordSyncStatus.modified.name,
|
||||
},
|
||||
where: 'id = ?',
|
||||
whereArgs: [id],
|
||||
);
|
||||
@@ -411,6 +447,36 @@ class DatabaseHelper {
|
||||
return await db.insert(intakesTable, intake.toMap());
|
||||
}
|
||||
|
||||
Future<int> deleteIntake(int id) async {
|
||||
Database db = await database;
|
||||
return await db.update(
|
||||
intakesTable,
|
||||
{
|
||||
'isDeleted': 1,
|
||||
'lastModified': DateTime.now().toIso8601String(),
|
||||
},
|
||||
where: 'id = ?',
|
||||
whereArgs: [id],
|
||||
);
|
||||
}
|
||||
|
||||
Future<int> permanentlyDeleteIntake(int id) async {
|
||||
Database db = await database;
|
||||
|
||||
// For sync compatibility, mark as deleted rather than completely removing
|
||||
// This prevents the intake from reappearing during sync
|
||||
return await db.update(
|
||||
intakesTable,
|
||||
{
|
||||
'isDeleted': 1,
|
||||
'lastModified': DateTime.now().toIso8601String(),
|
||||
'syncStatus': RecordSyncStatus.modified.name,
|
||||
},
|
||||
where: 'id = ?',
|
||||
whereArgs: [id],
|
||||
);
|
||||
}
|
||||
|
||||
Future<List<SupplementIntake>> getIntakesForDate(DateTime date) async {
|
||||
Database db = await database;
|
||||
String startDate = DateTime(date.year, date.month, date.day).toIso8601String();
|
||||
@@ -477,15 +543,6 @@ class DatabaseHelper {
|
||||
return result;
|
||||
}
|
||||
|
||||
Future<int> deleteIntake(int id) async {
|
||||
Database db = await database;
|
||||
return await db.delete(
|
||||
intakesTable,
|
||||
where: 'id = ?',
|
||||
whereArgs: [id],
|
||||
);
|
||||
}
|
||||
|
||||
// Notification tracking methods
|
||||
Future<int> trackNotification({
|
||||
required int notificationId,
|
||||
@@ -637,7 +694,7 @@ class DatabaseHelper {
|
||||
List<Map<String, dynamic>> maps = await db.query(
|
||||
supplementsTable,
|
||||
where: 'syncStatus IN (?, ?)',
|
||||
whereArgs: [SyncStatus.pending.name, SyncStatus.modified.name],
|
||||
whereArgs: [RecordSyncStatus.pending.name, RecordSyncStatus.modified.name],
|
||||
orderBy: 'lastModified ASC',
|
||||
);
|
||||
return List.generate(maps.length, (i) => Supplement.fromMap(maps[i]));
|
||||
@@ -648,7 +705,7 @@ class DatabaseHelper {
|
||||
List<Map<String, dynamic>> maps = await db.query(
|
||||
intakesTable,
|
||||
where: 'syncStatus IN (?, ?)',
|
||||
whereArgs: [SyncStatus.pending.name, SyncStatus.modified.name],
|
||||
whereArgs: [RecordSyncStatus.pending.name, RecordSyncStatus.modified.name],
|
||||
orderBy: 'lastModified ASC',
|
||||
);
|
||||
return List.generate(maps.length, (i) => SupplementIntake.fromMap(maps[i]));
|
||||
@@ -658,7 +715,7 @@ class DatabaseHelper {
|
||||
Database db = await database;
|
||||
await db.update(
|
||||
supplementsTable,
|
||||
{'syncStatus': SyncStatus.synced.name},
|
||||
{'syncStatus': RecordSyncStatus.synced.name},
|
||||
where: 'syncId = ?',
|
||||
whereArgs: [syncId],
|
||||
);
|
||||
@@ -668,7 +725,7 @@ class DatabaseHelper {
|
||||
Database db = await database;
|
||||
await db.update(
|
||||
intakesTable,
|
||||
{'syncStatus': SyncStatus.synced.name},
|
||||
{'syncStatus': RecordSyncStatus.synced.name},
|
||||
where: 'syncId = ?',
|
||||
whereArgs: [syncId],
|
||||
);
|
||||
|
Reference in New Issue
Block a user