diff --git a/src/basic_memory/fileio.py b/src/basic_memory/fileio.py index e33c771d..4b29fbc6 100644 --- a/src/basic_memory/fileio.py +++ b/src/basic_memory/fileio.py @@ -118,3 +118,28 @@ async def read_entity_file(entities_path: Path, entity_id: str) -> Entity: entity_type=entity_type, observations=observations ) + + +async def delete_entity_file(entities_path: Path, entity_id: str) -> bool: + """ + Delete an entity's file from the filesystem. + + Args: + entities_path: Path to entities directory + entity_id: ID of entity to delete + + Returns: + True if successful or file didn't exist + + Raises: + FileOperationError: If file deletion fails + """ + entity_path = entities_path / f"{entity_id}.md" + + if entity_path.exists(): + try: + entity_path.unlink() + except Exception as e: + raise FileOperationError(f"Failed to delete entity file: {str(e)}") from e + + return True \ No newline at end of file diff --git a/src/basic_memory/services.py b/src/basic_memory/services.py index ba24386b..d6b21137 100644 --- a/src/basic_memory/services.py +++ b/src/basic_memory/services.py @@ -9,7 +9,7 @@ from basic_memory.models import Observation as DbObservation from basic_memory.repository import EntityRepository, ObservationRepository from basic_memory.schemas import Entity, Observation from basic_memory.fileio import ( - read_entity_file, write_entity_file, + read_entity_file, write_entity_file, delete_entity_file, FileOperationError, EntityNotFoundError ) @@ -85,14 +85,10 @@ class EntityService: async def delete_entity(self, entity_id: str) -> bool: """Delete entity from filesystem and database.""" - entity_path = self.entities_path / f"{entity_id}.md" - - if entity_path.exists(): - try: - entity_path.unlink() - except Exception as e: - raise FileOperationError(f"Failed to delete entity file: {str(e)}") from e + # Delete from filesystem first (source of truth) + await delete_entity_file(self.entities_path, entity_id) + # Delete from database index await self.entity_repo.delete(entity_id) return True