88 lines
2.8 KiB
Markdown
88 lines
2.8 KiB
Markdown
# 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 <device>
|
||
```
|
||
|
||
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 <device>` | 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/`, …) |
|