add missing tables, functionality for sleep save and read

main
Julian Gegner 2023-02-25 18:55:49 +01:00
parent c6075848cf
commit be600f98c8
1 changed files with 71 additions and 14 deletions

View File

@ -7,6 +7,8 @@ import 'package:sqflite/sqflite.dart';
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
import 'dart:io'; import 'dart:io';
import '../models/sleep.dart';
class DatabaseService { class DatabaseService {
DatabaseService._privateConstructor(); DatabaseService._privateConstructor();
static final DatabaseService instance = DatabaseService._privateConstructor(); static final DatabaseService instance = DatabaseService._privateConstructor();
@ -17,35 +19,90 @@ class DatabaseService {
Future<Database> _initDatabase() async { Future<Database> _initDatabase() async {
Directory documentsDirectory = await getApplicationDocumentsDirectory(); Directory documentsDirectory = await getApplicationDocumentsDirectory();
String path = join(documentsDirectory.path, 'database.db'); String path = join(documentsDirectory.path, 'database.db');
return await openDatabase( return await openDatabase(path,
path, version: 1, onCreate: _onCreate, onOpen: _createTablesIfNotExists);
version: 1,
onCreate: _onCreate,
);
} }
Future _onCreate(Database db, int version) async { Future _onCreate(Database db, int version) async {
await db.execute(''' await _createTablesIfNotExists(db);
CREATE TABLE mood(
id INTEGER PRIMARY KEY,
value INTEGER,
date TEXT,
comment TEXT
)
''');
} }
Future _createTablesIfNotExists(Database db) async {
await db.execute(_createMoodTable);
await db.execute(_createSleepTable);
await db.execute(_createRelapseTable);
await db.execute(_createWorkoutTable);
}
//TODO use generic function?
Future<List<Mood>> getMoodRecords() async { Future<List<Mood>> getMoodRecords() async {
Database db = await instance.database; Database db = await instance.database;
var moodRecords = await db.query('mood'); var moodRecords = await db.query('mood');
List<Mood> moodList = moodRecords.isNotEmpty List<Mood> moodList = moodRecords.isNotEmpty
? moodRecords.map((e) => Mood(1, 'comment', DateTime.now())).toList() ? moodRecords.map((e) => Mood.fromDatabase(e)).toList()
: []; : [];
return moodList; return moodList;
} }
Future<List<Sleep>> getSleepRecords() async {
Database db = await instance.database;
var sleepRecords = await db.query('sleep');
List<Sleep> sleepList = sleepRecords.isNotEmpty
? sleepRecords.map((e) => Sleep.fromDatabase(e)).toList()
: [];
return sleepList;
}
Future<int> addMood(Mood mood) async { Future<int> addMood(Mood mood) async {
Database db = await instance.database; Database db = await instance.database;
return await db.insert('mood', mood.toMap()); return await db.insert('mood', mood.toMap());
} }
Future<int> addSleep(Sleep sleep) async {
Database db = await instance.database;
return await db.insert('sleep', sleep.toMap());
}
} }
String _createMoodTable = '''
CREATE TABLE IF NOT EXISTS mood(
id INTEGER PRIMARY KEY,
value INTEGER,
date TEXT,
comment TEXT
)
''';
String _createSleepTable = '''
CREATE TABLE IF NOT EXISTS sleep(
id INTEGER PRIMARY KEY,
value INTEGER,
date TEXT,
comment TEXT,
sleepedAtHour INTEGER,
sleepedAtMinute INTEGER,
wokeUpAtHour INTEGER,
wokeUpAtMinute INTEGER
)
''';
String _createRelapseTable = '''
CREATE TABLE IF NOT EXISTS relapse(
id INTEGER PRIMARY KEY,
date TEXT,
comment TEXT,
reason TEXT
)
''';
String _createWorkoutTable = '''
CREATE TABLE IF NOT EXISTS workout(
id INTEGER PRIMARY KEY,
date TEXT,
motivationBefore INTEGER,
commentBefore TEXT,
motivationAfter INTEGER,
commentAfter TEXT,
completed INTEGER
)
''';