claude fix: improve product scraping and debugging features

This commit is contained in:
2026-01-19 21:26:45 +01:00
parent dcb25e0163
commit 20bdc7ff70
131 changed files with 544285 additions and 59 deletions

View File

@@ -1,11 +1,10 @@
from __future__ import annotations
from fastapi import APIRouter, BackgroundTasks, Depends, HTTPException, status
from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session
from backend.app.api.deps import get_db
from backend.app.db import crud, schemas
from backend.app.scraper.runner import scrape_product
router = APIRouter(prefix="/products", tags=["products"])
@@ -16,16 +15,18 @@ def list_products(skip: int = 0, limit: int = 50, db: Session = Depends(get_db))
return crud.list_products_with_snapshots(db, skip=skip, limit=limit)
@router.post("", response_model=schemas.ProductRead, status_code=status.HTTP_201_CREATED)
@router.post("", response_model=schemas.ProductWithSnapshot, status_code=status.HTTP_201_CREATED)
def create_product(
payload: schemas.ProductCreate,
background_tasks: BackgroundTasks,
payload: schemas.ProductCreateWithSnapshot,
db: Session = Depends(get_db),
) -> schemas.ProductRead:
product = crud.create_product(db, payload)
# Déclenche automatiquement le scraping après création
background_tasks.add_task(scrape_product, product.id)
return product
) -> schemas.ProductWithSnapshot:
"""
Crée un produit avec ses données de snapshot initiales.
Les données proviennent de la prévisualisation (/scrape/preview).
"""
product = crud.create_product_with_snapshot(db, payload)
# Retourner le produit enrichi avec le snapshot créé
return crud.get_product_with_snapshot(db, product.id)
@router.get("/{product_id}", response_model=schemas.ProductWithSnapshot)

View File

@@ -1,12 +1,29 @@
from __future__ import annotations
from fastapi import APIRouter, BackgroundTasks
from fastapi import APIRouter, BackgroundTasks, HTTPException
from pydantic import BaseModel, HttpUrl
from backend.app.scraper.runner import scrape_all, scrape_product
from backend.app.scraper.runner import scrape_all, scrape_preview, scrape_product
router = APIRouter(prefix="/scrape", tags=["scrape"])
class PreviewRequest(BaseModel):
url: HttpUrl
@router.post("/preview")
def preview_scrape(payload: PreviewRequest):
"""
Scrape une URL Amazon sans enregistrer en base.
Retourne les données pour prévisualisation avant ajout.
"""
result = scrape_preview(str(payload.url))
if not result["success"] and result["error"]:
raise HTTPException(status_code=422, detail=result["error"])
return result
@router.post("/product/{product_id}")
def trigger_single(product_id: int, background_tasks: BackgroundTasks):
# on délègue le vrai travail à un background task rapide