| import time |
| import uuid |
| from typing import Optional, Tuple |
| from .redis_connection import RedisConnection |
| from src.llm.core.config import settings |
|
|
| class SessionManager: |
| def __init__(self): |
| self.redis = RedisConnection().client |
| |
| def generate_ids(self, existing_user_id: Optional[str] = None) -> Tuple[str, str]: |
| """ |
| Generate or validate user/session IDs |
| Returns: (user_id, session_id) |
| """ |
| user_id = self._get_or_create_user_id(existing_user_id) |
| session_id = self._create_session(user_id) |
| return user_id, session_id |
|
|
| def _get_or_create_user_id(self, existing_user_id: Optional[str]) -> str: |
| if existing_user_id: |
| if self.redis.exists(f"user:{existing_user_id}"): |
| return existing_user_id |
| |
| return str(uuid.uuid4()) |
| return str(uuid.uuid4()) |
|
|
| def _create_session(self, user_id: str) -> str: |
| session_id = str(uuid.uuid4()) |
| |
| self.redis.hset(f"session:{session_id}", mapping={ |
| "user_id": user_id, |
| "created_at": str(time.time()), |
| "activity": str(time.time()) |
| }) |
| |
| self.redis.expire(f"session:{session_id}", settings.SESSION_TTL) |
| |
| self.redis.sadd(f"user:{user_id}:sessions", session_id) |
| return session_id |
|
|
| def validate_session(self, session_id: str) -> Optional[str]: |
| """Returns user_id if valid session""" |
| if self.redis.exists(f"session:{session_id}"): |
| |
| self.redis.hset(f"session:{session_id}", "activity", str(time.time())) |
| return self.redis.hget(f"session:{session_id}", "user_id") |
| return None |