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 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, ); final String id; final DateTime expiresOn; final String token; final Map modelJson; SessionFreshness get freshness { final now = DateTime.now(); if (now.isAfter(expiresOn)) return SessionFreshness.expired; if (expiresOn.difference(now) < const Duration(days: 30)) { return SessionFreshness.stale; } return SessionFreshness.fresh; } Map toMap() => { 'id': id, 'expiresOn': expiresOn.millisecondsSinceEpoch, 'token': token, 'modelJson': modelJson, }; String toJson() => json.encode(toMap()); }