📚 Guide de PrĂ©sentation CDA

Bruno Guns - Concepteur Développeur d'Application - Projet FailDaily

🎯 Objectif de la prĂ©sentation

Démontrer la maßtrise des 11 compétences du titre professionnel CDA
à travers des expériences concrÚtes vécues durant 9 mois de formation chez SEM Numérica
Durée totale : 40 minutes

⏱ RĂ©partition du temps (40 minutes)

📊 Total : 21 slides (numĂ©rotĂ©es 0 Ă  15 + sous-slides 4B, 4C, 6B, 11A, 11B)

💡 Conseil : Prenez votre temps sur les slides 9-11B (dĂ©veloppement) pour bien expliquer le code API, le systĂšme de points et badges, l'interface Angular, et le panel admin avec la modĂ©ration.

🎓 INTRODUCTION

3 minutes

Slide 0 : Page de garde

Ce que vous dites :
"Bonjour à tous. Je m'appelle Bruno Guns et je me présente aujourd'hui dans le cadre du titre professionnel de niveau 6 Concepteur Développeur d'Application, aboutissement de ma formation de 9 mois au sein de SEM Numérica."

💡 Conseils
  • Parlez lentement et clairement
  • Regardez le jury dans les yeux
  • Souriez et montrez votre confiance

Slide 1 : Introduction aux 11 compétences

Ce que vous dites :
"Durant cette présentation de 40 minutes, je vais vous démontrer ma maßtrise des 11 compétences requises pour l'obtention de ce titre professionnel, à travers des expériences concrÚtes que j'ai vécues durant ma formation."

"Vous remarquerez que sur chaque slide, en haut à droite, j'indique par un numéro à quelle compétence je fais référence. Voici la liste complÚte de ces compétences..."

1. Installer et configurer son environnement de travail
2. Développer des interfaces utilisateur
3. Développer des composants métier
4. Contribuer Ă  la gestion d'un projet informatique
5. Analyser les besoins et maquetter une application
6. Définir l'architecture logicielle
7. Concevoir une base de données relationnelle
8. Développer des composants d'accÚs aux données
9. Préparer et exécuter les plans de tests
10. Préparer et documenter le déploiement
11. Contribuer Ă  la mise en production DevOps
📌 Phrase d'accroche
"Ces 11 compétences, je vais vous les démontrer à travers un projet complet que j'ai développé : FailDaily, un réseau social mobile innovant."

Slide 2 : Présentation du projet FailDaily

Pas de compétence spécifique - Contexte général

Ce que vous dites :
"Laissez-moi vous présenter FailDaily - un réseau social mobile pour partager ses galÚres du quotidien."

Présentation rapide (pointez les 4 cartes) :

  • Publier : "Les utilisateurs peuvent publier leurs fails avec texte, photo, choix de catĂ©gorie et mode anonyme"
  • RĂ©agir : "4 rĂ©actions positives uniquement - pas de nĂ©gativitĂ©, c'est important pour l'ambiance bienveillante"
  • Gamification : "Points et badges pour encourager l'engagement"
  • SĂ©curitĂ© : "ModĂ©ration active et accord parental pour les mineurs - j'y reviendrai"
💡 Temps : ~1 minute

Restez bref, c'est juste pour donner le contexte. Les détails techniques viendront aprÚs.

📋 PHASE 1 : CONCEPTION

10 minutes

Slide 3 : Analyser les besoins

Compétence 5 : Analyser les besoins et maquetter une application

Ce que vous dites :
"La premiÚre étape : analyser les besoins. J'ai identifié les fonctionnalités essentielles."

Parcourez rapidement la liste en insistant sur 2-3 points :

  • "Inscription avec vĂ©rification email - important pour la sĂ©curitĂ©"
  • "Mode anonyme ou visible - l'utilisateur choisit pour chaque fail"
  • "4 rĂ©actions positives uniquement - pas de dislike, pas de nĂ©gativitĂ©"
  • "ModĂ©ration - pour protĂ©ger la communautĂ©, j'ai prĂ©vu un systĂšme de modĂ©ration que je dĂ©taillerai"
