From 15e4513b0f38cac09f60a67f00a4454adba2fd9a Mon Sep 17 00:00:00 2001 From: BroodjeAap Date: Fri, 6 Nov 2020 17:44:32 +0100 Subject: [PATCH] refactored the database part a bunch, now have two tables, session and answer --- lib/pages/practice/PracticeAnswer.dart | 8 +-- lib/pages/practice/PracticeDatabase.dart | 53 +++++++++++--------- lib/pages/practice/PracticePage.dart | 6 ++- lib/pages/practice/PracticeThingCentury.dart | 2 +- lib/pages/practice/PracticeThingLeap.dart | 2 +- lib/pages/practice/PracticeThingMod.dart | 2 +- lib/pages/practice/PracticeThingMonth.dart | 2 +- 7 files changed, 40 insertions(+), 35 deletions(-) diff --git a/lib/pages/practice/PracticeAnswer.dart b/lib/pages/practice/PracticeAnswer.dart index c249b27..018a7a1 100644 --- a/lib/pages/practice/PracticeAnswer.dart +++ b/lib/pages/practice/PracticeAnswer.dart @@ -6,10 +6,10 @@ import 'package:ohthatsa/util/Months.dart'; class PracticeAnswer { final int question; final int answer; - final PracticeType practiceType; DateTime dateTime; + int sessionId = -1; - PracticeAnswer(this.question, this.answer, this.practiceType){ + PracticeAnswer(this.question, this.answer){ dateTime = DateTime.now(); } @@ -19,8 +19,8 @@ class PracticeAnswer { return { "question": question, "answer": answer, - "type": practiceType.toString().split(".").last, - "time": timeFormat + "time": timeFormat, + "sessionId": sessionId }; } } \ No newline at end of file diff --git a/lib/pages/practice/PracticeDatabase.dart b/lib/pages/practice/PracticeDatabase.dart index e98befb..db159a8 100644 --- a/lib/pages/practice/PracticeDatabase.dart +++ b/lib/pages/practice/PracticeDatabase.dart @@ -4,47 +4,50 @@ import 'package:sqflite/sqflite.dart'; import 'package:path/path.dart'; class PracticeDatabase { - Database _database; - - static PracticeDatabase getDatabase() { - PracticeDatabase practiceDatabase = PracticeDatabase(); - practiceDatabase.open(); - return practiceDatabase; - } - - _onCreate(Database database, int version) async { + static _onCreate(Database database, int version) async { String types = PracticeType.values.map((type) => "'${type.toString().split(".").last}'").join(", "); await database.execute(''' + CREATE TABLE PracticeSession ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + type TEXT CHECK( type IN ($types) ) NOT NULL + ); + '''); + await database.execute(''' CREATE TABLE PracticeAnswer ( id INTEGER PRIMARY KEY AUTOINCREMENT, + sessionId INTEGER NOT NULL, question INTEGER NOT NULL, answer INTEGER NOT NULL, - type TEXT CHECK( type IN ($types) ) NOT NULL, - time DATETIME NOT NULL + time DATETIME NOT NULL, + + FOREIGN KEY(sessionId) REFERENCES PracticeSession(id) ); '''); } - Future open() async{ + static Future getDatabase() async { var databasesPath = await getDatabasesPath(); final databaseName = "answers.db"; - var path = join(databasesPath, databaseName); - this._database = await openDatabase( - path, - version: 1, - onCreate: _onCreate + + return await openDatabase( + join(databasesPath, databaseName), + version: 1, + onCreate: _onCreate ); } - Future insertAnswer(PracticeAnswer answer) async { - this._database.insert("PracticeAnswer", answer.toMap()); - } - - static insertAnswers(List answers) async { - var practiceDatabase = PracticeDatabase(); - await practiceDatabase.open(); + static insertAnswers(List answers, PracticeType practiceType) async { + var db = await getDatabase(); + int sessionId = await db.insert("PracticeSession", + { + "type": practiceType.toString().split(".").last + } + ); + var batch = db.batch(); answers.forEach((answer) { - practiceDatabase.insertAnswer(answer); + answer.sessionId = sessionId; + batch.insert("PracticeAnswer", answer.toMap()); }); + await batch.commit(); } } \ No newline at end of file diff --git a/lib/pages/practice/PracticePage.dart b/lib/pages/practice/PracticePage.dart index 62ff36a..c4b1cbc 100644 --- a/lib/pages/practice/PracticePage.dart +++ b/lib/pages/practice/PracticePage.dart @@ -25,6 +25,7 @@ class PracticePage extends StatefulWidget { class _PracticeState extends State { int _startCount = 0; bool _showCorrect = true; + PracticeType practiceType; PracticeThing practiceThing; int _count = 0; @@ -34,7 +35,8 @@ class _PracticeState extends State { _PracticeState(PracticeSetup practiceSetup){ this._startCount = practiceSetup.count; this._showCorrect = practiceSetup.showCorrect; - switch(practiceSetup.practiceType){ + practiceType = practiceSetup.practiceType; + switch(practiceType){ case (PracticeType.month): { this.practiceThing = PracticeThingMonth(); break; @@ -213,7 +215,7 @@ class _PracticeState extends State { practiceThing.next() }); if((_startCount - _count) == 0) { - PracticeDatabase.insertAnswers(practiceThing.answers); + PracticeDatabase.insertAnswers(practiceThing.answers, practiceType); showDialog( context: context, child: finishedPracticeDialog() diff --git a/lib/pages/practice/PracticeThingCentury.dart b/lib/pages/practice/PracticeThingCentury.dart index f280ec6..37dc785 100644 --- a/lib/pages/practice/PracticeThingCentury.dart +++ b/lib/pages/practice/PracticeThingCentury.dart @@ -15,7 +15,7 @@ class PracticeThingCentury extends PracticeThing { @override bool answer(int answer) { - answers.add(PracticeAnswer(current, answer, PracticeType.month)); + answers.add(PracticeAnswer(current, answer)); final correctAnswer = DayCalculator.getCenturyValue(current); return answer == correctAnswer; } diff --git a/lib/pages/practice/PracticeThingLeap.dart b/lib/pages/practice/PracticeThingLeap.dart index 3444516..f160b84 100644 --- a/lib/pages/practice/PracticeThingLeap.dart +++ b/lib/pages/practice/PracticeThingLeap.dart @@ -14,7 +14,7 @@ class PracticeThingLeap extends PracticeThing { @override bool answer(int answer) { - answers.add(PracticeAnswer(current, answer, PracticeType.month)); + answers.add(PracticeAnswer(current, answer)); final correctAnswer = DayCalculator.isLeapYear(current); return (answer != 0) == correctAnswer; } diff --git a/lib/pages/practice/PracticeThingMod.dart b/lib/pages/practice/PracticeThingMod.dart index eeeffce..61f7402 100644 --- a/lib/pages/practice/PracticeThingMod.dart +++ b/lib/pages/practice/PracticeThingMod.dart @@ -12,7 +12,7 @@ class PracticeThingMod extends PracticeThing { @override bool answer(int answer) { - answers.add(PracticeAnswer(current, answer, PracticeType.mod)); + answers.add(PracticeAnswer(current, answer)); final correctAnswer = current % 7; return answer == correctAnswer; } diff --git a/lib/pages/practice/PracticeThingMonth.dart b/lib/pages/practice/PracticeThingMonth.dart index 38a1736..7317df8 100644 --- a/lib/pages/practice/PracticeThingMonth.dart +++ b/lib/pages/practice/PracticeThingMonth.dart @@ -15,7 +15,7 @@ class PracticeThingMonth extends PracticeThing { } @override bool answer(int answer) { - answers.add(PracticeAnswer(current.i, answer, PracticeType.month)); + answers.add(PracticeAnswer(current.i, answer)); return current.value == answer; }