Application Node.js de gestion de newsletters et CRM, construite avec Express et EJS.
- Backend: Node.js + Express
- Templates: EJS (Embedded JavaScript)
- CSS: Tailwind CSS (via CDN)
- Base de données: JSON (fichier local avec écriture atomique)
- Authentification: Sessions + bcrypt
src/
├── config/ # Configuration (port, sessions)
├── data/ # Base de données JSON
├── repositories/ # Couche d'accès aux données (pattern Repository)
├── services/ # Logique métier
├── controllers/ # Controllers Express
├── routes/ # Routes Express
├── middlewares/ # Middlewares (auth, validation, etc.)
├── views/ # Templates EJS
│ ├── layouts/ # Layouts principaux
│ ├── partials/ # Composants réutilisables
│ └── pages/ # Pages de l'application
└── app.js # Point d'entrée
# Installer les dépendances
npm install
# Créer le premier utilisateur admin (optionnel si db.json existe déjà)
node scripts/createAdmin.js# Développement (avec auto-reload)
npm run dev
# Production
npm startL'application sera accessible sur http://localhost:3000
- Email: admin@newsletterpro.com
- Mot de passe: admin123
- ✅ Inscription avec validation
- ✅ Connexion avec bcrypt
- ✅ Déconnexion
- ✅ Protection des routes
- 🚧 Récupération de mot de passe (structure prête)
- ✅ Créer une newsletter
- ✅ Lister toutes les newsletters
- ✅ Voir les détails d'une newsletter
- ✅ Modifier une newsletter
- ✅ Supprimer une newsletter
- ✅ Ajouter un abonné
- ✅ Lister tous les abonnés
- ✅ Supprimer un abonné
- ✅ Gérer les abonnements aux newsletters
- ✅ Journal d'activité
- ✅ Vue collection
- ✅ Statistiques en temps réel
| Route | Méthode | Protection | Description |
|---|---|---|---|
/ |
GET | Auth requise | Dashboard |
/newsletters |
GET | Auth requise | Liste des newsletters |
/newsletters/create |
GET/POST | Auth requise | Créer une newsletter |
/newsletters/:id |
GET | Auth requise | Détails d'une newsletter |
/newsletters/:id/edit |
GET/POST | Auth requise | Modifier une newsletter |
/newsletters/:id/delete |
POST | Auth requise | Supprimer une newsletter |
/subscribers |
GET | Auth requise | Liste des abonnés |
/subscribers/create |
GET/POST | Auth requise | Ajouter un abonné |
/activity |
GET | Auth requise | Journal d'activité |
/auth/login |
GET/POST | Guest uniquement | Connexion |
/auth/register |
GET/POST | Guest uniquement | Inscription |
/auth/logout |
GET | - | Déconnexion |
Le fichier src/data/db.json contient 4 collections:
- users: Utilisateurs avec mots de passe hashés
- newsletters: Newsletters avec stats
- subscribers: Abonnés et leurs abonnements
- activities: Journal des activités
- Séparation des responsabilités: Pattern MVC avec couche Repository
- Maintenabilité: Pas de duplication, composants réutilisables
- Évolutivité: Remplacer JSON par SQL/MongoDB sans toucher aux controllers
- Sécurité: Mots de passe hashés, sessions sécurisées, validation des entrées
- Simplicité: Stack minimale, pas de build process
Pour migrer vers MySQL/PostgreSQL/MongoDB:
- Installer le driver (pg, mysql2, mongoose)
- Créer un nouveau service (ex:
sqlDatabaseService.js) - Remplacer
require('../data/jsonDatabaseService')dans les repositories - Aucun changement dans controllers, services ou routes!
Créez un fichier .env:
PORT=3000
NODE_ENV=development
SESSION_SECRET=votre-secret-super-securise-ici
Pour ajouter une nouvelle fonctionnalité:
- Repository: Ajouter méthodes d'accès aux données
- Service: Ajouter logique métier
- Controller: Ajouter actions
- Routes: Définir les routes
- Views: Créer les templates EJS
Pour toute question, consultez la documentation Express et EJS.