Quand une classe n'avait aucune affectation enseignant-matière, les selects de la modale de création de créneau affichaient tous les enseignants et toutes les matières au lieu d'une liste vide. Cela permettait de soumettre des combinaisons invalides, produisant un message d'erreur avec des UUID incompréhensibles. Les dropdowns n'affichent plus que les enseignants/matières effectivement affectés à la classe sélectionnée. Le message d'erreur backend est reformulé sans UUID pour le cas où la validation frontend serait contournée.
57 lines
2.9 KiB
Markdown
57 lines
2.9 KiB
Markdown
# Story 4.6: Recherche autocomplete pour lier un parent à un élève
|
|
|
|
Status: ready-for-dev
|
|
|
|
## Story
|
|
|
|
As an administrateur,
|
|
I want to search for a parent by name or email when linking them to a student,
|
|
so that I don't need to know or copy-paste a UUID.
|
|
|
|
## Acceptance Criteria
|
|
|
|
1. **AC1 - Champ de recherche autocomplete** : Le champ "ID du parent" dans la modale "Ajouter un parent/tuteur" est remplacé par un champ de recherche avec autocomplete. L'admin tape au moins 2 caractères et voit une liste de suggestions de parents correspondants (nom, prénom, email).
|
|
|
|
2. **AC2 - Résultats de recherche** : Les suggestions affichent le prénom, nom et email de chaque parent trouvé. Seuls les utilisateurs ayant le rôle `ROLE_PARENT` du même tenant sont proposés.
|
|
|
|
3. **AC3 - Sélection** : L'admin clique sur une suggestion pour la sélectionner. Le parent sélectionné est affiché clairement dans le champ (nom + email). L'admin peut le désélectionner pour chercher à nouveau.
|
|
|
|
4. **AC4 - Debounce** : Les requêtes de recherche sont debounced (300ms minimum) pour éviter de surcharger l'API.
|
|
|
|
5. **AC5 - Feedback** : Un indicateur de chargement s'affiche pendant la recherche. Un message "Aucun parent trouvé" s'affiche si la recherche ne retourne aucun résultat.
|
|
|
|
## Tasks / Subtasks
|
|
|
|
- [ ] Task 1 - Backend : endpoint de recherche parents (AC: 1, 2)
|
|
- [ ] Créer un endpoint GET `/api/parents/search?q={query}` qui retourne les utilisateurs ROLE_PARENT du tenant courant, filtrés par nom/prénom/email
|
|
- [ ] Limiter les résultats à 10 suggestions maximum
|
|
- [ ] Protéger l'endpoint avec les autorisations admin
|
|
|
|
- [ ] Task 2 - Frontend : composant autocomplete (AC: 1, 3, 4, 5)
|
|
- [ ] Remplacer le champ UUID dans `GuardianList.svelte` par un composant de recherche autocomplete
|
|
- [ ] Implémenter le debounce (300ms) sur la saisie
|
|
- [ ] Afficher les résultats dans un dropdown avec prénom, nom, email
|
|
- [ ] Permettre la sélection/désélection d'un parent
|
|
- [ ] Afficher le loading et l'état vide
|
|
|
|
- [ ] Task 3 - Tests E2E (AC: 1-5)
|
|
- [ ] Tester la recherche autocomplete sur la fiche élève
|
|
- [ ] Tester la liaison parent-élève via le nouveau flux
|
|
|
|
## Dev Notes
|
|
|
|
### Composants existants à modifier
|
|
|
|
- `frontend/src/lib/components/organisms/GuardianList/GuardianList.svelte` : remplacer le champ `<input type="text" placeholder="UUID du compte parent">` par un composant autocomplete
|
|
- Backend : ajouter un provider/endpoint pour la recherche de parents
|
|
|
|
### Contexte
|
|
|
|
Actuellement, pour lier un parent à un élève depuis la fiche élève (`/admin/students/{id}`), l'admin doit saisir manuellement l'UUID du compte parent. C'est inutilisable en pratique car personne ne connait les UUID par coeur.
|
|
|
|
### Contraintes
|
|
|
|
- La recherche doit être scoped au tenant courant
|
|
- Seuls les utilisateurs avec `ROLE_PARENT` doivent être retournés
|
|
- Ne pas proposer les parents déjà liés à cet élève
|