first commit
This commit is contained in:
commit
efa5080897
127 changed files with 18610 additions and 0 deletions
50
backend/app/voice/session_store.py
Normal file
50
backend/app/voice/session_store.py
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
import json
|
||||
from datetime import datetime, timezone
|
||||
from typing import Any
|
||||
|
||||
import redis.asyncio as redis
|
||||
|
||||
from ..config import settings
|
||||
|
||||
_redis_client: redis.Redis | None = None
|
||||
|
||||
|
||||
def _session_key(session_token: str) -> str:
|
||||
return f"voice:session:{session_token}"
|
||||
|
||||
|
||||
async def get_redis() -> redis.Redis:
|
||||
global _redis_client
|
||||
if _redis_client is None:
|
||||
_redis_client = redis.from_url(settings.redis_url, decode_responses=True)
|
||||
return _redis_client
|
||||
|
||||
|
||||
async def save_session(session_token: str, data: dict[str, Any]) -> None:
|
||||
client = await get_redis()
|
||||
payload = dict(data)
|
||||
payload["session_token"] = session_token
|
||||
payload.setdefault("created_at", datetime.now(timezone.utc).isoformat())
|
||||
await client.set(_session_key(session_token), json.dumps(payload), ex=settings.voice_session_ttl_seconds)
|
||||
|
||||
|
||||
async def get_session(session_token: str) -> dict[str, Any] | None:
|
||||
client = await get_redis()
|
||||
raw = await client.get(_session_key(session_token))
|
||||
if not raw:
|
||||
return None
|
||||
return json.loads(raw)
|
||||
|
||||
|
||||
async def update_session(session_token: str, **fields: Any) -> dict[str, Any] | None:
|
||||
session = await get_session(session_token)
|
||||
if not session:
|
||||
return None
|
||||
session.update(fields)
|
||||
await save_session(session_token, session)
|
||||
return session
|
||||
|
||||
|
||||
async def delete_session(session_token: str) -> None:
|
||||
client = await get_redis()
|
||||
await client.delete(_session_key(session_token))
|
||||
Loading…
Add table
Add a link
Reference in a new issue