getSession method

Future<Map<String, dynamic>?> getSession(
  1. String? sessionId
)

Implementation

Future<Map<String, dynamic>?> getSession(String? sessionId) async {
  if (sessionId == null) return null;
  switch (driver) {
    case 'memory':
      final s = _memoryStore[sessionId];
      if (s == null || _isExpired(s['expires_at'])) {
        _memoryStore.remove(sessionId);
        return null;
      }
      return s;

    case 'file':
      final sessions = await _readSessions();
      final s = sessions[sessionId];
      if (s == null) return null;

      if (_isExpired(s['expires_at'])) {
        sessions.remove(sessionId);
        await _writeSessions(sessions);
        return null;
      }
      return s;

    case 'db':
      final result = await DB.query(
        'SELECT data, expires_at FROM $dbTable WHERE id = ?',
        positionalParams: [sessionId],
      );
      if (result.isEmpty) return null;

      final row = result.first;
      final expiresAt = DateTime.parse(row['expires_at']);

      if (expiresAt.isBefore(DateTime.now())) {
        await DB.query('DELETE FROM $dbTable WHERE id = ?',
            positionalParams: [sessionId]);
        return null;
      }

      return jsonDecode(row['data']);

    default:
      throw Exception('Unknown SESSION_DRIVER: $driver');
  }
}