Bienvenue dans l'Alliance Rebelle, jeune Padawan !
Nous avons besoin de personnes motivées pour déjouer les plans de l'Empire.
Les espions du seigneur Vador sont partout...
Il nous faut donc un moyen de contrecarrer leurs actions.
🎯 Votre mission (si vous l'acceptez) : créer une interface permettant de rechercher dans la base de données impériale.
L’un de nos espions a donné sa vie pour que nous puissions y accéder via cette API : SWAPI
- Langages / frameworks obligatoires :
- Backend : Node.js + TypeScript
- Frontend : ReactJS + TypeScript
- Appels réseau avec : React Query
- Livrables attendus :
- Un repo GitHub contenant :
frontend/etbackend/clairement séparés- Un fichier
README.mdavec :- Instructions pour installer et lancer le projet
- Explication des choix techniques
- Améliorations possibles
- Bonus : déploiement en ligne (Vercel, Netlify, Render, Railway…)
- Un repo GitHub contenant :
Créer une API backend en Node.js avec TypeScript permettant d’interroger les données de la SWAPI.
- Implémenter un endpoint de recherche unique :
- Il interroge toutes les catégories de SWAPI (
people,starships,planets, etc.) - Le backend agrège et filtre les résultats
- L’API doit être conçue pour être extensible (architecture claire : services / routes / contrôleurs)
- Il interroge toutes les catégories de SWAPI (
- Utiliser
async/awaitet bien gérer les erreurs (try/catch) - Organisation modulaire et typée (
types/,interfaces/,services/, etc.) - Renvoyer des codes HTTP clairs (
200,400,500…)
- 🔐 Mise en place d’un système d’authentification (basique) :
- Identifiants fixes :
- username :
Luke - password :
DadSucks
- username :
- Création d’un middleware pour protéger l’endpoint de recherche
- Identifiants fixes :
- 🔄 Utilisation du framework Hapi.js
Créer une interface React avec TypeScript permettant d’interagir avec votre backend.
- Champ de recherche permettant d’interroger le backend
- Appels réseau gérés avec
react-query - Affichage en liste des résultats avec leurs noms
- Fiche détaillée sur clic d’un résultat, affichant les infos principales
- Structure React modulaire (composants, hooks, services API)
- État de chargement (
loading), vide (no results) et erreurs réseau - Utilisation de
useState,useEffect,useQueryde React Query
| Thème | Description |
|---|---|
| 🎨 Fiches détaillées | Affichage différent selon le type de donnée (personnage, vaisseau...) |
| 🧭 Router React | Navigation entre pages de fiche ou résultat de recherche (react-router-dom) |
| 🧪 Tests unitaires | 1 ou 2 tests simples (ex. fonction de parsing) avec Jest ou équivalent |
| 🧼 CSS modules ou Tailwind | Structuration propre des styles CSS |
| 📦 Redux ou gestion globale de l'état | Si justifié dans l'architecture |
| 🔁 Debounce sur le champ de recherche | Pour limiter les appels réseau |
| 🔍 Filtres par type de résultat | Séparer par type : personnages, vaisseaux, planètes... |
| 🔐 Authentification frontend | Ajout de token à l’appel d’API, redirection si non connecté |
| 📱 Responsive design | Design qui s’adapte au moins aux tailles classiques (mobile, tablette) |
| 🚀 Déploiement en ligne | Mettre le frontend sur Vercel / Netlify et backend sur Render / Railway… |
| 📋 React Hook Form | Gestion propre du champ de recherche via React Hook Form |
🚫 L'utilisation de swapi-node est interdite.
L'application est surveillée par l’Empire. Utilisez uniquement vos propres appels HTTP (fetch, axios, react-query, etc.).
Merci de nous transmettre :
- Le lien de votre dépôt GitHub
- Optionnel : un lien vers votre démo en ligne
