"""Search routes — scrape + reverse-image-search.""" from __future__ import annotations from typing import List, Optional from fastapi import APIRouter, Depends from pydantic import BaseModel from api.deps import get_search_service from models.jobs import JobKind, JobRequest from services.search_service import SearchService router = APIRouter() class SearchRequest(BaseModel): image_url: Optional[str] = None image_base64: Optional[str] = None providers: List[str] = [] scrape_url: Optional[str] = None @router.post("/reverse") async def reverse_search(req: SearchRequest, svc: SearchService = Depends(get_search_service)): job_req = JobRequest( kind=JobKind.SEARCH, image_url=req.image_url, image_base64=req.image_base64, providers=req.providers, options={"scrape_url": req.scrape_url} if req.scrape_url else {}, ) return await svc.search(job_req) @router.post("/scrape") async def scrape(req: SearchRequest, svc: SearchService = Depends(get_search_service)): job_req = JobRequest( kind=JobKind.SEARCH, image_url=req.image_url, image_base64=req.image_base64, providers=req.providers, options={"scrape_url": req.scrape_url} if req.scrape_url else {}, ) return await svc.search(job_req)