diff --git a/visual_workflow_builder/frontend/src/data/staticCatalog.ts b/visual_workflow_builder/frontend/src/data/staticCatalog.ts index d30f6ef27..8edef960a 100644 --- a/visual_workflow_builder/frontend/src/data/staticCatalog.ts +++ b/visual_workflow_builder/frontend/src/data/staticCatalog.ts @@ -923,141 +923,185 @@ export const STATIC_CATALOG_ACTIONS: StaticCatalogAction[] = [ // ═══════════════════════════════════════════════════════════════════════════ { id: 'db_save_data', - name: 'Sauvegarder en BDD', + name: 'Sauvegarder Données', category: 'database' as VWBActionCategory, - description: 'Enregistrer des données extraites dans une base de données', + description: 'Sauvegarder des données de manière persistante (SQLite)', icon: '💾', parameters: { - visual_anchor: { - type: 'VWBVisualAnchor', - required: false, - description: 'Zone source des données (optionnel si variable déjà définie)', - default: null, - }, - source_variable: { - type: 'string', - required: false, - description: 'Variable contenant les données à sauvegarder', - default: '', - }, - table_name: { - type: 'string', - required: true, - description: 'Nom de la table de destination', - default: '', - }, - field_mapping: { - type: 'string', - required: false, - description: 'Mapping des champs (JSON): {"champ_source": "colonne_bdd"}', - default: '{}', - }, - connection_name: { - type: 'string', - required: false, - description: 'Nom de la connexion BDD configurée', - default: 'default', - }, mode: { type: 'string', required: false, - description: 'Mode d\'insertion', - default: 'insert', - options: ['insert', 'upsert', 'update'], + description: 'Mode de sauvegarde', + default: 'cle_valeur', + options: ['cle_valeur', 'collection', 'sql'], + }, + cle: { + type: 'string', + required: false, + description: 'Clé unique pour le mode clé-valeur (ex: config.nom_utilisateur)', + default: '', + }, + valeur: { + type: 'string', + required: false, + description: 'Valeur à sauvegarder (texte, nombre, JSON)', + default: '', + }, + nom_collection: { + type: 'string', + required: false, + description: 'Nom de la collection pour le mode collection', + default: '', + }, + donnees: { + type: 'string', + required: false, + description: 'Données JSON pour la collection', + default: '{}', + }, + requete_sql: { + type: 'string', + required: false, + description: 'Requête SQL pour le mode avancé (INSERT, UPDATE)', + default: '', + }, + workflow_id: { + type: 'string', + required: false, + description: 'ID du workflow pour filtrage', + default: '', }, }, examples: [ { - name: 'Enregistrer facture', - description: 'Sauvegarder les données d\'une facture extraite', + name: 'Sauvegarder configuration', + description: 'Stocker une valeur de configuration', parameters: { - source_variable: 'facture_data', - table_name: 'factures', - field_mapping: '{"numero": "num_facture", "montant": "total_ttc", "date": "date_facture"}', - mode: 'insert' + mode: 'cle_valeur', + cle: 'config.derniere_execution', + valeur: '2026-01-14T10:30:00', }, - expectedResult: 'Une nouvelle ligne est créée dans la table factures', + expectedResult: 'La valeur est sauvegardée avec la clé', + }, + { + name: 'Logger résultat extraction', + description: 'Ajouter un résultat à une collection', + parameters: { + mode: 'collection', + nom_collection: 'resultats_extraction', + donnees: '{"nb_lignes": 150, "erreurs": 0}', + }, + expectedResult: 'Les données sont ajoutées à la collection', }, ], - documentation: 'Permet de persister des données extraites visuellement dans une base de données relationnelle.', + documentation: 'Sauvegarde persistante dans SQLite. Mode clé-valeur pour configs simples, collection pour historique, SQL pour avancé. Base par défaut: ~/.vwb/data.db', metadata: { - version: '3.0.0', - author: 'Dom, Alice, Kiro', - createdAt: '2026-01-13', - updatedAt: '2026-01-13', - tags: ['database', 'save', 'persist', 'insert', 'data'], - complexity: 'advanced', - estimatedDuration: 3000, + version: '3.1.0', + author: 'Dom, Claude', + createdAt: '2026-01-14', + updatedAt: '2026-01-14', + tags: ['database', 'save', 'persist', 'sqlite', 'data'], + complexity: 'intermediate', + estimatedDuration: 500, }, }, { id: 'db_read_data', - name: 'Lire depuis BDD', + name: 'Charger Données', category: 'database' as VWBActionCategory, - description: 'Lire des données depuis une base de données', + description: 'Charger des données sauvegardées précédemment', icon: '📖', parameters: { - table_name: { - type: 'string', - required: true, - description: 'Nom de la table à interroger', - default: '', - }, - query_filter: { + mode: { type: 'string', required: false, - description: 'Filtre SQL WHERE (sans le mot-clé WHERE)', - default: '', + description: 'Mode de chargement', + default: 'cle_valeur', + options: ['cle_valeur', 'collection', 'sql', 'lister'], }, - columns: { + cle: { type: 'string', required: false, - description: 'Colonnes à récupérer (séparées par virgule, ou * pour tout)', - default: '*', + description: 'Clé à récupérer pour le mode clé-valeur', + default: '', }, - limit: { + valeur_defaut: { + type: 'string', + required: false, + description: 'Valeur par défaut si la clé n\'existe pas', + default: '', + }, + nom_collection: { + type: 'string', + required: false, + description: 'Nom de la collection pour le mode collection', + default: '', + }, + limite: { type: 'number', required: false, - description: 'Nombre maximum de lignes', + description: 'Nombre maximum de résultats', default: 100, min: 1, max: 10000, }, - variable_name: { - type: 'string', - required: true, - description: 'Variable pour stocker les résultats', - default: 'db_results', + dernier_seulement: { + type: 'boolean', + required: false, + description: 'Récupérer uniquement le dernier enregistrement', + default: false, }, - connection_name: { + requete_sql: { type: 'string', required: false, - description: 'Nom de la connexion BDD configurée', - default: 'default', + description: 'Requête SQL SELECT pour le mode avancé', + default: '', + }, + prefixe_cle: { + type: 'string', + required: false, + description: 'Préfixe pour lister les clés (mode lister)', + default: '', + }, + variable_sortie: { + type: 'string', + required: false, + description: 'Variable pour stocker les résultats', + default: 'donnees_chargees', }, }, examples: [ { - name: 'Récupérer client par email', - description: 'Chercher un client dans la base par son email', + name: 'Charger configuration', + description: 'Récupérer une valeur de configuration', parameters: { - table_name: 'clients', - query_filter: "email = '${email_extrait}'", - columns: 'id, nom, prenom, telephone', - variable_name: 'client_info' + mode: 'cle_valeur', + cle: 'config.derniere_execution', + variable_sortie: 'date_derniere_exec', }, - expectedResult: 'Les données du client sont stockées dans la variable', + expectedResult: 'La valeur est chargée dans la variable', + }, + { + name: 'Historique des extractions', + description: 'Récupérer les 10 derniers résultats', + parameters: { + mode: 'collection', + nom_collection: 'resultats_extraction', + limite: 10, + variable_sortie: 'historique', + }, + expectedResult: 'Les derniers résultats sont chargés', }, ], - documentation: 'Permet de récupérer des données depuis la base pour les utiliser dans le workflow.', + documentation: 'Charge des données depuis SQLite. Mode clé-valeur pour valeurs simples, collection pour historique, SQL pour requêtes personnalisées, lister pour voir les clés disponibles.', metadata: { - version: '3.0.0', - author: 'Dom, Alice, Kiro', - createdAt: '2026-01-13', - updatedAt: '2026-01-13', - tags: ['database', 'read', 'query', 'select', 'data'], + version: '3.1.0', + author: 'Dom, Claude', + createdAt: '2026-01-14', + updatedAt: '2026-01-14', + tags: ['database', 'read', 'load', 'sqlite', 'data'], complexity: 'intermediate', - estimatedDuration: 2000, + estimatedDuration: 500, }, },