d4t_formulas/lib/database/formulas_database.dart

70 lines
2.3 KiB
Dart
Raw Normal View History

2026-02-07 16:01:37 +00:00
import 'package:drift/drift.dart';
import 'package:drift/native.dart';
import 'package:path/path.dart' as p;
import 'package:path_provider/path_provider.dart';
import 'dart:io';
part 'formulas_database.g.dart';
2026-02-09 18:11:00 +00:00
// Define the FORMULAELEMENT table to store both formulas and units as text
class FormulaElements extends Table {
2026-02-07 16:01:37 +00:00
IntColumn get id => integer().autoIncrement()();
2026-02-09 18:11:00 +00:00
TextColumn get elementText => text()();
2026-02-07 16:01:37 +00:00
}
2026-02-09 18:11:00 +00:00
@DriftDatabase(tables: [FormulaElements])
2026-02-07 16:01:37 +00:00
class FormulasDatabase extends _$FormulasDatabase {
FormulasDatabase() : super(_openConnection());
@override
int get schemaVersion => 1;
2026-02-09 18:11:00 +00:00
// Method to insert a new formula element (either formula or unit)
Future<int> insertFormulaElement(String elementText) {
return into(formulaElements).insert(FormulaElementsCompanion.insert(elementText: elementText));
2026-02-07 16:01:37 +00:00
}
2026-02-09 18:11:00 +00:00
// Method to get all formula elements
Future<List<FormulaElement>> getAllFormulaElements() {
return select(formulaElements).get();
2026-02-07 16:01:37 +00:00
}
2026-02-09 18:11:00 +00:00
// Method to get a formula element by ID
Future<FormulaElement?> getFormulaElementById(int id) {
return (select(formulaElements)..where((tbl) => tbl.id.equals(id))).getSingleOrNull();
2026-02-07 16:01:37 +00:00
}
2026-02-09 18:11:00 +00:00
// Method to update a formula element
Future<void> updateFormulaElement(int id, String newElementText) {
return (update(formulaElements)..where((tbl) => tbl.id.equals(id)))
.write(FormulaElementsCompanion.insert(elementText: newElementText));
2026-02-07 16:01:37 +00:00
}
2026-02-09 18:11:00 +00:00
// Method to delete a formula element
Future<void> deleteFormulaElement(int id) {
return (delete(formulaElements)..where((tbl) => tbl.id.equals(id))).go();
2026-02-07 16:01:37 +00:00
}
}
LazyDatabase _openConnection() {
return LazyDatabase(() async {
// Determine the platform-specific database directory
Directory dbDirectory;
if (Platform.isLinux || Platform.isWindows || Platform.isMacOS) {
final appSupportDir = await getApplicationSupportDirectory();
dbDirectory = Directory(p.join(appSupportDir.path, 'd4rt_formulas'));
} else {
dbDirectory = await getApplicationDocumentsDirectory();
}
// Ensure the directory exists
await dbDirectory.create(recursive: true);
// Create the database file in the platform-specific directory
final file = File(p.join(dbDirectory.path, 'formulas.sqlite'));
2026-02-07 16:01:37 +00:00
return NativeDatabase.createInBackground(file);
});
}