diff --git a/backend/product/tasks.py b/backend/product/tasks.py index 36491ad..f0e00c4 100644 --- a/backend/product/tasks.py +++ b/backend/product/tasks.py @@ -17,13 +17,16 @@ TOROB_WEBHOOK_MIN_INTERVAL_SECONDS = 3.1 TOROB_WEBHOOK_MAX_RETRIES = 3 -def _shop_product_url(product: ProductModel) -> str: +def _shop_product_url(product: ProductModel, variant: ProductVariant | None = None) -> str: domain = getattr(settings, "DOMAIN", None) or getattr(settings, "API_DOMAIN", None) or "" if domain.startswith("http://") or domain.startswith("https://"): base = domain.rstrip("/") else: base = f"https://{domain}".rstrip("/") if domain else "" - return f"{base}/product/{product.slug}/" + url = f"{base}/product/{product.slug}/" + if variant is not None: + url = f"{url}?variant={variant.pk}" + return url def _variant_page_unique(product: ProductModel, variant: ProductVariant) -> str: @@ -124,31 +127,31 @@ def send_torob_product_webhook(product_ids): if not product.slug: continue - page_url = _shop_product_url(product) - parsed = urlparse(page_url) - if not (parsed.scheme in {"http", "https"} and parsed.netloc): - logger.warning("Skipping product %s due to invalid page_url: %s", product.pk, page_url) - continue - hosts.add(parsed.netloc.lower()) - variants = list(product.variants.all()) if not variants: continue for variant in variants: + variant_page_url = _shop_product_url(product, variant) + parsed = urlparse(variant_page_url) + if not (parsed.scheme in {"http", "https"} and parsed.netloc): + logger.warning("Skipping variant %s due to invalid page_url: %s", variant.pk, variant_page_url) + continue + hosts.add(parsed.netloc.lower()) + # Validate variant has images before sending to Torob # Per spec: image_links is required, so skip variants without images images = list(variant.images.all()) has_product_image = bool(product.image) has_variant_images = bool(images) - + if not (has_product_image or has_variant_images): logger.debug(f"Skipping variant {variant.pk} for product {product.pk} - no images available") continue - + items.append( { - "page_url": page_url, + "page_url": variant_page_url, "page_unique": _variant_page_unique(product, variant), } )