write method

  1. @override
Future<void> write(
  1. String sessionId,
  2. Map<String, dynamic> data
)
override

Store session data

Implementation

@override
Future<void> write(String sessionId, Map<String, dynamic> data) async {
  if (!_isConnected) {
    throw StateError('Redis connection not available');
  }

  final key = 'session:$sessionId';
  final jsonData = data.toString(); // Convert to JSON-like string

  // Store with TTL based on last activity
  final lastActivityStr = data['last_activity'] as String?;
  if (lastActivityStr != null) {
    try {
      final lastActivity = DateTime.parse(lastActivityStr);
      const ttl = Duration(hours: 24); // Default 24 hours
      final expiry = lastActivity.add(ttl);
      final ttlSeconds = expiry.difference(DateTime.now()).inSeconds;

      if (ttlSeconds > 0) {
        await _command.send_object(['SETEX', key, ttlSeconds, jsonData]);
        return;
      }
    } catch (e) {
      // Fall back to regular SET
    }
  }

  await _command.send_object(['SET', key, jsonData]);
}