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 {
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 <String, dynamic>{
"question": question,
"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';
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<Database> 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<PracticeAnswer> answers) async {
var practiceDatabase = PracticeDatabase();
await practiceDatabase.open();
static insertAnswers(List<PracticeAnswer> answers, PracticeType practiceType) async {
var db = await getDatabase();
int sessionId = await db.insert("PracticeSession",
<String, dynamic>{
"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();
}
}

View file

@ -25,6 +25,7 @@ class PracticePage extends StatefulWidget {
class _PracticeState extends State<PracticePage> {
int _startCount = 0;
bool _showCorrect = true;
PracticeType practiceType;
PracticeThing practiceThing;
int _count = 0;
@ -34,7 +35,8 @@ class _PracticeState extends State<PracticePage> {
_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<PracticePage> {
practiceThing.next()
});
if((_startCount - _count) == 0) {
PracticeDatabase.insertAnswers(practiceThing.answers);
PracticeDatabase.insertAnswers(practiceThing.answers, practiceType);
showDialog(
context: context,
child: finishedPracticeDialog()

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}