No description
  • JavaScript 100%
Find a file
2026-02-04 16:27:29 +01:00
lib the rest 2026-02-04 16:26:17 +01:00
server the rest 2026-02-04 16:26:17 +01:00
.eslintrc.json initial commit 2026-02-04 14:12:18 +01:00
.gitignore initial commit 2026-02-04 14:12:18 +01:00
.npmignore initial commit 2026-02-04 14:12:18 +01:00
knexfile.js the rest 2026-02-04 16:26:17 +01:00
package-lock.json the rest 2026-02-04 16:26:17 +01:00
package.json the rest 2026-02-04 16:26:17 +01:00
README.md removed the tests as there were not good 2026-02-04 16:27:29 +01:00
worker.js the rest 2026-02-04 16:26:17 +01:00
worker.log the rest 2026-02-04 16:26:17 +01:00

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

  1. Installer les dépendances

    npm install
    
  2. Variables d'Environnement Créez un fichier .env dans le dossier server (copiez depuis .env-keep ou 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_ethereal
    

    Note : 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).

  3. 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
    
  4. Exécuter les Migrations L'application exécute les migrations au démarrage (migrateOnStart: true dans le manifeste), mais vous pouvez aussi les lancer manuellement avec knex :

    npx knex migrate:latest
    
  5. Démarrer le Serveur

    npm start
    
  6. 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/documentation pour 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.