from __future__ import annotations from threading import RLock from time_machine.domain.errors import EncounterNotFoundError from time_machine.domain.models import EncounterSession class InMemorySessionRepository: def __init__(self) -> None: self._encounters: dict[str, EncounterSession] = {} self._lock = RLock() def save(self, encounter: EncounterSession) -> None: with self._lock: self._encounters[encounter.encounter_id] = encounter def get(self, encounter_id: str) -> EncounterSession: with self._lock: encounter = self._encounters.get(encounter_id) if encounter is None: raise EncounterNotFoundError(encounter_id) return encounter