Commit bc0336f
Changed files (6)
health_data_store
lib
src
extensions
types
test
src
health_data_store/lib/src/extensions/datetime_seconds.dart
@@ -0,0 +1,9 @@
+/// Add the ability to interact with the original seconds based unix timestamp.
+extension DateTimeS on DateTime {
+ /// The number of seconds since the "Unix epoch" 1970-01-01T00:00:00Z (UTC).
+ int get secondsSinceEpoch => millisecondsSinceEpoch ~/ 1000;
+
+ /// Constructs a new DateTime instance with the given [secondsSinceEpoch].
+ static DateTime fromSecondsSinceEpoch(int secondsSinceEpoch)
+ => DateTime.fromMillisecondsSinceEpoch(secondsSinceEpoch * 1000);
+}
health_data_store/lib/src/repositories/blood_pressure_repository.dart
@@ -1,6 +1,7 @@
import 'package:health_data_store/health_data_store.dart';
import 'package:health_data_store/src/database_helper.dart';
import 'package:health_data_store/src/database_manager.dart';
+import 'package:health_data_store/src/extensions/datetime_seconds.dart';
import 'package:health_data_store/src/repositories/repository.dart';
import 'package:sqflite_common/sqflite.dart';
@@ -20,7 +21,7 @@ class BloodPressureRepository extends Repository<BloodPressureRecord> {
assert(record.sys != null || record.dia != null || record.pul != null,
"Adding records that don't contain values(sys,dia,pul) can't be accessed"
'and should therefore not be added to the repository.');
- final timeSec = record.time.millisecondsSinceEpoch ~/ 1000;
+ final timeSec = record.time.secondsSinceEpoch;
await _db.transaction((txn) async {
final entryID = await DBHelper.getEntryID(
txn,
@@ -63,7 +64,7 @@ class BloodPressureRepository extends Repository<BloodPressureRecord> {
for (final r in results) {
final timeS = r['timestampUnixS'] as int;
final newRec = BloodPressureRecord(
- time: DateTime.fromMillisecondsSinceEpoch(timeS * 1000),
+ time: DateTimeS.fromSecondsSinceEpoch(timeS),
sys: r['sys'] as int?,
dia: r['dia'] as int?,
pul: r['pul'] as int?,
@@ -95,7 +96,7 @@ class BloodPressureRepository extends Repository<BloodPressureRecord> {
query += 'AND pul = ? ';
final entryResult = await txn.rawQuery(query, [
- value.time.millisecondsSinceEpoch ~/ 1000,
+ value.time.secondsSinceEpoch,
if (value.sys != null)
value.sys,
if (value.dia != null)
health_data_store/lib/src/repositories/medicine_intake_repository.dart
@@ -1,6 +1,7 @@
import 'package:health_data_store/health_data_store.dart';
import 'package:health_data_store/src/database_helper.dart';
import 'package:health_data_store/src/database_manager.dart';
+import 'package:health_data_store/src/extensions/datetime_seconds.dart';
import 'package:health_data_store/src/repositories/repository.dart';
import 'package:sqflite_common/sqflite.dart';
@@ -12,7 +13,7 @@ class MedicineIntakeRepository extends Repository<MedicineIntake> {
/// Create a repository for medicine intakes.
MedicineIntakeRepository(this._db);
- /// The [DatabaseManager] managed database
+ /// The [DatabaseManager] managed database.
final Database _db;
@override
@@ -38,7 +39,7 @@ class MedicineIntakeRepository extends Repository<MedicineIntake> {
// obtain free entry id
final id = await DBHelper.getEntryID(
- txn, intake.time.millisecondsSinceEpoch ~/ 1000,
+ txn, intake.time.secondsSinceEpoch,
['Intake'],
);
@@ -65,7 +66,7 @@ class MedicineIntakeRepository extends Repository<MedicineIntake> {
for (final r in results) {
final timeS = r['timestampUnixS'] as int;
intakes.add(MedicineIntake(
- time: DateTime.fromMillisecondsSinceEpoch(timeS * 1000),
+ time: DateTimeS.fromSecondsSinceEpoch(timeS * 1000),
dosis: r['dosis'] as double,
medicine: Medicine(
designation: r['designation'] as String,
@@ -92,7 +93,7 @@ class MedicineIntakeRepository extends Repository<MedicineIntake> {
+ ((intake.medicine.dosis != null) ? '= ?' : 'IS NULL') +
')',
[
- intake.time.millisecondsSinceEpoch ~/ 1000,
+ intake.time.secondsSinceEpoch,
intake.dosis,
intake.medicine.designation,
if (intake.medicine.color != null)
health_data_store/lib/src/types/date_range.dart
@@ -1,4 +1,5 @@
import 'package:freezed_annotation/freezed_annotation.dart';
+import 'package:health_data_store/src/extensions/datetime_seconds.dart';
part 'date_range.freezed.dart';
@@ -27,8 +28,8 @@ class DateRange with _$DateRange {
Duration get duration => end.difference(start);
/// Gets the [start] timestamp in seconds since epoch.
- int get startStamp => start.millisecondsSinceEpoch ~/ 1000;
+ int get startStamp => start.secondsSinceEpoch;
/// Gets the [end] timestamp in seconds since epoch.
- int get endStamp => end.millisecondsSinceEpoch ~/ 1000;
+ int get endStamp => end.secondsSinceEpoch;
}
health_data_store/test/src/extensions/detetime_seconds_test.dart
@@ -0,0 +1,14 @@
+import 'package:health_data_store/src/extensions/datetime_seconds.dart';
+import 'package:test/expect.dart';
+import 'package:test/scaffolding.dart';
+
+void main() {
+ test('should create DateTime correctly', () {
+ final t = DateTimeS.fromSecondsSinceEpoch(42);
+ expect(t.millisecondsSinceEpoch, 42 * 1000);
+ });
+ test('should return time since epoch correctly', () {
+ final t = DateTimeS.fromSecondsSinceEpoch(42);
+ expect(t.secondsSinceEpoch, 42);
+ });
+}
health_data_store/test/src/database_manager_test.dart
@@ -1,4 +1,5 @@
import 'package:health_data_store/src/database_manager.dart';
+import 'package:health_data_store/src/extensions/datetime_seconds.dart';
import 'package:sqflite_common/sqflite.dart';
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
import 'package:test/test.dart';
@@ -91,7 +92,7 @@ void main() {
addTearDown(db.close);
await db.db.insert('Timestamps', {
'entryID': 1,
- 'timestampUnixS': DateTime.now().millisecondsSinceEpoch ~/ 1000,
+ 'timestampUnixS': DateTime.now().secondsSinceEpoch,
});
final data = await db.db.query('Timestamps');
expect(data, hasLength(1));
@@ -99,7 +100,7 @@ void main() {
await expectLater(() async => db.db.insert('Timestamps', {
'entryID': 1,
- 'timestampUnixS': DateTime.now().millisecondsSinceEpoch ~/ 1000,
+ 'timestampUnixS': DateTime.now().secondsSinceEpoch,
}), throwsException);
await expectLater(() async => db.db.insert('Timestamps', {
'entryID': 1,