Messagerie — détails techniques
Description et fonctionnalités de ce module : Messagerie.
Couverture de tests
6 scénario(s) e2e couvrent ce module — dossier apps/open-ent-e2e/src/modules/26_messagerie.
6 test(s) e2e dans 6 scénario(s) — voir le détail
Messagerie 01_acces_au_module.spec.ts
- accès au module
Messagerie 02_envoi_message.spec.ts
- envoi de message
Messagerie — conversation enseignant ↔ élève 03_conversation_prof_eleve.spec.ts
- échange en 3 messages sur un devoir non rendu
Messagerie — signaler un abus 04_signalement_abus.spec.ts
- signaler un message reçu comme abusif (modération ADML dans le dashboard)
Messagerie — horaires (lecture seule) 05_horaires_lecture_seule.spec.ts
- hors plage, l'élève voit le bandeau de fermeture et le bouton « Envoyer » est désactivé
Messagerie — envoi différé 06_envoi_differe.spec.ts
- programmer un envoi de message (composer → Programmer l'envoi → date/heure → dossier Programmés)
➡️ Statut dans le dashboard E2E · Résultats détaillés
Restrictions de communication (exclusion élève · coupure justice)
Deux mesures d'encadrement ciblées, administrées depuis le dashboard et appliquées côté serveur.
Exclusion temporaire d'un élève
- Stockage : collection Mongo
messaging.exclusions, un document par exclusion{ _id: "<structureId>:<userId>", userId, userName, structureId, blockedUntil (epoch ms), reason, createdBy, createdByName, createdAt }. - Backend conversation : util
StudentMessagingExclusions(cache rafraîchi,isExcluded(userId, now)) +StudentMessagingExclusionsController. L'envoi est refusé dansConversationController#send(403 conversation.error.messaging.excluded) et le workerScheduledMessageSenderretient les messages programmés d'un élève exclu. - Backend chat-nats : util miroir
StudentMessagingExclusions(même collection, lecture seule) ; blocage dansChatWebSocketHandler(trame{event:error, code:"messaging-excluded"}). - API (routes
AUTHENTICATED+ contrôle manuel) :GET|POST /conversation/messaging-exclusions/:structureId,DELETE /conversation/messaging-exclusions/:structureId/:userId,GET /conversation/messaging-exclusions(statut/bandeau).
Coupure de communication ciblée (justice)
- Graphe : relation Neo4j bidirectionnelle
(:User)-[:BLOCKED_COMMUNICATION {reason, createdBy, structureId, createdAt}]-(:User). - Backend communication (
DefaultCommunicationService) : la clauseAND NOT (n)-[:BLOCKED_COMMUNICATION]-(m)est ajoutée aux requêtes de visibilité (visibleUsersForShare,visibleUsers) etverify()renvoiecanCommunicate=falsepour une paire bloquée. Les deux personnes disparaissent mutuellement des destinataires (l'envoi est alors refusé parVisiblesFilter). - API (routes
AUTHENTICATED+ contrôle manuel) :GET|POST /communication/block/:structureId,DELETE /communication/block/:structureId/:userA/:userB.
Sécurité & délégation
Les contrôleurs autorisent SUPER_ADMIN, l'ADML de la structure, ou un personnel possédant
l'action workflow communication.restriction.manage (déléguée par le chef via les rôles
d'application). Côté dashboard, l'accès est ouvert par les sujets CASL messaging-exclusion /
communication-block (super-admin + ADML), et /api/me expose canManageCommunicationRestrictions
pour les personnels délégués.
Conformité
Évaluation au référentiel Open ENT NG (module conversation).
| Maillon de la chaîne qualité | Référence |
|---|---|
| 🎯 Fonctionnalités attendues | fiche fonctionnelle |
| 🧪 Tests réalisés | couverture e2e |
| ✅ Tests de conformité | tableau de conformité |