# Swifty Companion Application mobile — profil étudiant 42 via l’**API Intra** (OAuth2). > **Dépôt de rendu école** : ce dossier est la **racine** du dépôt Git Vogosphere. Pas de `docs/` ni de sujet traduit ici (dépôt perso séparé). **État :** partie obligatoire + **bonus refresh token** (401 → refresh → retry API). ## Lancer le projet ```bash cd swifty_companion # Créer .env ici (voir .env.example à la racine du dépôt école) flutter pub get flutter run -d ``` Le fichier **`.env`** doit être dans **`swifty_companion/.env`** (déclaré comme asset dans `pubspec.yaml`). Vérifications : ```bash flutter doctor flutter devices flutter analyze flutter test ``` ## Configuration (`.env`) 1. App OAuth : [profile.intra.42.fr/oauth/applications](https://profile.intra.42.fr/oauth/applications) 2. Scopes : **`public`** + **`projects`** (projets sur le profil) 3. Redirect URI (ex. téléphone) : `com.example.swiftycompanion://callback` — identique sur l’Intra et dans `.env` 4. Ne **jamais** committer `.env` API : [api.intra.42.fr/apidoc](https://api.intra.42.fr/apidoc) ## Parcours app 1. **Se connecter avec 42** (token réutilisé pour toutes les requêtes) 2. **Rechercher** un login 3. **Profil** : photo, champs, skills (niveau + %), projets validés et failed 4. **Retour** → nouvelle recherche ## Partie obligatoire (rappel sujet v4) | # | Exigence | |---|----------| | 1 | Au moins **2 vues** | | 2 | **Toutes** les erreurs gérées (login inconnu, réseau, …) | | 3 | Vue 2 : infos du login s’il **existe** | | 4 | **≥ 4 détails** + **photo de profil** | | 5 | **Skills** : niveau + pourcentage | | 6 | **Projets** réalisés, **y compris les failed** | | 7 | Retour possible vers la **vue 1** | | 8 | Layout **adaptatif** | | 9 | **OAuth2** — **un token** réutilisé | Certaines données peuvent être masquées par l’API (confidentialité). ## Bonus - Refresh token : `IntraAuthService.refreshAccessToken()` + retry dans `intraApiGet` sur 401. ## Soutenance — checklist peer-eval | # | Test | Démo | |---|------|------| | 1 | `flutter test` | Tests OK | | 2 | `flutter run -d ` | Vue 1 → login valide → vue 2 | | 3 | Profil | Photo + ≥ 4 champs + skills + projets (dont failed) | | 4 | Login invalide | Message clair, pas de crash | | 5 | Réseau coupé | Erreur réseau gérée | | 6 | Navigation | Retour vue 1, nouvelle recherche | | 7 | Petit écran / rotation | UI lisible | | 8 | Bonus | Refresh token si implémenté | **Ordre suggéré :** connexion → profil → login faux → hors ligne → retour → `flutter test`. ## Fichiers de ce dépôt | Fichier | Rôle | |---------|------| | `README.md` | Ce document | | `.gitignore` | Exclut `.env`, build, etc. | | `.env.example` | Modèle sans secrets | | `swifty_companion/` | Projet Flutter (`lib/`, `android/`, …) |