Commit Graph

76 Commits

Author SHA1 Message Date
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>
plan5-deployed
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 plan4-deployed 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
C_Ma_For e576df334a fix: fusionner imports next/server dupliqués 2026-06-08 23:05:51 +02:00
C_Ma_For dc88e56f49 fix: supprimer API_VERSION inutilisé + eslint-disable _req 2026-06-08 22:59:30 +02:00
C_Ma_For e04e286111 fix: API Key Google Sheets (remplace service account) + signatures routes GET 2026-06-08 22:52:40 +02:00
C_Ma_For abf5210de6 fix: corriger erreurs ESLint sync (apostrophes, imports inutilisés)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
plan3-deployed
2026-06-08 22:37:54 +02:00
C_Ma_For 97f011a24b feat: module Sync Sheets complet — stepper 4 étapes, diff, streaming, historique
- Replace placeholder page.tsx with full implementation:
  - 4-step stepper (Analyser → Diff → Confirmer → Progression)
  - Step 1: Call /api/sync/preview to analyze Sheet vs Shopify
  - Step 2: Display DiffTable with changes summary
  - Step 3: Confirmation with actionable changes count
  - Step 4: Real-time progress streaming from /api/sync/execute
  - History section with loadable entries
- Fix type annotations in preview.test.ts (SyncProduct, ShopifyProductFull)
- All 40 tests passing, TypeScript strict mode clean

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 22:26:37 +02:00
C_Ma_For cdbddddaec feat: composant SyncHistory
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 22:07:10 +02:00
C_Ma_For 94993c3cbc feat: composant SyncProgress
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 22:07:04 +02:00
C_Ma_For 9c3ec2a953 feat: composant DiffTable
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 22:06:53 +02:00
C_Ma_For e6a670c67b feat: composant SyncStepper
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 22:06:46 +02:00
C_Ma_For e9d4f9dc20 feat: API route GET /api/sync/history (TDD) 2026-06-08 21:04:45 +02:00
C_Ma_For 16fece8ca9 feat: API route POST /api/sync/execute (NDJSON streaming) 2026-06-08 21:04:45 +02:00
C_Ma_For d4b54efa17 feat: API route GET /api/sync/preview (TDD) 2026-06-08 21:04:00 +02:00
C_Ma_For 2988ecab0b feat: logique diff Sheets/Shopify (TDD)
Implémentation de la fonction pure computeDiff pour calculer les changements
entre les produits Google Sheets et Shopify, avec distinction des opérations
(create, update, deactivate, unchanged) et traçabilité des champs modifiés.

- Matching par handle (ref normalisée)
- Comparaison des champs: title, description, price, status
- Draft products Shopify non synchronisés ne sont pas déactivés
- Tests TDD: 9 cas couverts (empty, create, unchanged, update, deactivate)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 20:51:21 +02:00
C_Ma_For f415138103 feat: client Shopify sync (fetch all products + CRUD) 2026-06-08 20:47:35 +02:00
C_Ma_For c4010e8c5e feat: client Google Sheets + parseSheetRows (TDD)
Implémente la lecture depuis Google Sheets avec la fonction de parsing en TDD.

- parseSheetRows(): parseur pur, testé avec 7 cas (tests unitaires)
- readSheetProducts(): client async qui utilise l'API v4 de Google Sheets
- Normalisation des handles (minuscules, tirets, trim)
- Gestion des prix français (virgule → point), status inactif → draft
- Valeurs par défaut pour colonnes manquantes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 20:44:26 +02:00
C_Ma_For 1daf9bda72 feat: types sync + dépendance googleapis 2026-06-08 20:42:00 +02:00
C_Ma_For cf5bbf91d5 feat: module Images complet — drop, traitement IA, Shopify, upload plan2-deployed 2026-06-08 20:00:20 +02:00
C_Ma_For fe9c3b9ccb fix: inclure 'uploading' dans le compteur processing de GlobalActions 2026-06-08 19:18:40 +02:00
C_Ma_For 568fe0d38e feat: composants Lightbox plein écran + GlobalActions barre d'upload 2026-06-08 17:45:22 +02:00
C_Ma_For 683db58f4b feat: composant ImageCard avec miniatures avant/après, feather, rotation, upload 2026-06-08 17:44:45 +02:00
C_Ma_For 4c1cf73435 feat: composant DropZone drag & drop HEIC/JPG/PNG/ZIP 2026-06-08 17:43:40 +02:00