Files
Gov-chat-bot/backend/app/services/idempotency.py
2026-03-26 12:49:43 +09:00

29 lines
916 B
Python

import json
from typing import Optional
class IdempotencyCache:
def __init__(self, redis_client):
self.redis = redis_client
self.ttl = 60 # 기본 TTL (Phase 0B에서 settings로 교체 예정)
def _key(self, tenant_id: str, request_id: str) -> str:
return f"idempotency:{tenant_id}:{request_id}"
async def get(self, tenant_id: str, request_id: Optional[str]) -> Optional[dict]:
if request_id is None:
return None
raw = await self.redis.get(self._key(tenant_id, request_id))
if raw is None:
return None
return json.loads(raw)
async def set(self, tenant_id: str, request_id: Optional[str], result_dict: dict) -> None:
if request_id is None:
return
await self.redis.setex(
self._key(tenant_id, request_id),
self.ttl,
json.dumps(result_dict),
)