49 lines
1.3 KiB
Dart
49 lines
1.3 KiB
Dart
import 'dart:convert';
|
|
|
|
enum SessionFreshness { fresh, stale, expired }
|
|
|
|
class SessionEntity {
|
|
const SessionEntity({
|
|
required this.id,
|
|
required this.expiresOn,
|
|
required this.token,
|
|
required this.modelJson,
|
|
});
|
|
|
|
factory SessionEntity.fromMap(Map<String, dynamic> map) => SessionEntity(
|
|
id: map['id'],
|
|
expiresOn: DateTime.fromMillisecondsSinceEpoch(
|
|
map['expiresOn'] as int,
|
|
),
|
|
token: map['token'] as String,
|
|
modelJson: map['modelJson'],
|
|
);
|
|
|
|
factory SessionEntity.fromJson(String source) => SessionEntity.fromMap(
|
|
json.decode(source) as Map<String, dynamic>,
|
|
);
|
|
|
|
final String id;
|
|
final DateTime expiresOn;
|
|
final String token;
|
|
final Map<String, dynamic> modelJson;
|
|
|
|
SessionFreshness get freshness {
|
|
final now = DateTime.now();
|
|
if (now.isAfter(expiresOn)) return SessionFreshness.expired;
|
|
if (expiresOn.difference(now) < const Duration(days: 7)) {
|
|
return SessionFreshness.stale;
|
|
}
|
|
return SessionFreshness.fresh;
|
|
}
|
|
|
|
Map<String, dynamic> toMap() => <String, dynamic>{
|
|
'id': id,
|
|
'expiresOn': expiresOn.millisecondsSinceEpoch,
|
|
'token': token,
|
|
'modelJson': modelJson,
|
|
};
|
|
|
|
String toJson() => json.encode(toMap());
|
|
}
|