diff --git a/lib/models/timer.dart b/lib/models/timer.dart index c9dc055..0092590 100644 --- a/lib/models/timer.dart +++ b/lib/models/timer.dart @@ -1,33 +1,45 @@ import 'package:meta/meta.dart'; import 'package:time_progress_calculator/persistence/timer_entity.dart'; +import 'package:time_progress_calculator/uuid.dart'; @immutable class Timer { + final String id; final DateTime startTime; final DateTime endTime; - Timer(this.startTime, this.endTime); + Timer(this.startTime, this.endTime, {String id}) + : id = id ?? Uuid().generateV4(); - Timer copyWith({DateTime startTime, DateTime endTime}) { - return Timer(startTime ?? this.startTime, endTime ?? this.endTime); + Timer copyWith({String id, DateTime startTime, DateTime endTime}) { + return Timer( + startTime ?? this.startTime, + endTime ?? this.endTime, + id: id ?? this.id, + ); } @override - int get hashCode => startTime.hashCode ^ endTime.hashCode; + int get hashCode => id.hashCode ^ startTime.hashCode ^ endTime.hashCode; @override bool operator ==(Object other) => identical(this, other) || other is Timer && runtimeType == other.runtimeType && + id == other.id && startTime == other.startTime && endTime == other.endTime; TimerEntity toEntity() { - return TimerEntity(startTime, endTime); + return TimerEntity(id, startTime, endTime); } static Timer fromEntity(TimerEntity entity) { - return Timer(entity.startTime, entity.endTime); + return Timer( + entity.startTime, + entity.endTime, + id: entity.id ?? Uuid().generateV4(), + ); } } diff --git a/lib/persistence/timer_entity.dart b/lib/persistence/timer_entity.dart index 08e384f..81d0ca5 100644 --- a/lib/persistence/timer_entity.dart +++ b/lib/persistence/timer_entity.dart @@ -1,32 +1,36 @@ class TimerEntity { + final String id; final DateTime startTime; final DateTime endTime; - TimerEntity(this.startTime, this.endTime); + TimerEntity(this.id, this.startTime, this.endTime); @override - int get hashCode => startTime.hashCode ^ endTime.hashCode; + int get hashCode => id.hashCode ^ startTime.hashCode ^ endTime.hashCode; @override bool operator ==(Object other) => identical(this, other) || other is TimerEntity && runtimeType == other.runtimeType && + id == other.id && startTime == other.startTime && endTime == other.endTime; Map toJson() { return { + "id": id, "startTime": startTime.millisecondsSinceEpoch, "endTime": startTime.millisecondsSinceEpoch }; } static TimerEntity fromJson(Map json) { - DateTime startTime = + final String id = json["id"] as String; + final DateTime startTime = DateTime.fromMillisecondsSinceEpoch(json["startTime"] as int); - DateTime endTime = + final DateTime endTime = DateTime.fromMillisecondsSinceEpoch(json["endTime"] as int); - return TimerEntity(startTime, endTime); + return TimerEntity(id, startTime, endTime); } }