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 get database async { if (_database != null) return _database!; _database = await _initDb(); return _database!; } // Initialize the database Future _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 saveTraining(TrainingSession session) async { final db = await database; await db.insert( 'training', session.toMap(), conflictAlgorithm: ConflictAlgorithm.replace, ); } // Get training history (last 20 entries) Future> getHistory() async { final db = await database; final List> maps = await db.query( 'training', orderBy: 'date DESC', limit: 20, ); return List.generate(maps.length, (i) { return TrainingSession.fromMap(maps[i]); }); } }