PythonTaMère/
│
├── 📄 README.md # Documentation principale
├── 📄 QUICKSTART.md # Guide de démarrage rapide
├── 📄 TUTORIAL.md # Tutoriel détaillé
├── 📄 PROJECT_SUMMARY.md # Résumé du projet
├── 📄 STRUCTURE.md # Ce fichier
│
├── 📄 requirements.txt # Dépendances Python
├── 📄 .gitignore # Fichiers à ignorer par Git
│
├── 🐳 docker-compose.yml # Configuration Docker Compose
├── 🐳 Dockerfile.backend # Image Docker backend
│
├── 🚀 start.sh # Script de démarrage (Linux/Mac)
├── 🚀 start.bat # Script de démarrage (Windows)
│
├── 🔧 backend/ # API Backend (FastAPI)
│ ├── __init__.py
│ ├── 🎯 main.py # Point d'entrée de l'API
│ ├── 💾 database.py # Configuration SQLAlchemy
│ ├── 📊 models.py # Modèles de données (ORM)
│ ├── 📋 schemas.py # Schémas Pydantic (validation)
│ ├── 🔐 auth.py # Système d'authentification
│ ├── 🔧 init_db.py # Initialisation DB + données exemple
│ │
│ └── 🛣️ routes/ # Endpoints de l'API
│ ├── __init__.py
│ ├── auth_routes.py # Routes d'authentification
│ ├── lessons_routes.py # Routes des leçons
│ ├── exercises_routes.py # Routes des exercices
│ └── submissions_routes.py # Routes des soumissions
│
└── 🌐 frontend/ # Application Web
├── 📄 index.html # Page HTML principale
│
├── 🎨 css/
│ └── style.css # Styles CSS (responsive)
│
└── 💻 js/ # Scripts JavaScript
├── api.js # Client API REST
├── app.js # Application principale
├── editor.js # Monaco Editor (éditeur de code)
└── runner.js # Pyodide (exécution Python)
PythonTaMère/
├── 💾 pylearn.db # Base de données SQLite (auto-créée)
└── 🔧 .env # Variables d'environnement (optionnel)
| Fichier | Lignes | Description |
|---|---|---|
main.py |
~80 | API FastAPI, CORS, routes |
database.py |
~25 | Config SQLAlchemy, session DB |
models.py |
~150 | 7 modèles (User, Lesson, Exercise, etc.) |
schemas.py |
~180 | Schémas Pydantic pour validation |
auth.py |
~120 | JWT, magic tokens, permissions |
init_db.py |
~300 | Création tables + données exemple |
routes/*.py |
~500 | Endpoints API (CRUD complet) |
Total Backend: ~1355 lignes
| Fichier | Lignes | Description |
|---|---|---|
index.html |
~290 | Structure HTML, modals |
style.css |
~710 | Styles complets, responsive |
api.js |
~120 | Client API, authentification |
runner.js |
~140 | Pyodide, exécution Python + tests |
editor.js |
~60 | Monaco Editor wrapper |
app.js |
~600 | Logique app, navigation, UI |
Total Frontend: ~1920 lignes
| Fichier | Lignes | Description |
|---|---|---|
README.md |
~200 | Doc technique complète |
TUTORIAL.md |
~350 | Guide pas à pas |
QUICKSTART.md |
~200 | Démarrage rapide |
PROJECT_SUMMARY.md |
~250 | Vue d'ensemble projet |
STRUCTURE.md |
~150 | Arborescence (ce fichier) |
Total Documentation: ~1150 lignes
┌─────────────┐
│ users │
├─────────────┤
│ id │◄───┐
│ email │ │
│ is_admin │ │
│ created_at │ │
└─────────────┘ │
│
┌─────────────┼─────────────┐
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌─────────────┐
│ progress │ │submissions│ │magic_tokens │
├──────────┤ ├──────────┤ ├─────────────┤
│ user_id │ │ user_id │ │ email │
│ lesson_id│ │exercise_id│ │ token │
│ status │ │ code │ │ expires_at │
└──────────┘ │ passed │ │ used │
▲ └──────────┘ └─────────────┘
│ ▲
│ │
┌────┴────┐ ┌────┴────┐
│ lessons │ │exercises│
├─────────┤ ├─────────┤
│ id │◄──┤ id │
│ slug │ │lesson_id│◄───┐
│ title │ │ title │ │
│ body_md │ │prompt_md│ │
│ module │ │starter │ │
└─────────┘ └─────────┘ │
│
┌────┴────┐
│testcases│
├─────────┤
│ id │
│exercise_id
│ name │
│ code │
│visibility│
└─────────┘User → Email → Backend → Magic Token → User → Token → Backend → JWT
Frontend → GET /lessons → Backend → SQLite → JSON → Frontend → Render
Frontend → GET /exercises/:id → Backend → (Lesson + Exercise + Tests) → Frontend
↓
Monaco Editor (code)
↓
Pyodide (exécute Python en WASM)
↓
Tests locaux
↓
POST /submissions → Backend → Save → Update Progress
fastapi: Framework API RESTuvicorn: Serveur ASGIsqlalchemy: ORM base de donnéespydantic: Validation de donnéespython-jose: JWTslowapi: Rate limiting- Total: 13 packages
Monaco Editor: Éditeur de codePyodide: Python WebAssemblyMarked: Rendu MarkdownFont Awesome: Icônes- Tout chargé via CDN (pas de build)
- Backend:
python backend/main.py→ Port 8000 - Frontend:
python -m http.server 3000 --directory frontend→ Port 3000
- Windows:
start.bat - Linux/Mac:
./start.sh
docker-compose up| Catégorie | Valeur |
|---|---|
| Fichiers Python | 12 |
| Fichiers JS | 4 |
| Fichiers CSS | 1 |
| Fichiers HTML | 1 |
| Fichiers Config | 5 |
| Fichiers Doc | 5 |
| Total Fichiers | 28 |
| Lignes de Code | ~3300 |
| Lignes Doc | ~1150 |
| Modèles DB | 7 |
| Endpoints API | 20+ |
| Pages Frontend | 6 |
- Se connecter en tant qu'admin
- Aller sur "Admin"
- Créer Leçon → Créer Exercice → Créer Tests
Éditer frontend/css/style.css (CSS moderne, variables CSS)
- Créer route dans
backend/routes/ - Ajouter au router dans
backend/main.py - Ajouter méthode dans
frontend/js/api.js
- Configurer
.envavec vraies valeurs - Migrer vers PostgreSQL si besoin
- Utiliser
docker-compose.yml - Setup reverse proxy (nginx)
- Activer HTTPS (Let's Encrypt)
- Zéro Build: Pas de webpack, pas de npm, juste du JS vanilla
- Progressive: Pyodide se charge en arrière-plan
- Offline-ready: Base pour une PWA
- Scalable: Architecture modulaire facile à étendre
- Documenté: Chaque fichier a des commentaires
Structure créée le: 2025-10-04
Version: 1.0.0 (MVP)
License: MIT