File size: 1,321 Bytes
aac350d | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | """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)
|