3.2 KiB
3.2 KiB
Étape 3 — Vue 1 : recherche par login
Prérequis : étape 2 OK — OAuth actif, token unique (
IntraAuthService).
Objectif sujet
| Exigence | Cette étape |
|---|---|
| Au moins 2 vues | Vue 1 : recherche · Vue 2 : profil (étape 4) |
| Erreurs gérées | Login introuvable, réseau, non connecté |
| Token unique | Réutiliser IntraAuthService.instance (ne pas refaire OAuth) |
Parcours utilisateur (vue 1)
- L’utilisateur est déjà connecté à l’API (étape 2) — ou bouton « Se connecter » si token absent.
- Champ texte + bouton Rechercher (login 42, ex.
jdoe). - Appel API avec
Authorization: Bearer <token>. - Succès → navigation vers vue 2 (profil).
- Échec → message clair, pas de crash.
API 42 utile
Doc : api.intra.42.fr/apidoc
| Action | Requête typique |
|---|---|
| Utilisateur par login | GET /v2/users/{login} ou GET /v2/users?filter[login]=<login> |
| Toi (déjà fait) | GET /v2/me |
Vérifier dans l’apidoc la forme exacte supportée ; beaucoup de projets utilisent :
GET https://api.intra.42.fr/v2/users?filter[login]=jdoe
Authorization: Bearer <access_token>
Réponse : tableau JSON ; vide = login inconnu.
Fichiers à ajouter (étape 3)
lib/
├── services/
│ ├── intra_auth_service.dart # existant
│ └── intra_user_service.dart # GET user(s) avec token
├── screens/
│ ├── auth_screen.dart # option : fusionner ou garder login au démarrage
│ ├── search_screen.dart # VUE 1
│ └── profile_screen.dart # VUE 2 (squelette → étape 4)
└── main.dart # home → SearchScreen si token OK
IntraUserService (idée)
- Méthode
Future<Map<String, dynamic>> fetchUserByLogin(String login). - Utilise
IntraAuthService.instance.authHeaders(). - 404 / liste vide → exception métier
UserNotFoundException. - Socket / timeout →
NetworkException. - 401 → token expiré → message « reconnecte-toi ».
Gestion des erreurs (sujet)
| Situation | Message utilisateur (exemple) |
|---|---|
| Login inconnu | Aucun utilisateur pour ce login |
| Pas de réseau | Connexion impossible. Vérifie le réseau. |
| Non connecté OAuth | Connecte-toi d’abord à l’API 42 |
| Champ vide | Saisis un login |
Navigation
SearchScreen --[login trouvé]--> ProfileScreen(login)
ProfileScreen --[retour]--> SearchScreen
Navigator.push / pop ou go_router — rester simple (Navigator 1.0 suffit).
Critères « étape 3 terminée »
| # | Test |
|---|---|
| 1 | Login valide (ex. fgras-ca) → ouvre vue 2 |
| 2 | Login zzzzzzzz → message erreur |
| 3 | Mode avion → message réseau |
| 4 | Retour depuis vue 2 → nouvelle recherche possible |
| 5 | Un seul OAuth ; les recherches réutilisent le même token |
Ensuite — étape 4
→ etape-04-vue-profil.md : photo, ≥ 4 champs, skills, projets (dont failed), layout adaptatif.