Backend de l'application StudySynergy, plateforme d'apprentissage assistée par IA pour le TechSprint Hackathon 2025.
- FastAPI : Framework web Python moderne et rapide
- Firebase Firestore : Base de données NoSQL
- Cloudinary : Stockage de fichiers (images, PDFs, audio, etc.)
- Google gemini-2.5-flash : Moteur d'IA pour l'analyse de documents et la génération de contenu
- JWT : Authentification sécurisée
- Python 3.9+
- Compte Firebase avec projet configuré
- Compte Cloudinary
- Clé API Google Gemini
git clone https://github.com/Darrylwin/StudySynergy.git
cd studysynergypython -m venv venv
source venv/bin/activate # Sur Windows: venv\Scripts\activatepip install -r requirements.txt- Aller sur Firebase Console
- Créer un projet (ou utiliser un existant)
- Activer Firestore Database
- Aller dans Paramètres du projet > Comptes de service
- Cliquer sur Générer une nouvelle clé privée
- Télécharger le fichier JSON et le renommer
firebase_credentials.json - Le placer à la racine du projet
- Créer un compte sur Cloudinary
- Récupérer vos credentials dans le Dashboard:
- Cloud Name
- API Key
- API Secret
- Aller sur Google AI Studio
- Créer une clé API
- La copier pour l'étape suivante
Créer un fichier .env à la racine :
# Firebase
FIREBASE_CREDENTIALS_PATH=./firebase_credentials.json
# Cloudinary
CLOUDINARY_CLOUD_NAME=votre_cloud_name
CLOUDINARY_API_KEY=votre_api_key
CLOUDINARY_API_SECRET=votre_api_secret
# Taille max des fichiers
MAX_FILE_SIZE_MB=50
# Google Gemini
GEMINI_API_KEY=votre_cle_api_ici
# JWT
JWT_SECRET_KEY=votre_cle_secrete_super_longue_et_aleatoire_ici_changez_moi
JWT_ALGORITHM=HS256
JWT_ACCESS_TOKEN_EXPIRE_MINUTES=1440
# Serveur
HOST=0.0.0.0
PORT=8000
DEBUG=TrueRemplacer :
votre_cloud_name,votre_api_key,votre_api_secretpar vos credentials Cloudinaryvotre_cle_api_icipar votre clé API GeminiJWT_SECRET_KEYpar une clé secrète aléatoire forte
python run.pyOu avec uvicorn directement :
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000L'API sera accessible sur : http://localhost:8000
Documentation interactive : http://localhost:8000/docs
POST /api/auth/register- InscriptionPOST /api/auth/login- ConnexionGET /api/auth/me- Infos utilisateurPOST /api/auth/change-password- Changer le mot de passe
Tous les autres endpoints nécessitent un header:
Authorization: Bearer <JWT_TOKEN>
POST /api/session/create- Créer une nouvelle session avec fichiersPOST /api/session/{id}/add-file- Ajouter un fichier à une sessionGET /api/session/list- Liste des sessions de l'utilisateurGET /api/session/{id}- Détails d'une sessionDELETE /api/session/{id}- Supprimer une sessionPOST /api/session/{id}/chat- Discuter avec l'IA sur le cours
POST /api/session/{id}/generate-tool- Générer un quiz, flashcards ou notesGET /api/session/{id}/artifacts- Récupérer tous les artefacts générés
app/
├── main.py # Point d'entrée FastAPI
├── config.py # Configuration (Firebase, Cloudinary, Gemini)
├── models.py # Modèles Pydantic
├── auth.py # Middleware d'authentification
├── routes/
│ ├── auth.py # Routes d'authentification
│ ├── session.py # Routes des sessions
│ └── tools.py # Routes des outils pédagogiques
├── services/
│ ├── auth_service.py # Service JWT et bcrypt
│ ├── firebase_service.py # Service Firestore
│ ├── cloudinary_service.py # Service Cloudinary
│ └── gemini_service.py # Service Gemini
└── utils/
└── helpers.py # Fonctions utilitaires
Pour tester l'API, utiliser l'interface Swagger automatique : http://localhost:8000/docs
Ou avec curl :
# Health check
curl http://localhost:8000/health
# Inscription
curl -X POST http://localhost:8000/api/auth/register \
-H "Content-Type: application/json" \
-d '{
"email": "test@example.com",
"password": "password123",
"name": "Test User"
}'
# Connexion
curl -X POST http://localhost:8000/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "test@example.com",
"password": "password123"
}'- Ne jamais commit
firebase_credentials.jsonou.env - Utiliser des clés JWT fortes et uniques
- En production, restreindre
allow_originsdansmain.py
- Les fichiers sont organisés dans des dossiers par session
- Structure:
studysynergy/sessions/{session_id}/ - Suppression automatique des fichiers lors de la suppression d'une session
- Cloudinary : Plan gratuit avec 25 crédits/mois
- Gemini API : Quota gratuit limité
- Firebase Firestore : Quota gratuit généreux
- Vérifier que le token JWT est valide
- Vérifier que
JWT_SECRET_KEYest correct dans.env
- Vérifier les credentials dans
.env - Vérifier les quotas sur le Dashboard Cloudinary
- Vérifier la clé API dans
.env - Vérifier les quotas sur Google AI Studio
- Vérifier que
firebase_credentials.jsonest correct - Vérifier que Firestore est activé dans Firebase Console
Assurez-vous de définir toutes les variables d'environnement :
FIREBASE_CREDENTIALS_PATHouFIREBASE_CREDENTIALS_BASE64CLOUDINARY_CLOUD_NAME,CLOUDINARY_API_KEY,CLOUDINARY_API_SECRETGEMINI_API_KEYJWT_SECRET_KEYDEBUG=False
Dans app/main.py, remplacer :
allow_origins=["*"]par :
allow_origins=["https://votre-frontend.com"]- ✅ Migration du stockage local vers Cloudinary
- ✅ Suppression automatique des fichiers lors de la suppression de session
- ✅ Support de tous les types de fichiers (images, PDFs, audio, vidéos)
- ✅ URLs publiques directes pour les fichiers
- Authentification JWT
- Base de données Firestore
- Génération de titre et résumé automatique
- Chat avec l'IA
- Génération d'outils pédagogiques
Projet pour le TechSprint Hackathon 2025