60"
:style="scrolled ? 'background-color:#252426;box-shadow:0 2px 20px rgba(0,0,0,0.4);padding-top:0.5rem;padding-bottom:0.5rem;' : 'background-color:#252426;padding-top:0.75rem;padding-bottom:0.75rem;'">
3
rôles utilisateurs
2
plateformes (iOS & Android)
Spring
Boot 3.2.3
Flutter
Cross-platform
Contexte & description
Projet réalisé en BTS SIO (BAC+2) — concevoir de A à Z une solution full-stack complète répondant à un besoin réel. EduCheck digitalise les feuilles de présence papier des établissements de formation : les formateurs déclenchent un appel en quelques secondes, les étudiants voient leur taux de présence calculé côté serveur, et les administrateurs pilotent classes et utilisateurs depuis un tableau de bord dédié. Premier projet combinant un backend Java Spring Boot et une application mobile Flutter.
3 rôles, 3 interfaces
Étudiant
- Consulter ses cours à venir
- Voir son taux de présence (%)
- Justifier une absence
Formateur
- Déclencher un appel
- Valider les présences
- Consulter l'historique des cours
Administrateur
- Gérer étudiants et formateurs
- Créer et administrer les classes
- Tableau de bord statistique
Fonctionnalités clés
Authentification sécurisée
Connexion avec Spring Security et mots de passe hashés via BCrypt. Navigation conditionnelle après login selon le rôle de l'utilisateur.
Émargement numérique
Prise de présence en temps réel. Clé primaire composite (étudiant × cours) pour garantir une entrée unique par étudiant et par cours.
Taux de présence calculé serveur
Le pourcentage de présence est calculé côté backend (anti-manipulation client) et retourné directement à l'étudiant.
Justification d'absences
L'étudiant peut soumettre une justification pour une absence. Le formateur accède à l'historique complet des cours.
Contrôle d'accès par rôle
La navigation Flutter est conditionnée par le rôle retourné à l'authentification. L'interface s'adapte dynamiquement au profil connecté.
Application cross-platform
Une seule base de code Flutter déployée sur iOS et Android. Communication avec l'API via le package HTTP natif.
API REST + HATEOAS
Endpoints conçus avec Spring Data REST respectant le style HATEOAS. Architecture MVC côté backend.
Gestion complète des utilisateurs
L'administrateur crée, modifie et supprime étudiants, formateurs et classes. Tableau de bord avec statistiques de présence.
Modèle de données
Utilisateur
nom · email · mot de passe (BCrypt) · @JsonIgnore
ETUDIANT FORMATEUR ADMINISTRATEUR
ETUDIANT FORMATEUR ADMINISTRATEUR
Cours
intitulé · date · créneau (matin / après-midi) · formateur associé
Lié à une classe d'étudiants
Lié à une classe d'étudiants
Émargement
Clé composite (userId + coursId)
statut · justification · horodatage
statut · justification · horodatage
Classe
nom · liste d'étudiants
Administrée par le rôle ADMINISTRATEUR
Administrée par le rôle ADMINISTRATEUR
Stack technique
Backend
Java 17Spring Boot 3.2.3Spring Data JPAHibernate
Sécurité
Spring SecurityBCryptREST + HATEOAS
Base de données
MySQL 8JPA EmbeddedId
Mobile
FlutterDartHTTP package
Défis & apprentissages
Clé primaire composite avec JPA EmbeddedId
Conception de la table d'émargement avec une clé composite
(userId, coursId) via @EmbeddedId JPA, garantissant qu'un étudiant ne peut être enregistré qu'une seule fois par cours.
API REST Spring Boot consommée par Flutter
Mise en place d'une communication HTTP fluide entre le backend Java et l'application Dart/Flutter, avec sérialisation/désérialisation JSON et gestion des erreurs réseau côté mobile.
Navigation conditionnelle selon le rôle
Après authentification, l'application Flutter redirige automatiquement l'utilisateur vers son interface dédiée (étudiant, formateur ou admin) en fonction du rôle retourné par l'API.
Calcul du taux de présence côté serveur
Implémentation de la logique de calcul du pourcentage de présence directement dans le service Spring Boot, afin d'éviter toute manipulation côté client et garantir l'intégrité des données.
Voir le code source
Code complet disponible sur GitHub.