Files
serv_benchmark/IMPORT_MD_UPDATE.md
Gilles Soulier c67befc549 addon
2026-01-05 16:08:01 +01:00

5.8 KiB
Executable File

Import .md avec détection de doublons - COMPLÉTÉ

Modifications apportées

La fonctionnalité d'import de fichiers .md a été améliorée avec une vérification automatique des doublons.

Backend modifié

backend/app/api/endpoints/peripherals.py

Ajout de la vérification de doublon dans l'endpoint /api/peripherals/import/markdown :

# Check for existing peripheral with same vendor_id and product_id
existing_peripheral = None
vendor_id = suggested.get("caracteristiques_specifiques", {}).get("vendor_id")
product_id = suggested.get("caracteristiques_specifiques", {}).get("product_id")

if vendor_id and product_id:
    # Search for peripheral with matching vendor_id and product_id
    all_peripherals = db.query(Peripheral).all()
    for periph in all_peripherals:
        if periph.caracteristiques_specifiques:
            p_vendor = periph.caracteristiques_specifiques.get("vendor_id")
            p_product = periph.caracteristiques_specifiques.get("product_id")
            if p_vendor == vendor_id and p_product == product_id:
                existing_peripheral = periph
                break

Retour API :

  • Si nouveau : already_exists: false + suggested_peripheral
  • Si existe : already_exists: true + existing_peripheral

Frontend modifié

frontend/js/peripherals.js

La fonction importMarkdown() gère maintenant deux cas :

Cas 1 : Périphérique nouveau

if (result.already_exists) {
    // Doublon détecté...
} else if (result.suggested_peripheral) {
    // Nouveau périphérique
    closeModal('modal-import-md');
    showAddModal();

    // Pré-remplir tous les champs du formulaire
    if (suggested.nom) document.getElementById('nom').value = suggested.nom;
    if (suggested.type_principal) { ... }
    // etc.

    showSuccess(`Fichier ${result.filename} importé avec succès. Vérifiez et complétez les informations.`);
}

Cas 2 : Périphérique existant (doublon)

if (result.already_exists) {
    closeModal('modal-import-md');

    const existing = result.existing_peripheral;
    const message = `Ce périphérique existe déjà dans la base de données:\n\n` +
        `Nom: ${existing.nom}\n` +
        `Marque: ${existing.marque || 'N/A'}\n` +
        `Modèle: ${existing.modele || 'N/A'}\n` +
        `Quantité: ${existing.quantite_totale}\n\n` +
        `Voulez-vous voir ce périphérique?`;

    if (confirm(message)) {
        // Redirige vers la page de détail
        window.location.href = `peripheral-detail.html?id=${existing.id}`;
    } else {
        showInfo(`Import annulé - le périphérique "${existing.nom}" existe déjà.`);
    }
}

Documentation mise à jour

FEATURE_IMPORT_MD.md

Ajout de deux workflows détaillés :

  • Workflow Cas 1 : Périphérique nouveau (18 étapes)
  • Workflow Cas 2 : Périphérique existant avec doublon (13 étapes)

Fonctionnement

Détection des doublons

La vérification se fait sur vendor_id + product_id :

  1. Le fichier .md est parsé
  2. On extrait vendor_id et product_id (depuis le contenu ou le nom de fichier)
  3. On recherche dans la base tous les périphériques existants
  4. On compare les vendor_id et product_id de chaque périphérique
  5. Si match trouvé → Doublon détecté

Exemple :

Fichier : ID_0781_55ab.md
→ vendor_id = 0x0781
→ product_id = 0x55ab

Recherche dans la base :
→ Périphérique #42 : vendor_id=0x0781, product_id=0x55ab
→ MATCH ! → Doublon détecté

Expérience utilisateur

Si nouveau périphérique :

  1. Modal import se ferme
  2. Modal ajout s'ouvre
  3. Formulaire pré-rempli avec toutes les données du fichier .md
  4. L'utilisateur complète (prix, localisation, photos)
  5. Enregistre → Périphérique créé

Si périphérique existe déjà :

  1. Modal import se ferme
  2. Dialog de confirmation s'affiche :
    Ce périphérique existe déjà dans la base de données:
    
    Nom: SanDisk USB Flash Drive
    Marque: SanDisk
    Modèle: 3.2Gen1
    Quantité: 2
    
    Voulez-vous voir ce périphérique?
    
  3. Si OUI → Redirige vers la page de détail du périphérique existant
  4. Si NON → Message "Import annulé - le périphérique existe déjà"

Test rapide

# 1. Redémarrer le backend
docker compose restart backend

# 2. Importer un nouveau fichier (ex: ID_0b05_17cb.md)
# Via interface : http://localhost:8087/peripherals.html
# Bouton "Importer .md" → Sélectionner fichier → Importer
# Résultat : Formulaire pré-rempli

# 3. Réimporter le MÊME fichier
# Résultat : Message "Ce périphérique existe déjà..." avec option de voir

# 4. Test API direct
curl -X POST http://localhost:8007/api/peripherals/import/markdown \
  -F "file=@fichier_usb/ID_0b05_17cb.md" | jq

# Premier import : already_exists = false
# Second import : already_exists = true

Avantages

Évite les doublons - Impossible d'importer deux fois le même périphérique (vendor_id + product_id) Navigation rapide - Si doublon, option de voir directement le périphérique existant Informé - L'utilisateur sait immédiatement si le périphérique existe déjà Transparence - Affiche les infos du périphérique existant (nom, marque, modèle, quantité) Workflow fluide - Modal se ferme automatiquement, pas de confusion

Fichiers modifiés

Fichier Modifications
backend/app/api/endpoints/peripherals.py +40 lignes - Vérification doublon
frontend/js/peripherals.js +35 lignes - Gestion cas doublon
FEATURE_IMPORT_MD.md +50 lignes - Documentation workflows

Total : ~125 lignes ajoutées


Développé avec Claude Code - 2025-12-30