fix: vérifier l'existence Shopify avant création pour éviter les doublons
- Chargement du catalogue Shopify au début de l'exécution (fetchAllShopifyProducts) - Vérification par SKU (ref) : si déjà présent dans Shopify → skipped, pas de création - Nouveau type d'événement 'skipped' dans CreationStreamEvent - CreationProgress affiche les produits ignorés en amber avec le SKU concerné - Résumé final inclut le compte de produits ignorés Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -10,6 +10,7 @@ export function CreationProgress({ events, done }: Props) {
|
||||
const lastProgress = [...events].reverse().find(e => e.type === 'progress') as Extract<CreationStreamEvent, { type: 'progress' }> | undefined
|
||||
const doneEvent = events.find(e => e.type === 'done') as Extract<CreationStreamEvent, { type: 'done' }> | undefined
|
||||
const errors = events.filter(e => e.type === 'error') as Array<Extract<CreationStreamEvent, { type: 'error' }>>
|
||||
const skipped = events.filter(e => e.type === 'skipped') as Array<Extract<CreationStreamEvent, { type: 'skipped' }>>
|
||||
|
||||
return (
|
||||
<div className="space-y-4">
|
||||
@@ -26,6 +27,17 @@ export function CreationProgress({ events, done }: Props) {
|
||||
<p className="text-xs text-gray-400 mt-1 truncate">{lastProgress.tab} — {lastProgress.title}</p>
|
||||
</div>
|
||||
)}
|
||||
{skipped.length > 0 && (
|
||||
<div className="space-y-1">
|
||||
{skipped.map((e, i) => (
|
||||
<div key={i} className="flex gap-2 p-2 bg-amber-900/20 border border-amber-800/40 rounded text-xs text-amber-300">
|
||||
<span>⚠️</span>
|
||||
<span className="font-medium">{e.title}</span>
|
||||
<span className="text-amber-500">— SKU {e.sku} déjà présent dans Shopify, ignoré</span>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
{errors.length > 0 && (
|
||||
<div className="space-y-1">
|
||||
{errors.map((e, i) => (
|
||||
@@ -43,6 +55,7 @@ export function CreationProgress({ events, done }: Props) {
|
||||
</p>
|
||||
<p className="text-sm text-gray-300 mt-1">
|
||||
{doneEvent.summary.created} créé{doneEvent.summary.created > 1 ? 's' : ''}
|
||||
{doneEvent.summary.skipped > 0 && ` — ${doneEvent.summary.skipped} déjà existant${doneEvent.summary.skipped > 1 ? 's' : ''} (ignorés)`}
|
||||
{doneEvent.summary.errors > 0 && ` — ${doneEvent.summary.errors} erreur${doneEvent.summary.errors > 1 ? 's' : ''}`}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user