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é
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
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 :
- Le fichier .md est parsé
- On extrait
vendor_idetproduct_id(depuis le contenu ou le nom de fichier) - On recherche dans la base tous les périphériques existants
- On compare les
vendor_idetproduct_idde chaque périphérique - 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 :
- Modal import se ferme
- Modal ajout s'ouvre
- Formulaire pré-rempli avec toutes les données du fichier .md
- L'utilisateur complète (prix, localisation, photos)
- Enregistre → Périphérique créé
Si périphérique existe déjà :
- Modal import se ferme
- 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? - Si OUI → Redirige vers la page de détail du périphérique existant
- 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