arch-design-agent-skill-das.../backend/app/modules/editor/application/services.py
2026-03-23 17:02:04 +00:00

36 lines
1.5 KiB
Python

from pathlib import Path
from app.modules.editor.domain.entities import AffectedFile, EditableFile, ImpactResult
from app.modules.editor.infrastructure.file_io import read_file, write_file
from app.modules.project.domain.entities import Project
from app.modules.scanner.application.services import ScanService
from app.modules.scanner.domain.entities import ScanResult
class EditorService:
def __init__(self, scan_service: ScanService) -> None:
self._scan_service = scan_service
def get_file(self, project: Project, relative_path: str) -> EditableFile:
return read_file(Path(project.design_dir), relative_path)
def save_file(self, project: Project, relative_path: str, content: str) -> ScanResult:
write_file(Path(project.design_dir), relative_path, content)
return self._scan_service.scan(project)
def get_impact(
self, project: Project, relative_path: str, scan_result: ScanResult,
) -> ImpactResult:
"""Walk DesignDocument.downstream + TraceabilityLink to find affected files."""
affected: list[AffectedFile] = []
# Find DesignDocument for this file
for doc in scan_result.design_documents:
if doc.file_path == relative_path or relative_path.endswith(doc.file_path):
for downstream in doc.downstream:
affected.append(
AffectedFile(path=downstream, reason=f"downstream of {doc.doc_id}")
)
return ImpactResult(source_file=relative_path, affected_files=affected)