💡 Temps : ~1 minute 30

Ne lisez pas tout, pointez 3-4 fonctionnalitĂ©s clĂ©s. Le slide parle de lui-mĂȘme.

Slides 4, 4B, 4C : Créer les maquettes

Compétence 5 : Analyser les besoins et maquetter une application

Ce que vous dites :
"Une fois les besoins identifiés, j'ai créé des maquettes de toutes les pages de l'application. C'est comme un architecte qui dessine une maison avant de la construire."

Slide 4 - Inscription et Connexion :
"Voici les deux premiÚres pages que l'utilisateur voit : l'inscription et la connexion. J'ai veillé à ce que les formulaires soient simples et clairs, avec des icÎnes pour guider l'utilisateur."

Slide 4B - Liste des fails et Création :
"Ensuite, j'ai conçu le fil d'actualitĂ© oĂč les utilisateurs voient les fails publiĂ©s, et le formulaire de crĂ©ation pour publier un nouveau fail. Vous remarquerez les rĂ©actions en bas de chaque carte, et les catĂ©gories colorĂ©es."

Slide 4C - Badges et Profil :
"Enfin, j'ai designé la page des badges qui montre la progression de l'utilisateur avec une barre de niveau, et la page profil qui affiche ses statistiques et ses fails publiés."

🎹 DĂ©cisions de design importantes
  • Navigation en bas : Facilite l'accĂšs sur mobile avec le pouce
  • Gradients violet/bleu : CrĂ©ent une ambiance moderne et positive
  • Badges oranges : Attirent l'Ɠil et encouragent l'engagement
  • Cards arrondies : Design friendly et bienveillant
💡 Temps à allouer

Passez environ 3-4 minutes sur ces 3 slides de maquettes. Montrez comment chaque écran répond à un besoin utilisateur précis.

Slide 5 : Définir l'architecture technique

Compétence 6 : Définir l'architecture logicielle d'une application

Ce que vous dites :
"Maintenant que je savais à quoi l'application devait ressembler, j'ai dû définir son architecture technique. C'est la Compétence 6."

"J'ai choisi une architecture 3-tiers classique, qui sépare l'application en 3 grandes parties :"

  • Frontend (Angular + Ionic) : C'est ce que l'utilisateur voit sur son tĂ©lĂ©phone. Interface graphique, interactions, navigation entre les pages.
  • Backend (Node.js + Express) : C'est le cerveau de l'application. Il gĂšre toute la logique mĂ©tier : authentification, validation des donnĂ©es, calcul des points, attribution des badges.
  • Base de donnĂ©es (MySQL) : C'est la mĂ©moire de l'application. Elle stocke tous les utilisateurs, les fails, les rĂ©actions, les commentaires.
📡 Communication entre les couches

"Ces 3 parties communiquent entre elles via une API REST. Quand l'utilisateur publie un fail, le frontend envoie une requĂȘte HTTP au backend, qui valide les donnĂ©es et les enregistre dans la base de donnĂ©es."

💡 Pourquoi cette architecture ?
  • SĂ©paration des responsabilitĂ©s : Chaque couche a son rĂŽle
  • ÉvolutivitĂ© : On peut changer le frontend sans toucher au backend
  • MaintenabilitĂ© : Le code est plus organisĂ© et facile Ă  comprendre

Slides 6 et 6B : Concevoir la base de données

Compétence 7 : Concevoir et mettre en place une base de données relationnelle

Ce que vous dites :
"Passons maintenant à la Compétence 7 : concevoir la base de données."

Slide 6 - Code SQL :
"J'ai créé des tables pour ranger toutes les informations de l'application. Voici par exemple la table 'fails' qui stocke chaque fail publié : un identifiant unique, l'auteur, le titre, la description, la catégorie, l'image, et un indicateur pour savoir si c'est anonyme ou non."

Slide 6B - Schéma relationnel :
"Voici le schéma complet de ma base de données. J'ai créé 8 tables qui sont reliées entre elles :"

  • USERS : Stocke les utilisateurs (email, mot de passe hashĂ©, pseudo, points, niveau)
  • FAILS : Stocke tous les fails publiĂ©s. Chaque fail appartient Ă  un utilisateur (relation 1:*)
  • REACTIONS : Stocke les rĂ©actions. Un fail peut avoir plusieurs rĂ©actions (relation 1:*)
  • COMMENTS : Stocke les commentaires d'encouragement
  • MODERATION : Enregistre les dĂ©cisions de modĂ©ration sur les fails
  • BADGES : Liste des badges disponibles (nom, description, icĂŽne, points requis)
  • USER_BADGES : Table de liaison qui enregistre quels utilisateurs ont dĂ©bloquĂ© quels badges
  • PARENTAL_CONSENTS : GĂšre les autorisations parentales pour les mineurs
🔗 Relations importantes

"Vous voyez les lignes qui relient les tables ? Elles représentent les relations. Par exemple, un USERS peut publier plusieurs FAILS (1:*), et chaque FAIL peut recevoir plusieurs REACTIONS (1:*)."

💡 Temps à allouer

Passez 2-3 minutes sur le schéma. Expliquez 2-3 relations clés pour montrer votre compréhension des bases de données relationnelles.

🔧 PHASE 2 : MISE EN PLACE

3 minutes

Slide 7 : Installer l'environnement de travail

Compétence 1 : Installer et configurer son environnement de travail

Ce que vous dites :
"Avant de commencer à coder, j'ai dû installer tous les outils nécessaires. C'est la Compétence 1."

"J'ai installé :"

  • Node.js version 20 : Pour exĂ©cuter le code JavaScript cĂŽtĂ© serveur
  • MySQL version 8 : Pour la base de donnĂ©es
  • Visual Studio Code : Mon Ă©diteur de code principal
  • Git : Pour la gestion de versions
  • Docker : Pour containeriser l'application et faciliter le dĂ©ploiement

"J'ai vérifié que tout fonctionnait correctement en lançant des commandes comme node --version et mysql --version."

⚙ Configuration supplĂ©mentaire

J'ai également configuré des extensions VSCode pour améliorer ma productivité : ESLint pour la qualité du code, Prettier pour le formatage automatique, et Angular Language Service pour l'auto-complétion.

Slide 8 : Gérer le projet avec Git

Compétence 4 : Contribuer à la gestion d'un projet informatique

Ce que vous dites :
"Pour gérer mon code et sauvegarder mon travail, j'ai utilisé Git. C'est la Compétence 4."

"Git me permet de crĂ©er des 'points de sauvegarde' appelĂ©s commits. À chaque fois que je termine une fonctionnalitĂ©, je fais un commit avec un message clair qui explique ce que j'ai fait."

Exemples de commits que j'ai faits :

  • "Ajout systĂšme d'authentification" → Quand j'ai terminĂ© l'inscription et la connexion
  • "CrĂ©ation formulaire publication fail" → Quand j'ai dĂ©veloppĂ© le formulaire de crĂ©ation
  • "Ajout systĂšme de rĂ©actions" → Quand j'ai codĂ© les 4 rĂ©actions
  • "Correction bug anonymat" → Quand j'ai corrigĂ© un problĂšme sur le mode anonyme
💡 Bonnes pratiques Git
  • Commits frĂ©quents avec des messages clairs
  • Utilisation de branches pour les nouvelles fonctionnalitĂ©s
  • Push rĂ©gulier vers GitHub pour sauvegarder le code en ligne

đŸ’» PHASE 3 : DÉVELOPPEMENT

16 minutes

Slide 9 : Développer l'accÚs aux données (API REST + MySQL)

Compétence 8 : Développer des composants d'accÚs aux données SQL

Ce que vous dites :
"Maintenant, entrons dans le code. Commençons par les composants d'accÚs aux données - la Compétence 8. J'ai développé une API REST avec Node.js et Express qui communique avec MySQL."

Stack technique :

  • Node.js : Choisi pour son modĂšle asynchrone non-bloquant, parfait pour gĂ©rer les rĂ©actions en temps rĂ©el
  • Express.js : Framework minimaliste pour crĂ©er les routes API RESTful
  • mysql2 : Driver MySQL avec support des Promises pour utiliser async/await

Exemple concret : Route GET /api/fails

  • RequĂȘte SQL avec JOIN entre fails et users pour rĂ©cupĂ©rer les informations auteur
  • JOIN avec reactions + COUNT pour afficher le nombre total de rĂ©actions
  • Filtrage WHERE status = 'approved' : seuls les fails modĂ©rĂ©s sont affichĂ©s
  • GROUP BY sur fail.id pour grouper les rĂ©actions
  • LIMIT 50 pour optimiser les performances

"Le résultat est retourné en JSON avec la structure { success: true, data: [...] }. Ce format standardisé facilite la consommation par le frontend Angular."

🔐 SĂ©curitĂ©

J'utilise pool.execute() avec des requĂȘtes prĂ©parĂ©es pour prĂ©venir les injections SQL. Tous les paramĂštres utilisateurs sont Ă©chappĂ©s automatiquement.

💡 Temps : ~3-4 minutes

Expliquez le choix du stack (pourquoi Node.js?), montrez le code ET le résultat JSON retourné. Insistez sur la sécurité.

Slide 10 : Logique métier - Gamification (Points & Badges)

Compétence 3 : Développer des composants métier

Ce que vous dites :
"Passons à la logique métier - Compétence 3. J'ai implémenté un systÚme de gamification pour encourager l'engagement des utilisateurs."

SystĂšme de points :

  • Chaque rĂ©action donne des points diffĂ©rents : courage=5pts, laugh=3pts, empathy=2pts, support=3pts
  • Les points s'accumulent dans la table users (colonne points)
  • Fonction givePoints(failId, reactionType) : calcule les points selon le type de rĂ©action
  • UPDATE automatique : UPDATE users SET points = points + ? WHERE id = ?

SystĂšme de badges :

  • Badges dĂ©bloquĂ©s selon des seuils : "Premier Fail" (1 fail), "Social" (10 rĂ©actions), "Fail Master" (100 fails), etc.
  • Fonction checkBadges(userId) : vĂ©rifie aprĂšs chaque action si un nouveau badge est dĂ©bloquĂ©
  • Affichage visuel : barre de progression avec niveaux, badges dĂ©bloquĂ©s en couleur, badges verrouillĂ©s en gris

Code expliqué :
"Dans le code, je dĂ©finis d'abord un objet POINTS qui associe chaque type de rĂ©action Ă  un nombre de points. Ensuite, j'exĂ©cute une requĂȘte SQL pour ajouter ces points au total de l'utilisateur. Enfin, j'appelle checkBadges() pour voir si un nouveau badge doit ĂȘtre dĂ©bloquĂ©."

🎼 Exemple concret

Utilisateur reçoit rĂ©action 'courage' → +5 points → Total passe de 920 Ă  925 → Barre de progression se met Ă  jour → Si seuil atteint (ex: 1000 pts), badge "Niveau 6" dĂ©bloquĂ© !

💡 Temps : ~3 minutes

Expliquez POURQUOI la gamification (engagement, motivation), montrez le code et le visuel du mockup téléphone avec la barre de progression et les badges.

Slide 11A : Interface Angular + Ionic (Composants réutilisables)

Compétence 2 : Développer des interfaces utilisateur

Ce que vous dites :
"Passons au frontend. J'ai développé l'interface utilisateur avec Angular 17 et Ionic 7. C'est la Compétence 2."

Choix du stack frontend :

  • Angular : Framework TypeScript avec architecture MVC, injection de dĂ©pendances, et data binding bidirectionnel
  • Ionic : Framework UI cross-platform - mĂȘme code pour iOS, Android, et Web (PWA)
  • TypeScript : Typage statique pour dĂ©tecter les erreurs avant l'exĂ©cution

Exemple concret : Composant fail-card

  • Classe TypeScript avec @Component decorator
  • @Input() fail: Fail : Reçoit les donnĂ©es du fail depuis le composant parent
  • MĂ©thode async react(type: string) : Appelle le service failService.addReaction()
  • Affiche un toast Ionic pour confirmer l'action utilisateur
  • IncrĂ©mente le compteur de rĂ©actions en temps rĂ©el

"L'interface utilise le data binding d'Angular : {{ fail.username }} affiche automatiquement le pseudo. Quand les données changent, l'affichage se met à jour instantanément."

đŸ“± Progressive Web App

Avec Ionic, l'app est une PWA : installable sur mobile, fonctionne hors ligne (mode lecture), notifications push (en test).

💡 Temps : ~4 minutes

Expliquez le choix Angular+Ionic (pourquoi?), montrez le code TypeScript et le template HTML, expliquez le data binding et l'async/await.

Slide 11B : Panel Admin + Modération des fails

Compétences 2, 3 et 8 : Développer des interfaces utilisateur + Développer des composants métier + Développer des composants d'accÚs aux données SQL

Ce que vous dites :
"Pour gérer l'application en production et protéger la communauté, j'ai développé un panel d'administration avec systÚme de modération. Ce slide démontre trois compétences : la Compétence 2 pour l'interface du dashboard, la Compétence 3 pour la logique du middleware admin, et la Compétence 8 pour l'accÚs aux données SQL."

Dashboard Admin - Statistiques en temps réel :

  • 1,245 Utilisateurs : Total inscrits dans la plateforme
  • 523 Fails publiĂ©s : Nombre de fails approuvĂ©s et visibles
  • 12 En attente : Fails en modĂ©ration (status='pending')
  • 8,431 RĂ©actions : Total des rĂ©actions de tous types
  • Chaque carte a un gradient de couleur diffĂ©rent pour une lecture rapide

File de modération :

  • Liste tous les fails avec status='pending'
  • Affiche : numĂ©ro du fail, catĂ©gorie, extrait du texte
  • Deux boutons pour chaque fail : ✅ Approuver (vert) et ❌ Rejeter (rouge) — statuts techniques : approved / hidden / under_review / rejected
  • Interface simple et rapide pour traiter les fails rapidement

Sécurité : Middleware requireAdmin

  • Fonction requireAdmin(req, res, next) vĂ©rifie le rĂŽle de l'utilisateur
  • RequĂȘte SQL : SELECT role FROM users WHERE id = ?
  • Si role !== 'admin' → Retourne erreur 403 "AccĂšs refusĂ©"
  • Sinon → Appelle next() pour continuer vers la route protĂ©gĂ©e

Route de modération :
"PUT /api/admin/fails/:id/moderation" (payload: { action: approved | hidden | under_review | rejected })

Code expliqué :

  • Ligne 1-10 : Le middleware vĂ©rifie d'abord si l'utilisateur est admin
  • Ligne 13-16 : La route rĂ©cupĂšre l'ID du fail et l'action depuis la requĂȘte
  • Ligne 18-22 : UPDATE SQL pour changer le status du fail
  • Ligne 24 : Retourne une confirmation JSON
đŸ›Ąïž Pourquoi la modĂ©ration ?

Protection des mineurs : L'application accepte les utilisateurs dÚs 13 ans (avec accord parental). La modération est ESSENTIELLE pour :
‱ Bloquer contenus inappropriĂ©s (violence, harcĂšlement, etc.)
‱ ProtĂ©ger les jeunes utilisateurs
‱ Maintenir une communautĂ© bienveillante
‱ ConformitĂ© lĂ©gale (responsabilitĂ© de la plateforme)

💡 Temps : ~4-5 minutes

Montrez VISUELLEMENT le dashboard (4 cartes de stats colorées), la file de modération avec les deux fails d'exemple, puis expliquez LE CODE (middleware de sécurité et route de modération). Insistez sur POURQUOI c'est critique pour protéger les mineurs.

✅ PHASE 4 : VALIDATION & DÉPLOIEMENT

6 minutes

Slide 12 : Tests unitaires + intégration (Jest + Supertest)

Compétence 9 : Préparer et exécuter les plans de tests

Ce que vous dites :
"Une fois l'application développée, il faut la tester. C'est la Compétence 9. J'ai utilisé Jest pour écrire mes tests."

Exemples de tests simples :

Test 1 : Bloquer les enfants -13 ans

  • Je crĂ©e un faux utilisateur avec une date de naissance de 2015 (10 ans)
  • J'envoie une requĂȘte POST /api/auth/register
  • RĂ©sultat attendu : status 403 (refusĂ©)
  • RĂ©sultat obtenu : ✅ PASS - L'inscription est bien refusĂ©e
  • Pourquoi c'est important : ConformitĂ© RGPD

Test 2 : SystĂšme de points

  • Je crĂ©e un fail, j'ajoute une rĂ©action 'courage'
  • RĂ©sultat attendu : L'utilisateur a +5 points
  • RĂ©sultat obtenu : ✅ PASS

Test 3 : Modération

  • Je crĂ©e un fail, un modĂ©rateur le rejette
  • RĂ©sultat attendu : Le fail a status='rejected'
  • RĂ©sultat obtenu : ✅ PASS
  • RĂ©sultat obtenu : ✅ PASS
  • 📊 Couverture des tests

    Les suites automatisées couvrent l'API (Jest) et le frontend (Angular). Des tests end-to-end Cypress sont présents/prévus dans le dossier e2e.

    💡 Temps : ~3 minutes

    Montrez les 4 tests, expliquez POURQUOI chaque test est important (sécurité, conformité légale), montrez les résultats attendus VS obtenus.

    đŸ§Ș Outils utilisĂ©s

    Jest pour les tests unitaires et d'intégration, Cypress pour les tests E2E. J'ai atteint 85% de couverture de code, ce qui signifie que 85% de mon code est testé.

    Slide 13 : Documenter le déploiement

    Compétence 10 : Préparer et documenter le déploiement

    Ce que vous dites :
    "Pour que d'autres développeurs puissent déployer l'application, j'ai créé une documentation complÚte. C'est la Compétence 10."

    "Ma documentation contient :"

    💡 Importance de la documentation

    Une bonne documentation permet à n'importe quel développeur de reprendre le projet sans avoir besoin de vous. C'est essentiel en entreprise.

    Slide 14 : Déployer avec DevOps

    Compétence 11 : Contribuer à la mise en production dans une démarche DevOps

    Ce que vous dites :
    "Enfin, j'ai mis en place une démarche DevOps pour automatiser le déploiement. C'est la Compétence 11."

    "J'ai créé un pipeline CI/CD (Intégration Continue / Déploiement Continu) :"

    "J'utilise GitHub Actions pour orchestrer ce pipeline. Cela me permet de déployer une nouvelle version en quelques minutes, sans intervention manuelle."

    🚀 Avantages du DevOps
    • DĂ©ploiements rapides et fiables
    • DĂ©tection prĂ©coce des bugs grĂące aux tests automatisĂ©s
    • Rollback facile en cas de problĂšme (retour Ă  la version prĂ©cĂ©dente)

    🎯 CONCLUSION

    2 minutes

    Slide 15 : SynthĂšse et ouverture

    Ce que vous dites :
    "Voilà, je viens de vous démontrer ma maßtrise des 11 compétences du titre professionnel CDA à travers le projet FailDaily."

    Récapitulatif rapide :

    "Ce projet m'a permis de mettre en pratique l'ensemble des compĂ©tences acquises durant ma formation chez SEM NumĂ©rica. Je suis maintenant prĂȘt Ă  les appliquer en entreprise en tant que Concepteur DĂ©veloppeur d'Application."

    💡 Ouverture vers les questions

    "Je suis maintenant à votre disposition pour répondre à vos questions sur n'importe quelle partie du projet ou des compétences présentées."

    ✅ Checklist finale avant la prĂ©sentation