claude fix: improve product scraping and debugging features
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user