[feat] change str id type to UUID

This commit is contained in:
Azamat 2026-04-02 23:09:04 +03:00
parent e629e34c4d
commit 770af1fe76
11 changed files with 150 additions and 173 deletions

View file

@ -14,7 +14,7 @@ from usecase.interface import (
@dataclass(frozen=True, slots=True)
class CreateSandboxCommand:
chat_id: str
chat_id: UUID
class CreateSandbox:
@ -35,7 +35,7 @@ class CreateSandbox:
self._ttl = ttl
def execute(self, command: CreateSandboxCommand) -> SandboxSession:
chat_id = _canonical_chat_id(command.chat_id)
chat_id = command.chat_id
with self._locker.lock(chat_id):
session = self._repository.get_active_by_chat_id(chat_id)
@ -44,22 +44,14 @@ class CreateSandbox:
if session is not None and session.expires_at > now:
self._logger.info(
'sandbox_reused',
attrs={
'chat_id': chat_id,
'session_id': session.session_id,
'container_id': session.container_id,
},
attrs=_sandbox_attrs(session),
)
return session
if session is not None:
self._logger.info(
'sandbox_replaced',
attrs={
'chat_id': chat_id,
'session_id': session.session_id,
'container_id': session.container_id,
},
attrs=_sandbox_attrs(session),
)
self._runtime.stop(session.container_id)
self._repository.delete(session.session_id)
@ -75,11 +67,7 @@ class CreateSandbox:
self._repository.save(new_session)
self._logger.info(
'sandbox_created',
attrs={
'chat_id': chat_id,
'session_id': new_session.session_id,
'container_id': new_session.container_id,
},
attrs=_sandbox_attrs(new_session),
)
return new_session
@ -107,14 +95,11 @@ class CleanupExpiredSandboxes:
try:
cleaned_session = self._cleanup_session(session)
except Exception as exc:
attrs = _sandbox_attrs(session)
attrs['error'] = type(exc).__name__
self._logger.error(
'sandbox_clean_failed',
attrs={
'chat_id': session.chat_id,
'session_id': session.session_id,
'container_id': session.container_id,
'error': type(exc).__name__,
},
attrs=attrs,
)
continue
@ -124,11 +109,7 @@ class CleanupExpiredSandboxes:
cleaned_sessions.append(cleaned_session)
self._logger.info(
'sandbox_cleaned',
attrs={
'chat_id': cleaned_session.chat_id,
'session_id': cleaned_session.session_id,
'container_id': cleaned_session.container_id,
},
attrs=_sandbox_attrs(cleaned_session),
)
return cleaned_sessions
@ -151,9 +132,13 @@ class CleanupExpiredSandboxes:
return current_session
def _new_session_id() -> str:
return uuid4().hex
def _new_session_id() -> UUID:
return uuid4()
def _canonical_chat_id(chat_id: str) -> str:
return str(UUID(str(chat_id).strip()))
def _sandbox_attrs(session: SandboxSession) -> dict[str, str]:
return {
'chat_id': str(session.chat_id),
'session_id': str(session.session_id),
'container_id': session.container_id,
}