- JavaScript 100%
| lib | ||
| server | ||
| test | ||
| .eslintrc.json | ||
| .gitignore | ||
| .npmignore | ||
| knexfile.js | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
Projet IUT - API de Bibliothèque de Films
Une application backend robuste construite avec Hapi.js, MySQL, RabbitMQ, et Nodemailer. Ce projet fournit un système complet de gestion d'utilisateurs, une bibliothèque de films avec des fonctionnalités de favoris, et un traitement en arrière-plan pour les exports CSV.
Fonctionnalités
Gestion des Utilisateurs
- Inscription & Connexion : Création sécurisée d'utilisateurs avec hachage de mot de passe (bcrypt).
- Authentification JWT : Routes sécurisées utilisant des JSON Web Tokens.
- Rôles & Portées (Scopes) : Contrôle d'accès basé sur les rôles (Admin vs Utilisateur).
- Gestion de Profil : Mise à jour et suppression des profils utilisateurs.
Bibliothèque de Films
- Opérations CRUD : Les administrateurs peuvent créer, lire, modifier et supprimer des films.
- Favoris : Les utilisateurs peuvent gérer leur liste de films favoris.
- Notifications en Temps Réel : Envoi automatique d'emails lorsqu'un nouveau film est ajouté ou qu'un film favori est mis à jour.
Traitement en Arrière-plan
- Export CSV Asynchrone : Les administrateurs peuvent demander un export complet de la bibliothèque.
- File d'attente de messages : Utilise RabbitMQ pour gérer les tâches d'exportation en arrière-plan.
- Livraison par Email : Les exports sont envoyés directement à l'adresse email du demandeur.
🛠️ Stack Technique
- Framework : Hapi.js
- Base de données : MySQL avec l'ORM Objection.js & Knex.js
- Message Broker : RabbitMQ
- Documentation : Swagger (via hapi-swagger)
- Tests : @hapi/lab & @hapi/code
- Email : Nodemailer
Prérequis
- Node.js : v14+
- Docker : Pour exécuter MySQL et RabbitMQ.
Configuration
-
Cloner le dépôt
git clone <repo-url> cd iut-project -
Installer les dépendances
npm install -
Configurer les Variables d'Environnement Créez un fichier
.envdans le dossierserver(en vous basant sur.env-keep) :PORT=3000 DB_HOST=127.0.0.1 DB_USER=root DB_PASSWORD=hapi DB_DATABASE=user DB_PORT=3306 RABBITMQ_URL=amqp://localhost:5672 MAIL_HOST=smtp.ethereal.email MAIL_PORT=587 MAIL_USER=votre_utilisateur_ethereal MAIL_PASS=votre_mot_de_passe_ethereal -
Démarrer l'Infrastructure (Docker)
# Démarrer 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 # Démarrer RabbitMQ docker run -d --name hapi-rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management -
Exécuter les Migrations Les migrations s'exécutent automatiquement au démarrage du serveur (
migrateOnStart: truedans le manifest).
Exécution de l'Application
-
Mode Développement :
npm startLe serveur sera disponible sur
http://localhost:3000. -
Voir la Documentation API : Visitez
http://localhost:3000/documentationpour voir l'interface Swagger interactive.
🧪 Tests
Lancez la suite de tests avec :
npm test
Résumé des Points d'Entrée API (Endpoints)
Auth / Utilisateur
POST /user- Enregistrer un nouvel utilisateurPOST /user/login- S'authentifier et obtenir un JWTPATCH /user/{id}- Modifier les infos d'un utilisateur (Admin uniquement)DELETE /user/{id}- Supprimer un utilisateur (Admin uniquement)
Films
GET /movies- Lister tous les filmsPOST /movie- Ajouter un nouveau film (Admin uniquement)PATCH /movie/{id}- Modifier un film (Admin uniquement)DELETE /movie/{id}- Supprimer un film (Admin uniquement)POST /movie/{id}/favorite- Ajouter un film aux favorisDELETE /movie/{id}/favorite- Retirer des favorisPOST /movies/export- Déclencher l'export CSV par email (Admin uniquement)