@salimtahayacine/database-seeder
v1.0.0
Published
A secure Express middleware for database seeding with production protection
Maintainers
Readme
🌱 Database Seeder
Un middleware Express sécurisé pour gérer le seeding de base de données avec protection automatique en production.
🚀 Fonctionnalités
- ✅ Sécurité intégrée : Bloque automatiquement les requêtes en production
- ⚡ Simple d'utilisation : Une seule fonction à configurer
- 📊 Monitoring : Logs détaillés et temps d'exécution
- 🔧 Flexible : Compatible avec Mongoose, Sequelize, Prisma, SQL brut, etc.
- 📦 TypeScript : Définitions de types incluses
📦 Installation
npm install @salim-yassine/database-seeder🎯 Utilisation
Exemple avec Mongoose
const express = require('express');
const databaseSeeder = require('@salim-yassine/database-seeder');
const User = require('./models/User');
const app = express();
// Définir votre logique de seeding
const seedDatabase = async () => {
await User.deleteMany({}); // Nettoyer la collection
const users = await User.insertMany([
{ name: 'Admin', email: '[email protected]', role: 'admin' },
{ name: 'User', email: '[email protected]', role: 'user' }
]);
return { inserted: users.length };
};
// Monter le routeur (accessible uniquement en développement)
app.use('/api/seed', databaseSeeder(seedDatabase));
app.listen(3000);Exemple avec Sequelize
const seedDatabase = async () => {
await User.destroy({ where: {}, truncate: true });
const users = await User.bulkCreate([
{ name: 'Admin', email: '[email protected]' },
{ name: 'User', email: '[email protected]' }
]);
return { count: users.length };
};
app.use('/api/seed', databaseSeeder(seedDatabase));Exemple avec Prisma
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();
const seedDatabase = async () => {
await prisma.user.deleteMany();
const users = await prisma.user.createMany({
data: [
{ name: 'Admin', email: '[email protected]' },
{ name: 'User', email: '[email protected]' }
]
});
return users;
};
app.use('/api/seed', databaseSeeder(seedDatabase));🔒 Sécurité
Le module bloque automatiquement toute tentative de seeding si NODE_ENV=production.
// En production, cette requête retournera une erreur 403
POST /api/seed
// Response: 403 Forbidden
{
"success": false,
"error": "DANGER: Database seeding is strictly disabled in production environment."
}📡 API
Endpoint POST
Une fois monté, le routeur expose un endpoint POST :
# Exécuter le seeding
curl -X POST http://localhost:3000/api/seedRéponse en cas de succès
{
"success": true,
"message": "Database seeded successfully.",
"duration": "1234ms",
"data": {
"inserted": 2
}
}Réponse en cas d'erreur
{
"success": false,
"message": "An error occurred during database seeding.",
"error": "Connection refused"
}🛠️ Configuration TypeScript
import express from 'express';
import databaseSeeder from '@salim-yassine/database-seeder';
const app = express();
const seedDatabase = async (): Promise<{ count: number }> => {
// Votre logique ici
return { count: 10 };
};
app.use('/api/seed', databaseSeeder(seedDatabase));⚙️ Variables d'environnement
# Développement (seeding autorisé)
NODE_ENV=development
# Production (seeding bloqué)
NODE_ENV=production🧪 Tests
# En développement
npm run dev
# Puis : curl -X POST http://localhost:3000/api/seed
# Vérifier le blocage en production
NODE_ENV=production npm start
# Puis : curl -X POST http://localhost:3000/api/seed
# Devrait retourner 403 Forbidden📝 Bonnes pratiques
- Toujours utiliser en développement uniquement
- Ne jamais exposer ce endpoint en production
- Utiliser des variables d'environnement pour les données sensibles
- Nettoyer les données existantes avant le seeding
🤝 Contribution
Les contributions sont les bienvenues ! N'hésitez pas à :
- Fork le projet
- Créer une branche (
git checkout -b feature/AmazingFeature) - Commit vos changements (
git commit -m 'Add some AmazingFeature') - Push vers la branche (
git push origin feature/AmazingFeature) - Ouvrir une Pull Request
📄 Licence
MIT © Salim Taha Yassine
🐛 Bugs & Support
Pour signaler un bug ou demander de l'aide :
👨💻 Auteur
Salim Taha Yassine
- Full Stack Developer (Java Spring Boot / Angular / Ionic)
- Passionné par DevOps, DevSecOps et Cybersécurité
- GitHub: @salimtahayacine
