Commit bd57794

derdilla <derdilla06@gmail.com>
2023-06-02 19:47:32
added ram only BloodPressureModel implementation for testing
1 parent 549f63b
lib/model/blood_pressure.dart
@@ -87,8 +87,8 @@ class BloodPressureModel extends ChangeNotifier {
     return UnmodifiableListView(recordsInRange);
   }
 
-  Future<List<Map<String, Object?>>> get bloodPressureModel {
-    return _database.query('bloodPressureModel', columns: ['*']);
+  Future<List<BloodPressureRecord>> get all async {
+    return _convert(await _database.query('bloodPressureModel', columns: ['*']));
   }
   
   Future<int> get count async {
lib/model/blood_pressure_analyzer.dart
@@ -32,12 +32,12 @@ class BloodPressureAnalyser {
     List<List<int>> allPulValuesRelativeToTime = [[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]];
 
     // sort all data
-    final dbRes = await _model.bloodPressureModel;
+    final dbRes = await _model.all;
     for (var entry in dbRes) {
-      DateTime ts = DateTime.fromMillisecondsSinceEpoch(entry['timestamp'] as int);
-      allDiaValuesRelativeToTime[ts.hour].add(entry['diastolic'] as int);
-      allSysValuesRelativeToTime[ts.hour].add(entry['systolic'] as int);
-      allPulValuesRelativeToTime[ts.hour].add(entry['pulse'] as int);
+      DateTime ts = DateTime.fromMillisecondsSinceEpoch(entry.creationTime.millisecondsSinceEpoch);
+      allDiaValuesRelativeToTime[ts.hour].add(entry.diastolic);
+      allSysValuesRelativeToTime[ts.hour].add(entry.systolic);
+      allPulValuesRelativeToTime[ts.hour].add(entry.pulse);
     }
     for(int i = 0; i < 24; i++) {
       if (allDiaValuesRelativeToTime[i].isEmpty) {
test/ram_only_implementations.dart
@@ -0,0 +1,92 @@
+import 'dart:collection';
+
+import 'package:blood_pressure_app/model/blood_pressure.dart';
+import 'package:flutter/material.dart';
+
+class RamBloodPressureModel extends ChangeNotifier implements BloodPressureModel {
+  final List<BloodPressureRecord> _records = [];
+
+
+  @override
+  Future<void> add(BloodPressureRecord measurement) async {
+    _records.add(measurement);
+    notifyListeners();
+  }
+
+  @override
+  Future<int> get avgDia async => _records.map((e) => e.diastolic).reduce((a, b) => a+b) ~/ _records.length;
+
+  @override
+  Future<int> get avgPul async => _records.map((e) => e.pulse).reduce((a, b) => a+b) ~/ _records.length;
+
+  @override
+  Future<int> get avgSys async => _records.map((e) => e.systolic).reduce((a, b) => a+b) ~/ _records.length;
+
+  @override
+  Future<List<BloodPressureRecord>> get all async => _records;
+
+  @override
+  void close() {}
+
+  @override
+  Future<int> get count async => _records.length;
+
+  @override
+  Future<void> delete(DateTime timestamp) async {
+    _records.removeWhere((element) => element.creationTime.isAtSameMomentAs(timestamp));
+  }
+
+  @override
+  Future<DateTime> get firstDay async {
+    _records.sort((a, b) => a.creationTime.compareTo(b.creationTime));
+    return _records.first.creationTime;
+  }
+
+  @override
+  Future<DateTime> get lastDay async {
+    _records.sort((a, b) => a.creationTime.compareTo(b.creationTime));
+    return _records.last.creationTime;
+  }
+
+  @override
+  Future<UnmodifiableListView<BloodPressureRecord>> getInTimeRange(DateTime from, DateTime to) async {
+    List<BloodPressureRecord> recordsInTime = [];
+    for(final e in _records) {
+      if (e.creationTime.isAfter(from) && e.creationTime.isBefore(to)) {
+        recordsInTime.add(e);
+      }
+    }
+    return UnmodifiableListView(recordsInTime);
+  }
+
+  @override
+  Future<int> get maxDia async => _records.reduce((a,b) => (a.diastolic>=b.diastolic) ? a : b).diastolic;
+
+  @override
+  Future<int> get maxPul async => _records.reduce((a,b) => (a.pulse>=b.pulse) ? a : b).pulse;
+
+  @override
+  Future<int> get maxSys async => _records.reduce((a,b) => (a.systolic>=b.systolic) ? a : b).systolic;
+
+  @override
+  Future<int> get minDia async => _records.reduce((a,b) => (a.diastolic<=b.diastolic) ? a : b).diastolic;
+
+  @override
+  Future<int> get minPul async => _records.reduce((a,b) => (a.pulse<=b.pulse) ? a : b).pulse;
+
+  @override
+  Future<int> get minSys async => _records.reduce((a,b) => (a.systolic<=b.systolic) ? a : b).systolic;
+
+  @override
+  Future<void> import(void Function(bool p1, String? p2) callback) {
+    // TODO: implement import
+    throw UnimplementedError();
+  }
+
+  @override
+  Future<void> save(void Function(bool success, String? msg) callback, {bool exportAsText = false}) {
+    // TODO: implement save
+    throw UnimplementedError();
+  }
+
+}
\ No newline at end of file