Files
swift_companion/swiftyCompanion/README.md
2026-09-30 08:24:20 +02:00

88 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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/`, …) |