"""Точка входа слоя хранения: открыть БД, применить миграции, собрать движок.""" from __future__ import annotations import os from dataclasses import dataclass from .apply import Applier, ApplyEngine from .db import Database from .repository import Store from .state import StateSnapshot @dataclass(slots=True) class Storage: """Собранный слой хранения для приложения.""" db: Database store: Store engine: ApplyEngine def close(self) -> None: self.db.close() def __enter__(self) -> Storage: return self def __exit__(self, *exc_info: object) -> None: self.close() def open_storage( path: str | os.PathLike[str] | None = None, *, applier: Applier | None = None, actor: str = "system", auto_migrate: bool = True, ) -> Storage: """Открыть хранилище: на пустом ``/data`` схема поднимается автоматически.""" db = Database(path, auto_migrate=auto_migrate) store = Store(db) return Storage(db=db, store=store, engine=ApplyEngine(store, applier, actor=actor)) def rollback_to(engine: ApplyEngine, plan_id: int, *, reason: str = "") -> StateSnapshot: """Явный откат состояния к снимку плана (тонкая обёртка для API).""" return engine.rollback(plan_id, reason=reason)