refactored the database part a bunch, now have two tables, session and answer

This commit is contained in:
BroodjeAap 2020-11-06 17:44:32 +01:00
parent 9fb029da20
commit 15e4513b0f
7 changed files with 40 additions and 35 deletions

View file

@ -6,10 +6,10 @@ import 'package:ohthatsa/util/Months.dart';
class PracticeAnswer { class PracticeAnswer {
final int question; final int question;
final int answer; final int answer;
final PracticeType practiceType;
DateTime dateTime; DateTime dateTime;
int sessionId = -1;
PracticeAnswer(this.question, this.answer, this.practiceType){ PracticeAnswer(this.question, this.answer){
dateTime = DateTime.now(); dateTime = DateTime.now();
} }
@ -19,8 +19,8 @@ class PracticeAnswer {
return <String, dynamic>{ return <String, dynamic>{
"question": question, "question": question,
"answer": answer, "answer": answer,
"type": practiceType.toString().split(".").last, "time": timeFormat,
"time": timeFormat "sessionId": sessionId
}; };
} }
} }

View file

@ -4,47 +4,50 @@ import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart'; import 'package:path/path.dart';
class PracticeDatabase { class PracticeDatabase {
Database _database; static _onCreate(Database database, int version) async {
static PracticeDatabase getDatabase() {
PracticeDatabase practiceDatabase = PracticeDatabase();
practiceDatabase.open();
return practiceDatabase;
}
_onCreate(Database database, int version) async {
String types = PracticeType.values.map((type) => "'${type.toString().split(".").last}'").join(", "); String types = PracticeType.values.map((type) => "'${type.toString().split(".").last}'").join(", ");
await database.execute(''' 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 ( CREATE TABLE PracticeAnswer (
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
sessionId INTEGER NOT NULL,
question INTEGER NOT NULL, question INTEGER NOT NULL,
answer 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<Database> getDatabase() async {
var databasesPath = await getDatabasesPath(); var databasesPath = await getDatabasesPath();
final databaseName = "answers.db"; final databaseName = "answers.db";
var path = join(databasesPath, databaseName);
this._database = await openDatabase( return await openDatabase(
path, join(databasesPath, databaseName),
version: 1, version: 1,
onCreate: _onCreate onCreate: _onCreate
); );
} }
Future insertAnswer(PracticeAnswer answer) async { static insertAnswers(List<PracticeAnswer> answers, PracticeType practiceType) async {
this._database.insert("PracticeAnswer", answer.toMap()); var db = await getDatabase();
} int sessionId = await db.insert("PracticeSession",
<String, dynamic>{
static insertAnswers(List<PracticeAnswer> answers) async { "type": practiceType.toString().split(".").last
var practiceDatabase = PracticeDatabase(); }
await practiceDatabase.open(); );
var batch = db.batch();
answers.forEach((answer) { answers.forEach((answer) {
practiceDatabase.insertAnswer(answer); answer.sessionId = sessionId;
batch.insert("PracticeAnswer", answer.toMap());
}); });
await batch.commit();
} }
} }

View file

@ -25,6 +25,7 @@ class PracticePage extends StatefulWidget {
class _PracticeState extends State<PracticePage> { class _PracticeState extends State<PracticePage> {
int _startCount = 0; int _startCount = 0;
bool _showCorrect = true; bool _showCorrect = true;
PracticeType practiceType;
PracticeThing practiceThing; PracticeThing practiceThing;
int _count = 0; int _count = 0;
@ -34,7 +35,8 @@ class _PracticeState extends State<PracticePage> {
_PracticeState(PracticeSetup practiceSetup){ _PracticeState(PracticeSetup practiceSetup){
this._startCount = practiceSetup.count; this._startCount = practiceSetup.count;
this._showCorrect = practiceSetup.showCorrect; this._showCorrect = practiceSetup.showCorrect;
switch(practiceSetup.practiceType){ practiceType = practiceSetup.practiceType;
switch(practiceType){
case (PracticeType.month): { case (PracticeType.month): {
this.practiceThing = PracticeThingMonth(); this.practiceThing = PracticeThingMonth();
break; break;
@ -213,7 +215,7 @@ class _PracticeState extends State<PracticePage> {
practiceThing.next() practiceThing.next()
}); });
if((_startCount - _count) == 0) { if((_startCount - _count) == 0) {
PracticeDatabase.insertAnswers(practiceThing.answers); PracticeDatabase.insertAnswers(practiceThing.answers, practiceType);
showDialog( showDialog(
context: context, context: context,
child: finishedPracticeDialog() child: finishedPracticeDialog()

View file

@ -15,7 +15,7 @@ class PracticeThingCentury extends PracticeThing {
@override @override
bool answer(int answer) { bool answer(int answer) {
answers.add(PracticeAnswer(current, answer, PracticeType.month)); answers.add(PracticeAnswer(current, answer));
final correctAnswer = DayCalculator.getCenturyValue(current); final correctAnswer = DayCalculator.getCenturyValue(current);
return answer == correctAnswer; return answer == correctAnswer;
} }

View file

@ -14,7 +14,7 @@ class PracticeThingLeap extends PracticeThing {
@override @override
bool answer(int answer) { bool answer(int answer) {
answers.add(PracticeAnswer(current, answer, PracticeType.month)); answers.add(PracticeAnswer(current, answer));
final correctAnswer = DayCalculator.isLeapYear(current); final correctAnswer = DayCalculator.isLeapYear(current);
return (answer != 0) == correctAnswer; return (answer != 0) == correctAnswer;
} }

View file

@ -12,7 +12,7 @@ class PracticeThingMod extends PracticeThing {
@override @override
bool answer(int answer) { bool answer(int answer) {
answers.add(PracticeAnswer(current, answer, PracticeType.mod)); answers.add(PracticeAnswer(current, answer));
final correctAnswer = current % 7; final correctAnswer = current % 7;
return answer == correctAnswer; return answer == correctAnswer;
} }

View file

@ -15,7 +15,7 @@ class PracticeThingMonth extends PracticeThing {
} }
@override @override
bool answer(int answer) { bool answer(int answer) {
answers.add(PracticeAnswer(current.i, answer, PracticeType.month)); answers.add(PracticeAnswer(current.i, answer));
return current.value == answer; return current.value == answer;
} }