kettlebell-tracker/lib/services/database_helper.dart

78 lines
2 KiB
Dart

import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
import 'package:kettlebell_tracker/models/training_session.dart';
class DatabaseHelper {
static final DatabaseHelper _instance = DatabaseHelper._internal();
factory DatabaseHelper() => _instance;
DatabaseHelper._internal();
static Database? _database;
Future<Database> get database async {
if (_database != null) return _database!;
_database = await _initDb();
return _database!;
}
// Initialize the database
Future<Database> _initDb() async {
final dbPath = await getDatabasesPath();
final path = join(dbPath, 'giant_training.db');
return await openDatabase(
path,
version: 2, // Version erhöhen!
onCreate: _onCreate,
onUpgrade: _onUpgrade,
);
}
void _onUpgrade(Database db, int oldVersion, int newVersion) async {
if (oldVersion < 2) {
await db.execute('ALTER TABLE training ADD COLUMN program TEXT');
await db.execute('ALTER TABLE training ADD COLUMN blockDay INTEGER');
}
}
// Create the database table
void _onCreate(Database db, int version) async {
await db.execute('''
CREATE TABLE training (
id INTEGER PRIMARY KEY AUTOINCREMENT,
date TEXT NOT NULL,
sets INTEGER,
weightLeft REAL,
weightRight REAL,
repsPerSet INTEGER,
duration INTEGER,
program TEXT,
blockDay INTEGER
)
''');
}
// Save a training session
Future<void> saveTraining(TrainingSession session) async {
final db = await database;
await db.insert(
'training',
session.toMap(),
conflictAlgorithm: ConflictAlgorithm.replace,
);
}
// Get training history (last 20 entries)
Future<List<TrainingSession>> getHistory() async {
final db = await database;
final List<Map<String, dynamic>> maps = await db.query(
'training',
orderBy: 'date DESC',
limit: 20,
);
return List.generate(maps.length, (i) {
return TrainingSession.fromMap(maps[i]);
});
}
}