C_Ma_For
1b07359415
feat: détection drift Sheets sur le dashboard (approche A)
...
- /api/dashboard/stats appelle Google Drive API pour récupérer modifiedTime du Sheets
- Compare avec createdAt de la dernière SyncRun → sheetDrift: boolean
- Dashboard affiche un bandeau amber cliquable si Sheets plus récent que la dernière sync
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-11 23:14:06 +02:00
C_Ma_For
6f4affcd66
fix: DiffTable colonnes visibles + filtrage lignes parasites dans Sheets
...
- table-fixed avec colgroup pour éviter que la colonne Ref écrase les autres
- overflow-x-auto pour permettre le scroll si nécessaire
- parseSheetRows : ignore les refs invalides (< 2 chars, caractères spéciaux, mots réservés)
- parseSheetRows : ignore les lignes sans prix valide (séparateurs, notes)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-11 23:09:08 +02:00
C_Ma_For
211d8c5c01
fix: supprimer variables inutilisées bloquant le build ESLint
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-11 22:49:22 +02:00
C_Ma_For
d16cd1fbf5
feat: implémenter le dashboard avec KPIs, dernière sync et actions rapides
...
- Nouvel endpoint /api/dashboard/stats : comptes produits Shopify (actifs/brouillons/sans image) + dernière sync depuis Prisma
- Nouvel endpoint /api/dashboard/pending : nombre de produits en attente depuis Google Sheets (lazy)
- Page dashboard remplace le stub avec 4 KPIs, bloc dernière sync, et raccourcis vers les sections
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-11 22:42:57 +02:00
C_Ma_For
fecf56ff09
fix: retry 429 avec backoff + sérialisation uploadAll + 409 traité comme skipped
2026-06-11 14:37:12 +02:00
C_Ma_For
85b0590d85
fix: split avant/après avec overflow-hidden et largeur dynamique
2026-06-11 13:40:14 +02:00
C_Ma_For
725a7508b0
feat: vérification image existante sur Shopify avant upload (statut 'Déjà sur Shopify')
2026-06-11 13:35:47 +02:00
C_Ma_For
4df074f02d
fix: image sortie 1000x1000 centrée + affichage split avant/après corrigé
2026-06-11 13:14:41 +02:00
C_Ma_For
06cda68929
fix: match UGS comme mot entier n'importe où dans le nom de fichier
2026-06-11 12:51:27 +02:00
C_Ma_For
c19510d413
fix: match UGS en début de nom de fichier exact (évite 30 de matcher 30827)
2026-06-11 12:47:26 +02:00
C_Ma_For
2de5c6670d
fix: recherche produit par SKU Shopify avec fallback sans suffixe (30827-dessus → 30827)
2026-06-11 12:20:27 +02:00
C_Ma_For
6a08fccb7a
fix: recherche UGS par contains dans le nom de fichier (ex: 30827-dessus contient 30827)
2026-06-10 09:38:16 +02:00
C_Ma_For
da52080e3e
fix: match UGS en préfixe dans search-sheets pour les images avec suffixe (dessus, -2, etc.)
2026-06-10 09:17:22 +02:00
C_Ma_For
f0b6ddf145
fix: propager le type réel du métachamp Shopify pour éviter les erreurs 422
2026-06-09 21:54:41 +02:00
C_Ma_For
d1e78e91e4
feat: sélection manuelle de produit Shopify quand réf. introuvable
2026-06-09 21:00:45 +02:00
C_Ma_For
071f126244
fix: re-ajouter import map onnxruntime-web pour détourage IA CDN
2026-06-09 14:54:29 +02:00
C_Ma_For
415b7db643
fix: détecter ligne d'en-têtes dynamiquement (row 1 vide sur OUTILLAGE etc, row 2 = vrais headers)
2026-06-09 14:50:23 +02:00
C_Ma_For
8ede847ba0
fix: recherche produit via Google Sheets (UGS col C → Shopify ID col A) + fallback Shopify
2026-06-09 13:41:53 +02:00
C_Ma_For
193edc80aa
fix: originalUrl mis à jour avec JPEG après conversion HEIC (aperçu original noir)
2026-06-09 13:27:10 +02:00
C_Ma_For
1f8db29b15
fix: ErrorBoundary autour de ImagesPage pour capturer crash IA
2026-06-09 13:19:45 +02:00
C_Ma_For
4b9db5bebf
fix: revert @imgly npm import → CDN + ErrorBoundary + next.config cleanup
2026-06-09 13:15:04 +02:00
C_Ma_For
a77f44b800
fix: @imgly/background-removal via npm + publicPath CDN + asyncWebAssembly webpack
2026-06-09 12:27:18 +02:00
C_Ma_For
0b26a61f90
fix: import map onnxruntime-web pour @imgly/background-removal CDN
2026-06-09 12:09:58 +02:00
C_Ma_For
2efe339576
fix: conversion HEIC serveur via heic-convert (WASM, supporte HEIC Apple vs sharp AVIF only)
2026-06-09 11:50:00 +02:00
C_Ma_For
c4edcb568c
feat: conversion HEIC serveur via sharp (fallback fiable Chrome/Firefox)
2026-06-09 11:24:24 +02:00
C_Ma_For
e3246d022e
fix: conversion HEIC — ajout fallback img+canvas pour Chrome macOS
2026-06-09 11:11:17 +02:00
C_Ma_For
9ab8b3ef60
fix: conversion HEIC native d'abord (Safari/macOS), heic2any fallback 30s
2026-06-09 11:07:04 +02:00
C_Ma_For
7da453606e
fix(ui): MetafieldResolver — défaut skip, UX claire create/map/ignore + labels
2026-06-09 10:56:50 +02:00
C_Ma_For
8d591bb769
fix: fetchMetafieldDefinitions + ensureMetafieldDefinition via GraphQL (REST n'expose pas cet endpoint)
2026-06-09 10:46:34 +02:00
C_Ma_For
bb596c7e32
feat(plan5): page /creation stepper 4 étapes + lien nav + fix TS shopifyMetafields
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-09 10:20:36 +02:00
C_Ma_For
1ed8c055d7
feat(plan5): composants PendingRowsTable + MetafieldResolver + CreationProgress
2026-06-09 10:14:12 +02:00
C_Ma_For
40d537efb6
feat(plan5): API POST /api/creation/execute streaming NDJSON
2026-06-09 10:09:27 +02:00
C_Ma_For
015833150a
feat(plan5): API GET /api/creation/metafields (TDD)
2026-06-09 09:58:14 +02:00
C_Ma_For
04833b490c
feat(plan5): API GET /api/creation/preview (TDD)
2026-06-09 09:57:29 +02:00
C_Ma_For
072110e655
feat(plan5): shopifyCollections — ajout produit à collection
2026-06-09 09:55:57 +02:00
C_Ma_For
421c275d48
feat(plan5): shopifyMetafields — matching + gestion définitions (TDD)
...
Implémente Task 4 du Plan 5:
- normalizeMetafieldKey: minuscules, accents retirés, espaces/parenth→_, max 30 chars
- matchMetafields: compare clé normalisée d'une colonne avec les clés existantes
- fetchMetafieldDefinitions: récupère les définitions Shopify existantes
- ensureMetafieldDefinition: crée une définition si manquante
- setProductMetafield: définit un métachamp sur un produit
7 tests passants (4 normalizeMetafieldKey + 3 matchMetafields).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-09 09:52:23 +02:00
C_Ma_For
ed091711c8
feat(plan5): openaiClient — génération descriptions GPT-4o (TDD)
2026-06-09 09:42:26 +02:00
C_Ma_For
3aa770321c
feat(plan5): creationSheets — lecture lignes en attente (TDD)
2026-06-09 09:40:23 +02:00
C_Ma_For
2e9df3659f
feat(plan5): types création + modèle Prisma ProductCreation
2026-06-09 09:33:11 +02:00
C_Ma_For
1e48ca142f
fix: remplacer status=any par deux appels active+draft (API REST Shopify)
2026-06-09 00:05:53 +02:00
C_Ma_For
c89ab1c818
feat: lire tous les onglets Google Sheets (un onglet par famille de produits)
2026-06-08 23:56:22 +02:00
C_Ma_For
4263b8afd0
fix: onglet Google Sheets par défaut MATRICE au lieu de Produits
2026-06-08 23:52:09 +02:00
C_Ma_For
4db43f833b
feat(plan4): page /parametres avec onglets Connexions + Utilisateurs
2026-06-08 23:29:32 +02:00
C_Ma_For
4e4268d678
feat(plan4): composants ConnectionStatus + UsersManager
2026-06-08 23:28:29 +02:00
C_Ma_For
1934d0b655
feat(plan4): page /produits avec catalogue Shopify + filtres
2026-06-08 23:26:41 +02:00
C_Ma_For
119123e006
feat(plan4): composants ProductFiltersBar + ProductTable
2026-06-08 23:26:01 +02:00
C_Ma_For
5825640105
feat(plan4): API GET /api/admin/connections/test
2026-06-08 23:23:53 +02:00
C_Ma_For
f27b62a403
feat(plan4): API CRUD /api/admin/users (TDD)
2026-06-08 23:23:10 +02:00
C_Ma_For
9303aab78e
feat(plan4): API GET /api/products/list avec filtre statut (TDD)
2026-06-08 23:21:18 +02:00
C_Ma_For
6dd6dc301e
feat(plan4): types CatalogProduct, ProductFilters, ProductListResponse
2026-06-08 23:18:29 +02:00