No description
  • JavaScript 100%
Find a file
2026-02-21 22:44:14 +01:00
lib feat: Implement user and movie management with JWT authentication, database migrations, and API routes. 2026-02-21 22:44:14 +01:00
server feat: Implement user and movie management with JWT authentication, database migrations, and API routes. 2026-02-21 22:44:14 +01:00
test feat: Implement user and movie management with JWT authentication, database migrations, and API routes. 2026-02-21 22:44:14 +01:00
.eslintrc.json initial commit 2026-02-21 21:44:33 +01:00
.gitignore initial commit 2026-02-21 21:44:33 +01:00
.npmignore initial commit 2026-02-21 21:44:33 +01:00
knexfile.js (flavor) objection v3.0.0 2026-02-21 21:46:15 +01:00
package-lock.json feat: Implement user and movie management with JWT authentication, database migrations, and API routes. 2026-02-21 22:44:14 +01:00
package.json feat: Implement user and movie management with JWT authentication, database migrations, and API routes. 2026-02-21 22:44:14 +01:00
README.md feat: Implement user and movie management with JWT authentication, database migrations, and API routes. 2026-02-21 22:44:14 +01:00

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

Prérequis

  • Node.js : v14+
  • Docker : Pour exécuter MySQL et RabbitMQ.

Configuration

  1. Cloner le dépôt

    git clone <repo-url>
    cd iut-project
    
  2. Installer les dépendances

    npm install
    
  3. Configurer les Variables d'Environnement Créez un fichier .env dans le dossier server (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
    
  4. 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
    
  5. Exécuter les Migrations Les migrations s'exécutent automatiquement au démarrage du serveur (migrateOnStart: true dans le manifest).

Exécution de l'Application

  • Mode Développement :

    npm start
    

    Le serveur sera disponible sur http://localhost:3000.

  • Voir la Documentation API : Visitez http://localhost:3000/documentation pour 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 utilisateur
  • POST /user/login - S'authentifier et obtenir un JWT
  • PATCH /user/{id} - Modifier les infos d'un utilisateur (Admin uniquement)
  • DELETE /user/{id} - Supprimer un utilisateur (Admin uniquement)

Films

  • GET /movies - Lister tous les films
  • POST /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 favoris
  • DELETE /movie/{id}/favorite - Retirer des favoris
  • POST /movies/export - Déclencher l'export CSV par email (Admin uniquement)