Skip to content

Repository files navigation

Convertisseur CSV vers Base de Données 🚀

🇺🇸 English version available

Hacktoberfest License: MIT Node.js Version PRs Welcome Issues Contributors

📖 À propos du projet

Ce projet est une application Node.js qui convertit les fichiers CSV en tables de base de données. Il offre un moyen simple de :

  • Importer des fichiers CSV
  • Stocker les données CSV en JSON sur le serveur (data/db.json)
  • Générer des scripts SQL à partir des données JSON (data/sql/db.sql)
  • Fournir un lien de téléchargement direct pour le fichier SQL généré
  • Gérer la détection automatique des types de données et le nettoyage des colonnes

Parfait pour les développeurs qui ont besoin de migrer des données depuis des feuilles de calcul vers des bases de données !

🛠️ Technologies utilisées

  • Node.js
  • Express.js
  • Multer (upload de fichiers)
  • CSV-Parse (analyse CSV)
  • fs-extra (système de fichiers avancé)

🚀 Démarrage rapide

Prérequis

  • Node.js (v14 ou supérieur)
  • npm ou yarn

Installation

npm install

Démarrage

npm run dev

L'API sera disponible sur http://localhost:3000

📚 Documentation API (Swagger/OpenAPI)

Une documentation interactive complète est disponible via Swagger UI :

http://localhost:3000/api-docs/

Fonctionnalités de la documentation :

  • 📖 Documentation détaillée de tous les endpoints
  • 🧪 Interface de test intégrée (Try it out)
  • 📋 Exemples de requêtes et réponses
  • 🏷️ Organisation par catégories (Tables, Logs)
  • 📊 Schémas de données réutilisables

Pour plus de détails, consultez le Guide Swagger complet.

🧪 Guide de test rapide

🎯 Test rapide avec curl

1. Vérifier que l'API fonctionne

curl http://localhost:3000/api/v1/

2. Créer un fichier CSV de test

cat > produits_test.csv << 'EOF'
produit,prix,categorie
Ordinateur Portable,999,Electronique
Smartphone,599,Electronique
Tablette,349,Electronique
EOF

3. Importer le CSV

curl -X POST http://localhost:3000/api/v1/tables/upload \
  -F "file=@produits_test.csv" \
  -F "tableName=produits"

4. Récupérer les données

curl http://localhost:3000/api/v1/tables/produits

5. Exporter en SQL

curl http://localhost:3000/api/v1/tables/produits/export

6. Télécharger le fichier SQL généré

curl -O -J http://localhost:3000/api/v1/tables/download/produits.sql

🎨 Test avec interface web simple

Créez un fichier test.html :

<!DOCTYPE html>
<html>
  <head>
    <title>Test Upload CSV</title>
  </head>
  <body>
    <h2>Test de l'API CSV vers DB</h2>

    <h3>1. Upload CSV</h3>
    <form
      action="http://localhost:3000/api/v1/tables/upload"
      method="post"
      enctype="multipart/form-data"
    >
      <input type="file" name="file" accept=".csv" required />
      <input
        type="text"
        name="tableName"
        placeholder="Nom de la table"
        value="table_test"
      />
      <button type="submit">Uploader</button>
    </form>

    <h3>2. Voir les données</h3>
    <p>
      Table : <input type="text" id="tableName" value="table_test" />
      <button onclick="getData()">Récupérer données</button>
    </p>

    <h3>3. Résultats</h3>
    <div id="results"></div>

    <script>
      async function getData() {
        const tableName = document.getElementById("tableName").value;
        const response = await fetch(
          `http://localhost:3000/api/v1/tables/${tableName}`
        );
        const data = await response.json();

        document.getElementById("results").innerHTML =
          "<pre>" + JSON.stringify(data, null, 2) + "</pre>";
      }
    </script>
  </body>
</html>

Puis ouvrez test.html dans votre navigateur.

📚 Endpoints de l'API

URL de base

http://localhost:3000/api/v1

Endpoints disponibles

Accueil

GET /

Description : Documentation de l'API Réponse :

{
  "success": true,
  "message": "Welcome to CSV to DB API",
  "data": [...]
}

Upload CSV

POST /tables/upload
Content-Type: multipart/form-data

FormData:
- file: [fichier CSV]
- tableName: "ma_table" (optionnel)

Réponse :

{
  "success": true,
  "tableName": "ma_table",
  "rows": 150
}

Récupérer les données d'une table

GET /tables/:tableName

Réponse :

{
  "success": true,
  "data": [
    {
      "colonne1": "valeur1",
      "colonne2": "valeur2"
    }
  ]
}

Exporter une table en SQL

GET /tables/:tableName/export

Réponse :

{
  "success": true,
  "downloadUrl": "http://localhost:3000/api/v1/tables/download/ma_table.sql"
}

🤝 Contribuer

PRs Welcome Open Issues

Comment contribuer ?

Ce projet participe à Hacktoberfest 2025 ! Vous pouvez contribuer de plusieurs façons :

🎯 Issues étiquetées pour débutants

🚀 Types de contributions acceptées

  1. 🐛 Corrections de bugs

    • Correction de bugs existants
    • Amélioration des messages d'erreur
    • Gestion des cas limites
  2. ✨ Nouvelles fonctionnalités

    • Support de nouveaux formats de fichiers
    • Amélioration de l'interface utilisateur
    • Nouveaux endpoints API
  3. 📚 Documentation

    • Amélioration du README
    • Ajout d'exemples d'utilisation
    • Documentation des fonctions
  4. 🧪 Tests

    • Tests unitaires
    • Tests d'intégration
    • Tests end-to-end
  5. 🎨 Améliorations UX/UI

    • Interface web pour l'API
    • Amélioration des messages de réponse
    • Validation côté client

📁 Gestion automatique des dossiers

Cette application crée automatiquement les dossiers nécessaires au démarrage :

Dossiers générés automatiquement :

  • uploads/ - Fichiers CSV importés temporairement
  • data/ - Données JSON des tables créées
  • data/sql/ - Fichiers SQL générés
  • logs/ - Fichiers de logs quotidiens

Avantages :

  • 🔄 Auto-création : Les dossiers se créent au premier démarrage
  • 🛡️ Sécurité : Pas de données sensibles sur Git
  • 🧹 Maintenance facile : Scripts de nettoyage intégrés
  • 📊 Monitoring : Logs organisés par date

🧪 Tests

# Lancer tous les tests
npm test

# Tests en mode watch
npm run test:watch

# Coverage des tests
npm run test:coverage

📋 Améliorations prévues

  • Interface web pour l'API
  • Support des fichiers Excel (.xlsx)
  • Validation plus poussée des CSV
  • Export vers d'autres formats (JSON, XML)
  • Tests end-to-end automatisés
  • Documentation API avec Swagger/OpenAPI
  • Support multilingue
  • Configuration via variables d'environnement

📄 Licence

Distribué sous licence MIT. Voir LICENSE pour plus d'informations.

👥 Auteurs

  • devOnlyPurple - Travail initial

🙏 Remerciements

  • Hacktoberfest pour encourager les contributions open source
  • La communauté Node.js pour les excellents packages
  • Tous les contributeurs qui améliorent ce projet

Si ce projet vous plaît, n'oubliez pas de lui donner une étoile !

🌟 Star this repo

About

Convert csv to json and sql

Topics

Resources

Contributing

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages