d4t_formulas/lib/database/database_service.dart

95 lines
3 KiB
Dart
Raw Normal View History

2026-03-01 12:51:14 +00:00
import '../formula_models.dart';
import 'corpus_database_interface.dart';
import 'formulas_database.dart';
import 'package:d4rt_formulas/formula_models.dart' as models;
// Extension to add corpus loading/saving functionality to FormulasDatabase
extension CorpusDatabaseExtension on FormulasDatabase {
// Method to load corpus elements from database
Future<List<models.FormulaElement>> loadCorpusElements() async {
final elements = await getAllFormulaElements();
final List<models.FormulaElement> parsedElements = [];
for (final element in elements) {
try {
2026-03-01 12:51:14 +00:00
final parsed = SetUtils.parseCorpusElements('[${element.elementText}]');
2026-02-17 16:35:51 +00:00
print("PARSED:$element");
parsedElements.addAll(parsed);
} catch (e) {
print('Error parsing database element: $e');
2026-02-17 16:35:51 +00:00
print("NOT PARSED: $element");
// Skip invalid elements but continue processing others
continue;
}
}
2026-02-07 16:01:37 +00:00
return parsedElements;
}
2026-02-07 16:01:37 +00:00
// Method to save corpus elements to database
Future<void> saveCorpusElements(List<models.FormulaElement> elements) async {
// Clear existing elements first
await delete(formulaElements).go();
2026-02-07 16:01:37 +00:00
// Insert new elements
for (final element in elements) {
await insertFormulaElement(element.toStringLiteral());
}
}
2026-02-26 20:49:32 +00:00
// Method to update a formula in the database by name
Future<bool> updateFormula(models.Formula formula) async {
final elements = await getAllFormulaElements();
for (final element in elements) {
try {
2026-03-06 08:10:15 +00:00
final parsed = SetUtils.parseCorpusElements('[${element.elementText}]');
2026-02-26 20:49:32 +00:00
if (parsed.isNotEmpty && parsed.first is models.Formula) {
final existingFormula = parsed.first as models.Formula;
if (existingFormula.name == formula.name) {
// Update this element
await updateFormulaElement(
element.id,
formula.toStringLiteral()
);
return true;
}
}
} catch (e) {
print('Error parsing database element during update: $e');
continue;
}
}
return false; // Formula not found
}
// Method to add a new formula to the database
Future<void> addFormula(models.Formula formula) async {
await insertFormulaElement(formula.toStringLiteral());
}
// Method to delete a formula from the database by name
Future<bool> deleteFormula(String formulaName) async {
final elements = await getAllFormulaElements();
for (final element in elements) {
try {
2026-03-06 08:10:15 +00:00
final parsed = SetUtils.parseCorpusElements('[${element.elementText}]');
2026-02-26 20:49:32 +00:00
if (parsed.isNotEmpty && parsed.first is models.Formula) {
final existingFormula = parsed.first as models.Formula;
if (existingFormula.name == formulaName) {
await deleteFormulaElement(element.id);
return true;
}
}
} catch (e) {
print('Error parsing database element during delete: $e');
continue;
}
}
return false; // Formula not found
}
2026-02-17 16:35:51 +00:00
}