160 Commits

Author SHA1 Message Date
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
C_Ma_For 901199c45d feat: hook useImages — pipeline HEIC→IA→feather→rotation→search→upload 2026-06-08 17:41:00 +02:00
C_Ma_For 50469700d0 feat: utilitaires client heicConverter, bgRemover, imageRotator, zipImporter (TS)
Porte les 4 utilitaires de traitement d'images en TypeScript pour utilisation côté client :
- heicConverter.ts : convertit HEIC/HEIF en JPEG via heic2any
- bgRemover.ts : supprime les fonds d'images avec @imgly/background-removal + composite sur blanc
- imageRotator.ts : pivote les images JPEG via Canvas
- zipImporter.ts : extrait les images d'un fichier ZIP avec structure dossier-ref/image.ext

Tous les modules utilisent des APIs du navigateur et doivent être importés dynamiquement depuis du code 'use client'.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 17:30:01 +02:00
C_Ma_For a5ced27e93 feat: API route POST /api/images/upload (TDD) 2026-06-08 17:25:40 +02:00
C_Ma_For c9422be78e feat: API route GET /api/products/search (TDD)
Implémentation test-driven du endpoint de recherche de produits par référence.
- Tests unitaires complets validant les cas nominaux et d'erreur
- Validation du paramètre ref avec gestion des chaînes vides
- Intégration avec searchProductByRef de lib/shopify
- Gestion appropriée des erreurs HTTP (400, 500)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 17:15:58 +02:00
C_Ma_For 53008d1d43 fix: valider data.image.src dans uploadProductImage 2026-06-08 17:10:26 +02:00
C_Ma_For 9675366db9 feat: client Shopify Admin REST API (search + upload) 2026-06-08 16:21:55 +02:00
C_Ma_For c97a7faaa9 feat: types ImageItem + dépendances heic2any jszip
- Install heic2any and jszip dependencies
- Create src/types/images.ts with ImageItem, ImageStatus, ImageProgress, and ZipEntry types
- heic2any includes bundled TypeScript types (no declaration file needed)
- ImageItem is the central data model for the image processing module with support for:
  - HEIC to JPEG conversion
  - AI-powered background removal
  - Shopify product lookup and upload
  - Progress tracking and error handling
  - Rotation and feather adjustments (cached PNG blob for fast re-processing)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 15:47:34 +02:00
C_Ma_For b25a712a69 fix: correct adapter import name PrismaBetterSqlite3 in seed.mjs 2026-06-07 11:42:57 +02:00
C_Ma_For ee70ea377f fix: use better-sqlite3 adapter in seed.mjs (Prisma 7 requirement) 2026-06-07 11:41:42 +02:00
C_Ma_For 8bd49050f6 fix: add .dockerignore to exclude .env files from build context (was overriding DATABASE_URL) 2026-06-07 02:00:21 +02:00
C_Ma_For 79ebb6ced3 fix: use npm ci --omit=dev in runner (resolves all transitive prisma deps) 2026-06-07 01:37:03 +02:00
C_Ma_For d80e50e9de fix: recreate .bin/prisma as symlink in runner (preserves __dirname for WASM resolution) 2026-06-07 01:32:37 +02:00
C_Ma_For f022238a40 fix: copy full node_modules/prisma package for WASM files in runner stage 2026-06-07 01:28:41 +02:00
C_Ma_For f23c954ecd chore: add public/ directory (required by Next.js standalone build) 2026-06-07 01:25:00 +02:00
C_Ma_For 96700ae252 fix: eslint disable-next-line for required any casts (NextAuth v4 limitation) 2026-06-07 01:22:07 +02:00
C_Ma_For 99c3380d00 feat: dockerfile + docker-compose + déploiement VPS gestion.materiaux-destock.fr 2026-06-07 00:27:16 +02:00