from __future__ import annotations from functools import lru_cache from backend.app.config import Settings, get_settings from backend.app.db.bookmark_repository import BookmarkRepository from backend.app.db.task_repository import TaskRepository from backend.app.fs.filesystem_adapter import FilesystemAdapter from backend.app.security.path_guard import PathGuard from backend.app.services.bookmark_service import BookmarkService from backend.app.services.browse_service import BrowseService from backend.app.services.copy_task_service import CopyTaskService from backend.app.services.file_ops_service import FileOpsService from backend.app.services.move_task_service import MoveTaskService from backend.app.services.task_service import TaskService from backend.app.tasks_runner import TaskRunner @lru_cache(maxsize=1) def get_path_guard() -> PathGuard: settings: Settings = get_settings() return PathGuard(root_aliases=settings.root_aliases) @lru_cache(maxsize=1) def get_filesystem_adapter() -> FilesystemAdapter: return FilesystemAdapter() @lru_cache(maxsize=1) def get_task_repository() -> TaskRepository: settings: Settings = get_settings() return TaskRepository(db_path=settings.task_db_path) @lru_cache(maxsize=1) def get_bookmark_repository() -> BookmarkRepository: settings: Settings = get_settings() return BookmarkRepository(db_path=settings.task_db_path) @lru_cache(maxsize=1) def get_task_runner() -> TaskRunner: return TaskRunner(repository=get_task_repository(), filesystem=get_filesystem_adapter()) async def get_browse_service() -> BrowseService: return BrowseService(path_guard=get_path_guard(), filesystem=get_filesystem_adapter()) async def get_file_ops_service() -> FileOpsService: return FileOpsService(path_guard=get_path_guard(), filesystem=get_filesystem_adapter()) async def get_task_service() -> TaskService: return TaskService(repository=get_task_repository()) async def get_copy_task_service() -> CopyTaskService: return CopyTaskService( path_guard=get_path_guard(), repository=get_task_repository(), runner=get_task_runner(), ) async def get_move_task_service() -> MoveTaskService: return MoveTaskService( path_guard=get_path_guard(), repository=get_task_repository(), runner=get_task_runner(), ) async def get_bookmark_service() -> BookmarkService: return BookmarkService(path_guard=get_path_guard(), repository=get_bookmark_repository())