- JavaScript 100%
| lib | ||
| server | ||
| .eslintrc.json | ||
| .gitignore | ||
| .npmignore | ||
| knexfile.js | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| worker.js | ||
| worker.log | ||
Projet Hapi - Gestion d'Utilisateurs & Bibliothèque de Films
Une application Node.js complète construite avec Hapi.js, Objection.js/Knex et MySQL. Elle intègre une authentification JWT, des notifications par email, une bibliothèque de films avec favoris, et des exports CSV asynchrones via RabbitMQ.
Fonctionnalités
- Authentification : Auth basée sur JWT avec des scopes (
user,admin). - Gestion des Utilisateurs : Inscription, Connexion, Opérations CRUD.
- Bibliothèque de Films : Films gérés par l'admin (Titre, Description, Réalisateur, Date de sortie).
- Favoris : Les utilisateurs peuvent ajouter/retirer des films de leurs favoris.
- Notifications :
- Email de bienvenue à l'inscription.
- Notification de nouveau film à tous les utilisateurs.
- Notification de mise à jour d'un film aux utilisateurs l'ayant en favori.
- Export : L'admin peut demander un export CSV des films, traité de manière asynchrone via RabbitMQ et envoyé par email.
- Documentation : Interface Swagger disponible sur
/documentation.
Prérequis
- Node.js (v14+ recommandé)
- Docker & Docker Compose (pour MySQL et RabbitMQ)
Installation
-
Installer les dépendances
npm install -
Variables d'Environnement Créez un fichier
.envdans le dossierserver(copiez depuis.env-keepou créez-en un nouveau) avec le contenu suivant :# Base de données DB_HOST=0.0.0.0 DB_USER=root DB_PASSWORD=hapi DB_DATABASE=user DB_PORT=3306 # Mail (Ethereal.email ou autre SMTP) SMTP_HOST=smtp.ethereal.email SMTP_PORT=587 SMTP_USER=votre_user_ethereal SMTP_PASS=votre_pass_etherealNote : L'authentification SMTP est optionnelle. Si aucune info d'authentification n'est fournie, l'envoi d'email sera ignoré pour éviter les erreurs (utile pour le développement).
-
Démarrer les Services (MySQL & RabbitMQ)
# MySQL docker run -d --name hapi-mysql -e MYSQL_ROOT_PASSWORD=hapi -e MYSQL_DATABASE=user -p 3306:3306 mysql:8.0 --default-authentication-plugin=mysql_native_password # RabbitMQ docker run -d --name hapi-rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management -
Exécuter les Migrations L'application exécute les migrations au démarrage (
migrateOnStart: truedans le manifeste), mais vous pouvez aussi les lancer manuellement avecknex:npx knex migrate:latest -
Démarrer le Serveur
npm start -
Démarrer le Worker Pour les exports CSV, lancez le worker dans un terminal séparé :
node worker.js
Utilisation
- Documentation API : Visitez
http://localhost:3000/documentationpour explorer et tester les endpoints. - Accès Admin : Mettez à jour le scope d'un utilisateur à
['admin']dans la base de données pour accéder aux routes admin :UPDATE user SET scope='["admin"]' WHERE id = <user_id>;
Structure du Projet
lib/: Logique centrale de l'application (plugins, routes, modèles, services).models/: Modèles Objection.js (User,Movie).services/: Logique métier (UserService,MovieService,MailService,ProducerService).routes/: Endpoints API.migrations/: Changements de schéma de base de données.
server/: Configuration du serveur (manifest.js,.env).worker.js: Consommateur RabbitMQ pour les exports CSV.