fix(product-import): no duplicar producto al re-importar el mismo título
Re-subir la misma fila de CSV (ej. para agregar más fotos o actualizar la descripción de un producto ya cargado) creaba un producto nuevo con handle distinto -- confirmado en vivo re-importando "Hello Kitty & Friends" para sumar fotos: quedaron dos productos con el mismo título en la tienda. Ahora, si el título coincide (case-insensitive/trim) con un producto ya importado, se actualiza ese producto en vez de crear uno: las fotos nuevas se agregan a las que ya tenía (no se reemplazan) y la descripción se actualiza si la fila trae una. No toca precio/cantidad/categoría/colección del producto existente. El duplicado ya creado se fusionó en vivo (fotos movidas al original, duplicado borrado) sin esperar este deploy. Co-Authored-By: Claude Sonnet 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01THZFwPzrwv6VAbuwmaf5vR
This commit is contained in:
1 parent
8fd0514e76
commit
8d543f5eb1
2 files changed
+44
-6
No files matched your search
@@ -14,6 +14,7 @@ type RowResult = {
|
||||
row: number;
|
||||
title: string;
|
||||
ok: boolean;
|
||||
action?: "created" | "updated";
|
||||
error?: string;
|
||||
};
|
||||
|
||||
@@ -91,9 +92,11 @@ const ProductImportPanel = () => {
|
||||
<div className="px-6 py-4">
|
||||
<Text size="small" className="text-ui-fg-subtle">
|
||||
Columnas: <code>titulo, descripcion, precio, categoria, coleccion, cantidad, fotos</code>. Varias fotos se
|
||||
separan con <code>;</code> dentro de la misma celda. <code>categoria</code>/<code>coleccion</code> deben
|
||||
escribirse igual que en la tienda o se dejan vacías. Cada foto se descarga y se guarda en el almacenamiento
|
||||
propio de la tienda (no queda enlazada al sitio de origen).
|
||||
separan con <code>;</code> dentro de la misma celda. Si <code>categoria</code>/<code>coleccion</code> no
|
||||
coinciden con una ya existente, se crean nuevas. Si <code>titulo</code> coincide con un producto ya
|
||||
importado, no se duplica: se le agregan las fotos nuevas y se actualiza la descripción si la fila trae una.
|
||||
Cada foto se descarga y se guarda en el almacenamiento propio de la tienda (no queda enlazada al sitio de
|
||||
origen).
|
||||
</Text>
|
||||
</div>
|
||||
|
||||
@@ -122,7 +125,7 @@ const ProductImportPanel = () => {
|
||||
<td className="py-2">{result.title}</td>
|
||||
<td className="py-2">
|
||||
{result.ok ? (
|
||||
<Badge color="green">Importado</Badge>
|
||||
<Badge color="green">{result.action === "updated" ? "Actualizado (ya existía)" : "Importado"}</Badge>
|
||||
) : (
|
||||
<span className="text-rose-600">{result.error}</span>
|
||||
)}
|
||||
|
||||
Reference in new issue
Block a user