import time from typing import Any from fastapi import Request from app.models.schemas import VisitRequest from app.use_cases.camoufox.visit import VisitUseCase from app.libs.log import log from app.libs.aras_response import aras_ok, aras_server_error class ApiController: def __init__(self) -> None: self.visit_use_case = VisitUseCase() def ping(self) -> dict[str, Any]: log.logger.info("Ping received") return aras_ok("pong") async def visit(self, request: Request, payload: VisitRequest) -> dict[str, Any]: start_time = time.time() try: options = payload.model_dump(exclude={"url"}) options["headers"] = dict(request.scope.get("raw_headers_dict", {})) log.logger.info(f"Visiting URL: {payload.url}") log.logger.debug(f"Options: {options}") response = await self.visit_use_case.execute(str(payload.url), options) return aras_ok("OK", response) except Exception as exc: log.logger.error(exc) return aras_server_error(str(exc)) finally: duration = time.time() - start_time log.logger.info(f"Execution time: {duration:.2f}s")