Files
swift_companion/docs/pedagogie/etape-03-vue-recherche.md
2026-09-30 08:24:20 +02:00

3.1 KiB
Raw Permalink Blame History

É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)

  1. L’utilisateur est déjà connecté à l’API (étape 2) — ou bouton « Se connecter » si token absent.
  2. Champ texte + bouton Rechercher (login 42, ex. jdoe).
  3. Appel API avec Authorization: Bearer <token>.
  4. Succès → navigation vers vue 2 (profil).
  5. É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/
│   ├── 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.