Coverage for arclith / application / use_cases / update.py: 100%

16 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-03-25 15:02 +0100

1from datetime import datetime, timezone 

2from typing import Generic, TypeVar 

3 

4from arclith.domain.models.entity import Entity 

5from arclith.domain.ports.logger import Logger 

6from arclith.domain.ports.repository import Repository 

7 

8T = TypeVar("T", bound=Entity) 

9 

10 

11class UpdateUseCase(Generic[T]): 

12 def __init__(self, repository: Repository[T], logger: Logger) -> None: 

13 self._repository = repository 

14 self._logger = logger 

15 

16 async def execute(self, entity: T) -> T: 

17 entity = entity.model_copy(update={ 

18 "updated_at": datetime.now(timezone.utc), 

19 "version": entity.version + 1, 

20 }) 

21 self._logger.info("✏️ Updating entity", type=type(entity).__name__, uuid=str(entity.uuid)) 

22 result = await self._repository.update(entity) 

23 self._logger.info("✅ Entity updated", type=type(result).__name__, uuid=str(result.uuid)) 

24 return result 

25