{
"event": "PreToolUse",
"tool_name": "Write",
"tool_input": {
"file_path": "\/var\/www\/dev.campus.systemische-tools.de\/crawler\/src\/application\/use_cases\/check_external_link.py",
"content": "from __future__ import annotations\n\nfrom datetime import timedelta\n\nfrom src.domain.entities.external_check import ExternalCheck\nfrom src.domain.ports.clock_port import ClockPort\nfrom src.domain.ports.external_check_repository_port import ExternalCheckRepositoryPort\nfrom src.domain.ports.http_fetcher_port import HttpFetcherPort\nfrom src.domain.services.url_normalizer import UrlNormalizer\n\n\nclass CheckExternalLinkUseCase:\n def __init__(\n self,\n *,\n fetcher: HttpFetcherPort,\n checks: ExternalCheckRepositoryPort,\n normalizer: UrlNormalizer,\n clock: ClockPort,\n cache_ttl: timedelta,\n ) -> None:\n self._fetcher = fetcher\n self._checks = checks\n self._normalizer = normalizer\n self._clock = clock\n self._cache_ttl = cache_ttl\n\n async def execute(self, raw_url: str) -> ExternalCheck:\n normalized = self._normalizer.normalize(raw_url)\n cached = self._checks.get_by_hash(normalized.url_hash)\n now = self._clock.now()\n if cached is not None and (now - cached.checked_at) < self._cache_ttl:\n return cached\n result = await self._fetcher.fetch(normalized)\n return self._checks.upsert(\n ExternalCheck(\n id=None,\n url_hash=normalized.url_hash,\n url=normalized.url,\n http_status=result.status_code or None,\n final_url=result.final_url,\n response_time_ms=result.response_time_ms,\n checked_at=now,\n error=result.error,\n ),\n )\n"
}
}
{
"tool_response": {
"type": "create",
"filePath": "\/var\/www\/dev.campus.systemische-tools.de\/crawler\/src\/application\/use_cases\/check_external_link.py",
"content": "from __future__ import annotations\n\nfrom datetime import timedelta\n\nfrom src.domain.entities.external_check import ExternalCheck\nfrom src.domain.ports.clock_port import ClockPort\nfrom src.domain.ports.external_check_repository_port import ExternalCheckRepositoryPort\nfrom src.domain.ports.http_fetcher_port import HttpFetcherPort\nfrom src.domain.services.url_normalizer import UrlNormalizer\n\n\nclass CheckExternalLinkUseCase:\n def __init__(\n self,\n *,\n fetcher: HttpFetcherPort,\n checks: ExternalCheckRepositoryPort,\n normalizer: UrlNormalizer,\n clock: ClockPort,\n cache_ttl: timedelta,\n ) -> None:\n self._fetcher = fetcher\n self._checks = checks\n self._normalizer = normalizer\n self._clock = clock\n self._cache_ttl = cache_ttl\n\n async def execute(self, raw_url: str) -> ExternalCheck:\n normalized = self._normalizer.normalize(raw_url)\n cached = self._checks.get_by_hash(normalized.url_hash)\n now = self._clock.now()\n if cached is not None and (now - cached.checked_at) < self._cache_ttl:\n return cached\n result = await self._fetcher.fetch(normalized)\n return self._checks.upsert(\n ExternalCheck(\n id=None,\n url_hash=normalized.url_hash,\n url=normalized.url,\n http_status=result.status_code or None,\n final_url=result.final_url,\n response_time_ms=result.response_time_ms,\n checked_at=now,\n error=result.error,\n ),\n )\n",
"structuredPatch": [],
"originalFile": null,
"userModified": false
}
}