â Disclaimer : this README.md is in French, use translater if needeed
Il y a des balises html dans ce fichier, s'il y a un problĂšme d'affichage, essayez de l'ouvrir ailleurs (e.g. depuis GitHub).
| Backend | Frontend | Full Stack |
|---|---|---|
Docker |
||
Ce projet, réalisé dans le cadre de la matiÚre Fullstack Data, est un réseau social dédié aux jeux vidéo (GameHub).
Le backend est développé avec Flask en Python, utilisant une base de données PostgreSQL (via SQLAlchemy) pour gérer les utilisateurs, les fils de discussion (threads) et les commentaires. Une particularité de ce projet est l'intégration de l'API externe RAWG.io, permettant aux utilisateurs de rechercher des jeux réels et de créer des discussions liées à des fiches de jeux existantes.
Le frontend est construit avec React en JavaScript, assurant une interface fluide et réactive. La sécurité est gérée via des JWT (JSON Web Tokens).
Dans un premier temps, vous devez installer
<a href="https://www.docker.com/products/docker-desktop/" target="_blank">{=html}Docker
Desktop</a>{=html} pour faire fonctionner le projet.
Faites une installation classique.
Ce projet utilise l'API RAWG pour rĂ©cupĂ©rer les donnĂ©es des jeux vidĂ©o. La clĂ© API ne doit pas ĂȘtre commise dans le code.
- Récupérez votre clé API (fournie avec le rendu sous format d'un fichier .env ou gratuite sur RAWG.io).
- Ă la racine du projet doit se trouver un fichier
.env. - Ce fichier doit contenir la valeur de la clé API sous ce format :
env RAWG_API_KEY=votre_vraie_clé_ici
Tout d'abord, veuillez lancer l'application Docker Desktop.
Rejoignez le dossier du projet dans un terminal (PowerShell recommandé) :
$ cd chemin/vers/le/projet- Nettoyage (Recommandé pour une installation propre)
Si vous avez déjà lancé le projet auparavant, supprimez le volume de données pour repartir de zéro :
Remove-Item -Recurse -Force data- Lancement des conteneurs
Construisez et démarrez les services :
docker compose up --build -dPatientez que les services (backend, db, ui) soient tous démarrés.
- Remplissage de la base de données (Seed)
La base de données est vide au démarrage. Pour créer des utilisateurs, importer des jeux via l'API et générer de l'activité, lancez ce script :
docker compose exec backend python seed_db.pyUne fois le script terminé, ouvrez votre navigateur à l'adresse :
<a href="http://localhost:3000" target="_blank">{=html}http://localhost:3000``{=html}
â Note : La base de donnĂ©es est vide au lancement si le script de remplissage n'a pas Ă©tĂ© exĂ©cutĂ©. Vous devrez crĂ©er un premier compte utilisateur.
Le réseau social GameHub permet de :
- S'inscrire / Se connecter : Gestion complĂšte de l'authentification.
- Rechercher des jeux : Utilisez la barre de recherche ou la page de création pour trouver un jeu via l'API RAWG.
- Créer des Threads : Lancez une discussion sur un jeu spécifique. Si le sujet existe déjà , vous rejoignez la conversation.
- Interagir : Commentez les posts et "Likez" les sujets intéressants.
- Profil : Modifiez votre avatar (upload d'image), votre bio, ou supprimez votre compte (Zone de danger).
- Connexion / Inscription : Interface simple pour accéder à la plateforme.
- Accueil : Flux d'actualité des derniers sujets créés.
- Créer un sujet : Recherche en temps réel d'un jeu via RAWG, sélection, et rédaction du premier message.
- Page du sujet : Détails du jeu (provenant de RAWG : note Metacritic, date de sortie, genres) à gauche, et fil de discussion à droite.
- Profil : Gestion des informations personnelles et visualisation de ses propres contributions.
L'application suit une architecture Full Stack séparée :
- Backend : API RESTful exposée sur le port 5000.
- Frontend : SPA (Single Page Application) React sur le port 3000.
- Database : Conteneur PostgreSQL sur le port 5432.
Le backend est structuré de maniÚre modulaire dans le dossier src/ :
app.py: Point d'entrée de l'application, initialisation des routes.models.py: Définition des modÚles SQLAlchemy (User,Thread,Post) et tables d'association (thread_likes).auth.py: Gestion de l'inscription et du login (hachage des mots de passe avecwerkzeug, génération de tokenflask_jwt_extended).games.py: Logique de communication avec l'API tierce RAWG.routes/: (Logique répartie dans les fichiers racinesusers.py,threads.py,posts.pypour ce projet).
Nous utilisons Flask-Migrate (Alembic) pour gérer les évolutions du schéma de base de données.
Le frontend est généré avec Create React App.
src/pages/: Contient les vues principales (HomePage,ThreadPage,ProfilePage, etc.).src/services/api.js: Configuration d'Axios avec un intercepteur pour injecter automatiquement le token JWT dans les headers.src/App.css: Styles globaux (thÚme sombre par défaut).
Les tests sont configurés pour utiliser une base de données SQLite en mémoire afin de ne pas toucher à vos données. Cependant, en cas de mauvaise configuration ou d'exécution locale incorrecte, il peut arriver que l'application bascule sur cette base vide ou réinitialise la base principale.
Si votre application semble vide aprÚs avoir lancé les tests :
Cela signifie que la base de données a été réinitialisée ou que l'application pointe temporairement vers SQLite. Pour corriger cela, assurez-vous de relancer le conteneur backend : docker compose restart backend. Relancez impérativement le script de remplissage pour retrouver vos données :
docker compose exec backend python seed_db.py# Lancer les tests
pytest -v# Lancer les tests via docker
docker compose exec backend pytestPistes d'amélioration :
- Sécurité : Passer en HTTPS et stocker les tokens dans des cookies
HttpOnlyplutÎt que lelocalStoragepour lutter contre failles XSS. - Fonctionnalités : Ajouter un systÚme de "Follow" entre utilisateurs (la base est là avec les profils).
- Performance : Mettre en cache les requĂȘtes vers RAWG pour limiter les appels API externes.
Nous avons opté pour un réseau social de gaming car il permettait de combiner plusieurs défis techniques intéressants :
- La gestion d'une base de données relationnelle (Utilisateurs / Posts / Commentaires).
- L'intégration d'une API Externe (RAWG) pour enrichir le contenu sans avoir à remplir manuellement la base de données de jeux.
- La gestion de l'upload de fichiers (Avatars utilisateurs).
- Gestion des images : Nous avons mis en place un systÚme d'upload d'avatars stockés localement dans le dossier
uploads/et servis statiquement par Flask (send_from_directory), ce qui a demandé une configuration spécifique des volumes Docker. - Relations SQL : La mise en place de la table d'association pour les "Likes" (
thread_likes) et la gestion des cascades (supprimer un user supprime ses posts) a nécessité une attention particuliÚre avec SQLAlchemy. - React & Asynchronicité : Gérer les états de chargement lors des appels à l'API RAWG (barre de recherche avec debounce) a été un bon exercice de gestion d'état frontend.
Nous avons choisi d'intégrer l'IA générative comme un véritable assistant de productivité au quotidien, plutÎt que comme un simple générateur de code.
-
Un accélérateur sur l'UI : C'est sur le Frontend que le gain de temps a été le plus flagrant. En lui confiant l'écriture du code répétitif (la structure des composants React, les bases du CSS), nous avons pu consacrer notre énergie à ce qui compte vraiment : l'expérience utilisateur et la logique.
-
Un binÎme pour le Debug : Face à un bug tenace, l'IA nous a servi de 'second regard'. Elle a été précieuse pour analyser rapidement des logs complexes ou nous suggérer des syntaxes plus élégantes (comme les list comprehensions en Python).
-
L'humain garde le contrÎle : L'IA n'a pas la science infuse. Nous avons systématiquement relu et testé son code, écartant ses hallucinations pour ne garder que ce qui respectait strictement notre architecture Flask/PostgreSQL
Merci du temps que vous avez consacré à cette lecture.


