# Swifty Companion — dépôt de rendu (42) Dossier destiné au **code évalué** en soutenance. Inspiré des README `mobileModuleXX/` de [piscine_mobile](../../piscine_mobile/README.md), version **allégée**. ## Contenu attendu | Élément | Détail | |---------|--------| | **Dossier de rendu** | `swiftyCompanion/` (ce répertoire) | | **Projet** | Application mobile (Flutter recommandé après la piscine) — nom suggéré : `swifty_companion` | | **Sujet** | [docs/sujets/swifty-companion.md](../docs/sujets/swifty-companion.md) | Le dépôt Git à la racine `swifty_companion/` peut aussi contenir `docs/` ; **seul ce qui est dans le repo** compte à la soutenance — garde ici tout le nécessaire pour `flutter run`. ## Création du projet (quand tu es prêt — étape 1) Depuis ce dossier : ```bash cd swiftyCompanion flutter create swifty_companion cd swifty_companion flutter run -d ``` Vérifier l’environnement : ```bash flutter doctor flutter devices ``` Doc détaillée machine : [piscine_mobile — Ubuntu natif](../../piscine_mobile/docs/pedagogie/flutter/09-ubuntu-natif-dev-android.md). ## Secrets — `.env` 1. Créer une application sur [profile.intra.42.fr/oauth/applications](https://profile.intra.42.fr/oauth/applications). 2. Copier [`.env.example`](../.env.example) vers `.env` **à la racine du repo** ou dans `swifty_companion/` (selon où tu charges les variables). 3. Ne **jamais** committer `.env` (déjà dans `.gitignore`). Variables typiques : `CLIENT_ID`, `CLIENT_SECRET`, `REDIRECT_URI` (adapter au package / schéma OAuth de ton app). ## Critères obligatoires (rappel) | # | À montrer en soutenance | |---|-------------------------| | 1 | ≥ 2 vues | | 2 | Erreurs gérées : login inconnu, réseau, etc. | | 3 | Vue 2 : infos du login si existant | | 4 | ≥ 4 champs (login, email, mobile, level, location, wallet, evaluations…) + **photo** | | 5 | **Skills** : niveau + pourcentage | | 6 | **Projets** terminés, **y compris failed** | | 7 | Retour vers la vue 1 | | 8 | Layout adaptatif (tailles / plateformes) | | 9 | **Un seul token OAuth** réutilisé — pas un token par requête API | OAuth : **Intra OAuth2** — voir doc API 42. ## Bonus (si obligatoire parfait) - Renouvellement automatique du token à expiration ; l’app reste utilisable. ## Récapitulatif correction (peer-eval) | # | Test | Démo rapide | |---|------|-------------| | 1 | `cd swifty_companion && flutter test` | Tests passent (si tu en ajoutes) | | 2 | `flutter run -d ` | Vue 1 : saisie login valide → vue 2 | | 3 | (même session) | Vue 2 : photo + ≥ 4 infos + skills + projets (dont failed) | | 4 | Login invalide | Message d’erreur clair, pas de crash | | 5 | Hors ligne / API coupée | Erreur réseau gérée | | 6 | Navigation | Retour vue 1, nouvelle recherche | | 7 | Petit écran / rotation (si possible) | UI lisible (layout flexible) | | 8 | Bonus uniquement si tout OK | Laisser expirer le token ou forcer refresh → app toujours OK | **Ordre de démo suggéré :** login valide (toi ou un pair) → parcours skills / projets → login faux → couper le réseau → retour recherche. ## Liens - Index projet : [README racine](../README.md) - Plan pas à pas : [docs/pedagogie/README.md](../docs/pedagogie/README.md)