From f5ad70fb28855c02c938e597f11728691a400bc9 Mon Sep 17 00:00:00 2001
From: Kima <kimavideos97@gmail.com>
Date: Sat, 30 Dec 2023 13:27:25 +0100
Subject: [PATCH] added self notes thing to db

---
 filcnaplo/lib/database/init.dart  |  4 ++++
 filcnaplo/lib/database/query.dart | 24 ++++++++++++++++++++++++
 filcnaplo/lib/database/store.dart | 16 ++++++++++++++++
 3 files changed, 44 insertions(+)

diff --git a/filcnaplo/lib/database/init.dart b/filcnaplo/lib/database/init.dart
index d00885f..1c0b14b 100644
--- a/filcnaplo/lib/database/init.dart
+++ b/filcnaplo/lib/database/init.dart
@@ -58,6 +58,8 @@ const userDataDB = DatabaseStruct("user_data", {
   "goal_averages": String,
   "goal_befores": String,
   "goal_pin_dates": String,
+  // todo and notes
+  "todo_items": String, "self_notes": String,
 });
 
 Future<void> createTable(Database db, DatabaseStruct struct) =>
@@ -115,6 +117,8 @@ Future<Database> initDB(DatabaseProvider database) async {
       "goal_averages": "{}",
       "goal_befores": "{}",
       "goal_pin_dates": "{}",
+      // todo and notes
+      "todo_items": "{}", "self_notes": "[]"
     });
   } catch (error) {
     print("ERROR: migrateDB: $error");
diff --git a/filcnaplo/lib/database/query.dart b/filcnaplo/lib/database/query.dart
index 1905d57..3ebd953 100644
--- a/filcnaplo/lib/database/query.dart
+++ b/filcnaplo/lib/database/query.dart
@@ -1,5 +1,6 @@
 import 'dart:convert';
 import 'package:filcnaplo/api/providers/database_provider.dart';
+import 'package:filcnaplo/models/self_note.dart';
 import 'package:filcnaplo/models/subject_lesson_count.dart';
 import 'package:filcnaplo/models/user.dart';
 import 'package:filcnaplo_kreta_api/models/week.dart';
@@ -281,4 +282,27 @@ class UserDatabaseQuery {
     return (jsonDecode(goalPinDatesJson) as Map)
         .map((key, value) => MapEntry(key.toString(), value.toString()));
   }
+
+  // get todo items and notes
+  Future<Map<String, bool>> toDoItems({required String userId}) async {
+    List<Map> userData =
+        await db.query("user_data", where: "id = ?", whereArgs: [userId]);
+    if (userData.isEmpty) return {};
+    String? toDoItemsJson = userData.elementAt(0)["todo_items"] as String?;
+    if (toDoItemsJson == null) return {};
+    return (jsonDecode(toDoItemsJson) as Map).map((key, value) =>
+        MapEntry(key.toString(), value.toString().toLowerCase() == 'true'));
+  }
+
+  Future<List<SelfNote>> getSelfNotes({required String userId}) async {
+    List<Map> userData =
+        await db.query("user_data", where: "id = ?", whereArgs: [userId]);
+    if (userData.isEmpty) return [];
+    String? selfNotesJson = userData.elementAt(0)["self_notes"] as String?;
+    if (selfNotesJson == null) return [];
+    List<SelfNote> selfNotes = (jsonDecode(selfNotesJson) as List)
+        .map((e) => SelfNote.fromJson(e))
+        .toList();
+    return selfNotes;
+  }
 }
diff --git a/filcnaplo/lib/database/store.dart b/filcnaplo/lib/database/store.dart
index e31adf9..7d23579 100644
--- a/filcnaplo/lib/database/store.dart
+++ b/filcnaplo/lib/database/store.dart
@@ -1,4 +1,5 @@
 import 'dart:convert';
+import 'package:filcnaplo/models/self_note.dart';
 import 'package:filcnaplo/models/subject_lesson_count.dart';
 import 'package:filcnaplo_kreta_api/models/week.dart';
 // ignore: depend_on_referenced_packages
@@ -177,4 +178,19 @@ class UserDatabaseStore {
     await db.update("user_data", {"goal_pin_dates": goalPinDatesJson},
         where: "id = ?", whereArgs: [userId]);
   }
+
+  // todo and notes
+  Future<void> storeToDoItem(Map<String, bool> items,
+      {required String userId}) async {
+    String toDoItemsJson = jsonEncode(items);
+    await db.update("user_data", {"todo_items": toDoItemsJson},
+        where: "id = ?", whereArgs: [userId]);
+  }
+
+  Future<void> storeSelfNotes(List<SelfNote> absences,
+      {required String userId}) async {
+    String selfNotesJson = jsonEncode(absences.map((e) => e.json).toList());
+    await db.update("user_data", {"self_notes": selfNotesJson},
+        where: "id = ?", whereArgs: [userId]);
+  }
 }