Ecampupuce

Plateforme Pédagogique MMI

Soutenance de Projet — Architecture REST & SPA

Architecture Globale & technologies

Mise en place d'une architecture Client-Serveur découplée communiquant via une API RESTful.

Front-end

  • Vue.js 3 & Vite : Single Page Application offrant une navigation fluide et sans rechargement.
  • Composition API : Structuration modulaire et maintenable de la logique des composants.
  • Vue Router : Gestion dynamique des routes côté client.

Back-end (Serveur)

  • Node.js & Express.js : Traitement asynchrone des requêtes et gestion de la logique métier.
  • SQLite3 : Base de données relationnelle embarquée et hébergée sur le serveur.

BDD et fonctionnement

Utilisation de l'API SQLite

  • Création de wrappers personnalisés pour les requêtes de la base de données.
  • Utilisation de l'approche moderne async/await en remplacement des callbacks imbriqués.
  • Résultat : Une base de code plus lisible, robuste et simplifiée pour le débogage.

Fonctionnement

  • Système d'auto-hébergement sur le serveur, plus simple pour le développement mais pas optimisé à long terme
  • Automatisation de la suppression en cascade (ex: la suppression d'une SAE entraîne celle des rendus associés).

Sécurité (1/2) : Authentification & JWT

Protection des Données

  • Cryptographie : Hachage systématique des mots de passe via la librairie bcrypt avant l'insertion en base.
  • Variables d'environnement : Isolation des clés secrètes (ex: JWT_SECRET) dans un fichier .env, garantissant la sécurité en production.

Standardisation JWT

  • Génération d'un token signé contenant le rôle, l'identifiant et le mail lors de la connexion.
  • Intercepteur Axios : Injection automatique du token dans les en-têtes HTTP de chaque requête.

Sécurité (2/2) : Contrôle d'Accès

Sécurité Backend

Implémentation de Middlewares Express (ex: requireTeacher, authenticateToken).

Blocage avec statut HTTP 403 pour toute tentative d'élévation de privilège non autorisée.

Expérience Frontend

Mise en place de Navigation Guards avec Vue Router.

Gestion de la navigation client et redirection automatique des utilisateurs non authentifiés.

Utilisation d'Helmet

Sécurisation des en-têtes HTTP contre le ClickJacking, le reniflage de type MIME et les failles XSS.

Gestion Avancée des Fichiers

Upload

  • Utilisation de Multer pour intercepter les flux multipart/form-data.
  • Distribution automatique dans des répertoires isolés sur le serveur.
  • Optimisation de la BDD : Enregistrement du chemin relatif uniquement.

Download

  • Mise en œuvre d'exports globaux professeurs via adm-zip.
  • Génération d'archives compressées à la volée en mémoire.
  • Transmission directe sans solliciter d'opérations d'écriture sur le disque.

Extraction Dynamique (Focus Node.js)

Exemple de l'implémentation du flux binaire pour le téléchargement centralisé des rendus.

Routes / API / Express
app.get('/api/rendus/zip/:saeId', requireTeacher, async (req, res) => {
  const zip = new AdmZip();
  const rendus = await db.allAsync('SELECT * FROM rendus WHERE sae = ?', [id]);
  
  rendus.forEach(rendu => {
    const fileName = `${rendu.nom}_${rendu.prenom}_Rendu.pdf`;
    zip.addLocalFile(rendu.fullPath, '', fileName);
  });

  res.set('Content-Disposition', 'attachment; filename=Rendus.zip');
  res.send(zip.toBuffer());
});

Méthodologie & Collaboration

Gestion de version (Git)

  • Dépôt centralisé structurant le projet en équipe.
  • Organisation en monorepo : séparation /client et /server.

Stratégie de Branches

  • Branche main pour le code stable.
  • Usage de branches thématiques (feature, debug, update) pour isoler les développements.

Organisation & Pilotage

Suivi de projet

  • Définition des tâches : Répartition claire des modules Backend et Frontend.
  • Feuille de route : Planification des jalons clés (Authentification > Upload > Vitrine).
  • Tableau de bord : Utilisation d'un tableur collaboratif pour le suivi en temps réel du statut des fonctionnalités.

Lien du suivi Google Sheets :

Consulter le Roadmap

Conception UI / UX

Maquettage & Prototypage

Approche agile avec maquettage itératif permettant un déploiement et des tests rapides.

Choix du Design System

  • Typographie moderne et panel de couleurs optimisés pour l'accessibilité (WCAG).
  • Implémentation de CSS Grid (Masonry) pour une vitrine étudiante fluide.
  • Panels utilisateurs pensés pour une prise en main intuitive sans formation.

Prototype Interactif :

Voir la Maquette Live

Aperçu interactif de l'interface étudiante

Rétrospective du Projet

Défis & Difficultés

  • Complexité initiale de la gestion des flux asynchrones avec Git.
  • Incident de déploiement (Hostinger VPS) causé par le Case Sensitivity des répertoires et fichiers sur l'OS Linux.

Réussites

  • API REST robuste garantissant un découplage total.
  • Résultat globale satisfaisant, et maîtrise de nouveaux outils professionnels.
  • Maîtrise d'un environnement de production professionnel.

Perspectives & Évolutions

App Mobile

Exploitation de l'API existante pour un client natif avec notifications push.

Live Chat

Intégration de WebSockets pour une discussion en temps réel par équipe.

Statistiques

Tableaux de bord de suivi de l'assiduité et des taux de réussite.

Bilan & Presentation

Le développement s'appuie sur une API robuste et une interface modulaire. Ce choix d'architecture RESTful ouvre la voie à une scalabilité aisée pour de futurs besoins pédagogiques.

Démonstration de l'Application