Skip to content

Nissyaniss/Hapi

Repository files navigation

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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors