Expert en Architecture et Développement Logiciel · RNCP 38822 · Bloc 2 — Compétences BC02 ·
PROJET 2
Projet applicatif — Full Stack · RGPD

EventFlow — Plateforme de
Gestion d'Événements

Vous êtes développeur expert mandaté pour concevoir et développer de bout en bout une plateforme de gestion d'événements professionnels. Ce projet couvre l'intégralité du Bloc 2 : architecture logicielle, développement front-end et back-end, et conformité RGPD native.

100 pts
Barème total
5 jours
Durée du projet
5 livrables
Compétences BC02
Accueil/ RNCP 38822 — Projets/ Projet 2 — EventFlow · BC02

Bloc 2 — Concevoir et développer des solutions logicielles

RNCP 38822 · Expert en Architecture et Développement Logiciel · Niveau 7

Compétences visées

Ce bloc évalue la capacité à élaborer l'architecture logicielle d'une application complexe, à en concevoir la schématisation (UML, BPMN), à préparer l'intégrité du code (tests, CI), et à développer les couches front-end et back-end en répondant à des exigences fonctionnelles et non-fonctionnelles précises.

La modélisation des données, la conception d'une API REST sécurisée, le développement d'une SPA et la gestion de la conformité réglementaire (RGPD) sont au cœur de l'évaluation.

Ce que ce projet évalue

Le projet EventFlow couvre l'ensemble du spectre BC02 : Symfony 6 pour le back-end API REST avec authentification JWT et gestion des rôles, Vue.js 3 pour le front-end SPA avec Composition API, Pinia et Vue Router, et une conformité RGPD native et complète — consentement, droits utilisateurs, anonymisation, registre des traitements.

L'accent est mis sur la qualité architecturale : séparation des responsabilités, composants réutilisables, validation des données, gestion des erreurs et documentation technique.

Symfony 6
Back-end API REST
Vue.js 3
SPA Front-end
JWT + RBAC
Authentification
RGPD
Conformité native

Contexte & Mission

Développeur Full Stack Expert · Architecture Logicielle
Énoncé de mission

Vous êtes développeur expert chargé de concevoir et développer de bout en bout la plateforme EventFlow — une application web de gestion d'événements professionnels (conférences, meetups, formations). Les organisateurs créent et publient des événements ; les participants s'inscrivent en ligne. L'application repose sur une architecture moderne API-first — back-end Symfony + SPA Vue.js — avec une conformité RGPD intégrée dès la conception (Privacy by Design).

Besoins fonctionnels identifiés

🎟️ Gestion des événements

Les organisateurs doivent pouvoir créer, modifier, publier et supprimer leurs événements. Les participants peuvent s'inscrire et annuler leur inscription.

🔐 Authentification & rôles

Trois rôles distincts : visiteur public, participant inscrit, organisateur. Chaque rôle dispose d'un périmètre d'accès strictement défini.

🔒 Conformité RGPD

Consentement explicite à l'inscription, bandeau cookies granulaire, droit de rectification, anonymisation des comptes, registre des traitements.

📋 Données personnelles

Page "Mes données" permettant à chaque utilisateur d'accéder à l'ensemble des informations le concernant et d'exercer ses droits RGPD.

⚙️ Qualité du code

Architecture propre avec séparation des responsabilités, validation des entrées, gestion des erreurs HTTP, documentation API et tests unitaires.


Contraintes du projet

👥 Format équipe

Binômes de 2 étudiants. Les deux membres doivent apparaître dans l'historique Git avec des contributions équilibrées.

🏗️ Architecture imposée

Dossier /backend (Symfony — API REST JSON) + dossier /frontend (Vue.js — SPA). Communication exclusivement via l'API. Un seul repo Git.

📅 Durée

5 jours intensifs. Organisation recommandée : J1-J2 en parallèle (back / front), J3 ensemble sur le RGPD, J4-J5 en intégration commune.

🔴 Points éliminatoires

Application non lançable → plafond 8/20. Aucune feature RGPD → plafond 12/20. Mots de passe en clair → −10 pts. Un seul membre dans les commits → −5 pts.

🛡️ Sécurité minimale

JWT signé obligatoire, mots de passe hashés (bcrypt), pas de données sensibles dans le code, fichier .env jamais commité.

🗄

Modèle de Données — Entités Doctrine

4 entités · Champs RGPD identifiés

Les 4 entités Doctrine à implémenter. Les champs marqués RGPD sont soumis à des règles de traitement spécifiques et doivent être documentés dans le registre des traitements.

👤 User
int id
RGPD email
string password (bcrypt)
RGPD firstName
RGPD lastName
RGPD phone (nullable)
enum role
RGPD consentDate
string consentVersion
bool isAnonymized
datetime createdAt
🎟️ Event
int id
string title
text description
datetime eventDate
string location
int maxParticipants
ManyToOne organizer → User
bool isPublished
datetime createdAt
📋 Registration
int id
ManyToOne user → User
ManyToOne event → Event
datetime registeredAt
enum status
Status : pending / confirmed / cancelled
📝 ConsentLog
int id
ManyToOne user → User
enum action
datetime timestamp
RGPD ipAddress (hashée SHA-256)
string details
Actions : consent_given · withdrawn · data_accessed · data_deleted

Tâches de Développement & Consignes Précises

5 axes · Compétences BC02 complètes
Vous devez développer l'application EventFlow de bout en bout selon les 5 axes ci-dessous, chacun évalué sur des compétences précises du Bloc 2. Chaque choix d'architecture doit être justifié dans le README ou le rapport. Le code doit être propre, organisé et reproductible depuis le README.
🐘
Axe 1 — Back-end Symfony : Architecture & API REST
Controllers · Services · Doctrine ORM · JWT · Sérialisation
BC02 — Dev back-end
  • 1
    Concevez et implémentez les 4 entités Doctrine (User, Event, Registration, ConsentLog) avec leurs relations, leurs migrations versionnées et leurs contraintes de validation (Symfony Assert).
  • 2
    Développez l'ensemble des endpoints REST définis dans le tableau des routes (auth, CRUD événements, inscriptions, endpoints RGPD). Chaque endpoint doit retourner les codes HTTP corrects, une sérialisation JSON propre via les groupes Symfony Serializer, et une gestion explicite des erreurs (404, 403, 422).
  • 3
    Implémentez l'authentification JWT avec LexikJWTAuthenticationBundle. Gérez les rôles (ROLE_USER, ROLE_ORGANIZER) via les Voters Symfony pour sécuriser l'accès aux endpoints selon le rôle et la propriété de la ressource.
  • 4
    Séparez correctement les responsabilités : Controllers (routing uniquement), Services (logique métier), Repositories (accès données), DTOs (transfert). Cette séparation sera évaluée à la lecture du code.
  • 5
    Implémentez la commande console php bin/console app:anonymize-old-users qui anonymise les comptes inactifs depuis plus de 2 ans (prénom → "Utilisateur supprimé", email → hash SHA256, téléphone → null, isAnonymized = true).
Endpoints attendus (liste non exhaustive)

POST /api/auth/register · POST /api/auth/login · GET /api/events · POST /api/events · PUT /api/events/{id} · DELETE /api/events/{id} · POST /api/events/{id}/register · DELETE /api/registrations/{id} · GET /api/me · PUT /api/me · DELETE /api/me · POST /api/consent

💚
Axe 2 — Front-end Vue.js : SPA & Composants
Composition API · Vue Router · Pinia · Axios · Guards
BC02 — Dev front-end
  • 1
    Développez la SPA Vue.js 3 avec Vite, Composition API et Pinia. Le store authStore gère le token JWT (stockage, état d'authentification, rôle courant) et expose les actions login / logout accessibles dans toute l'application.
  • 2
    Implémentez le routage Vue Router avec toutes les vues listées dans le tableau des routes (/, /events, /events/:id, /login, /register, /dashboard, /events/create, /events/:id/edit, /profile, /privacy). Les routes protégées doivent être sécurisées par des guards de navigation vérifiant l'authentification et le rôle.
  • 3
    Créez des composants réutilisables : formulaire d'événement (création/édition), carte événement, modal de confirmation, bandeau cookies. Chaque composant doit être autonome, documenté par des props typées et gérer ses états de chargement (skeleton, spinner, message d'erreur).
  • 4
    Consommez l'API Symfony via Axios avec intercepteurs : ajout automatique du header Authorization (Bearer token), gestion des erreurs 401 (redirection login), 403 et 404. L'UX doit être soignée — les formulaires valident les champs avant soumission et affichent des feedbacks clairs.
Conseil architecture front

Organisez vos appels API dans un dossier /services dédié (eventService.js, authService.js…) — ne faites jamais d'appels Axios directement dans les composants. Le jury vérifiera cette séparation.

🔒
Axe 3 — Conformité RGPD native
Consentement · Droits utilisateurs · Anonymisation · Registre des traitements
BC02 — Conformité réglementaire
  • 1
    Implémentez le consentement explicite à l'inscription : checkbox non pré-cochée, version de la politique enregistrée en base (champ consentVersion), date d'acceptation tracée. Un ConsentLog est créé à chaque action sur les données personnelles.
  • 2
    Développez le bandeau cookies granulaire (composant Vue.js global) avec 3 catégories : nécessaires (non désactivables), analytiques, marketing. Le choix est persisté en localStorage et respecté côté front.
  • 3
    Implémentez les droits RGPD : droit d'accès (GET /api/me — page "Mes données"), droit de rectification (PUT /api/me — formulaire de modification), droit à l'effacement (DELETE /api/me — anonymisation, pas suppression). Le ConsentLog est toujours conservé après anonymisation.
  • 4
    Produisez le registre des traitements (livrable documentaire) listant les 8 traitements identifiés avec pour chacun : finalité, base légale, données concernées, destinataires, durée de conservation, mesures de sécurité. Un DPO fictif doit être désigné.
⚠️ Point critique RGPD

L'anonymisation n'est pas une suppression. Les données sont remplacées par des valeurs neutres ("Utilisateur supprimé", hash de l'email) mais l'enregistrement est conservé pour la cohérence des relations (inscriptions, logs). Le ConsentLog est toujours conservé — obligation légale.

📦
Axe 4 — Qualité, Tests & Documentation
Validation · Codes HTTP · Collection Postman · README
BC02 — Qualité logicielle
  • 1
    Validez toutes les entrées côté API avec les contraintes Symfony Assert (NotBlank, Email, Length, etc.). Les erreurs de validation doivent retourner un 422 avec le détail des champs invalides en JSON, pas une exception générique.
  • 2
    Produisez une collection Postman complète (ou fichier .http) testant tous les endpoints avec les requêtes et réponses exemples. Incluez les cas d'erreur (401, 403, 404, 422). La collection doit pouvoir être importée et exécutée directement.
  • 3
    Rédigez un README technique complet : prérequis (PHP, Node, Composer, npm), variables d'environnement (.env.example), commandes d'installation et de lancement pas à pas, architecture du projet expliquée.
Bonus — points supplémentaires
  • +3 pts — Tests PHPUnit (minimum 5 tests : auth + CRUD + anonymisation)
  • +2 pts — Docker Compose fonctionnel (PHP + Node + MySQL + Nginx)
  • +2 pts — Export des données personnelles (droit de portabilité — GET /api/me/export)
  • +2 pts — CI/CD GitHub Actions lançant les tests PHPUnit à chaque push
🎤
Axe 5 — Soutenance : Démo live & Questions techniques
15 min démo · 10 min Q&A · Parcours complet
BC02 — Communication technique
  • 1
    Démo live de 15 minutes sans slides. Parcours imposé : inscription avec consentement → connexion → création d'un événement → inscription à un événement → page "Mes données" → mise à jour du profil → anonymisation du compte. Chaque étape doit être fonctionnelle en direct.
  • 2
    Questions techniques individuelles (10 min) : chaque membre du binôme est interrogé séparément. Les questions portent sur Symfony (cycle de vie requête, DI Container, Voters), Vue.js (ref vs reactive, Pinia, guards) et RGPD (base légale, anonymisation vs pseudonymisation, Privacy by Design).
Questions potentielles en soutenance
  • Décrivez le cycle de vie d'une requête HTTP dans Symfony. Qu'est-ce qu'un Voter ?
  • Quelle différence entre ref() et reactive() en Vue 3 ? Comment fonctionne Pinia ?
  • Sur quelle base légale repose le traitement principal de votre application ?
  • Quelle est la différence entre anonymisation et pseudonymisation ? Pourquoi hacher l'IP ?
  • Comment avez-vous protégé vos routes ? Expliquez un guard de navigation.
📊

Barème de Notation — 100 Points

Grille d'évaluation BC02 · RNCP 38822
Axe d'évaluation Critères détaillés Points
Back-end Symfony API REST complète (CRUD + JWT) — 15 pts · Architecture propre (Services, Repository, DTOs) — 10 pts · Validation, gestion erreurs, codes HTTP — 5 pts · Commande anonymisation — 5 pts 35 pts
Front-end Vue.js SPA fonctionnelle (Vue Router + Pinia + Axios) — 12 pts · Composants réutilisables, code organisé — 8 pts · UX soignée (formulaires, feedback, responsive) — 6 pts · Guards de navigation — 4 pts 30 pts
RGPD Consentement implémenté (bandeau + BDD + granularité) — 8 pts · Droits utilisateurs (rectification + anonymisation) — 7 pts · Registre des traitements complet — 6 pts · Logs d'accès + politique de confidentialité — 4 pts 25 pts
Documentation & Soutenance README clair + installation fonctionnelle — 4 pts · Qualité et fluidité de la démo — 3 pts · Pertinence des réponses aux questions — 3 pts 10 pts
Livrables à remettre
  • Repo Git (1 seul dépôt, dossiers /backend et /frontend)
  • README technique complet avec instructions d'installation
  • Registre des traitements RGPD (PDF ou Markdown)
  • Collection Postman ou fichier .http
  • Soutenance orale : 15 min démo + 10 min Q&A
Versions techniques imposées
  • PHP 8.2+ · Symfony 6.4+ · MySQL 8+
  • Vue.js 3.x · Vite · Pinia · Node.js 20 LTS
  • LexikJWTAuthenticationBundle pour l'auth
  • Fichier .env.example fourni, jamais de .env commité
  • Git obligatoire — commits réguliers des deux membres