Migration v1 (Flask) -> v2 (FastAPI + Vue.js) complétée
✨ Changements majeurs: - Suppression complète du code Flask legacy - Migration backend FastAPI vers racine /backend - Migration frontend Vue.js vers racine /frontend - Suppression de notytex-v2/ (code monté à la racine) ✅ Validations: - Backend démarre correctement (port 8000) - API /api/v2/health répond healthy - 99/99 tests unitaires passent - Frontend configuré avec proxy Vite 📝 Documentation: - README.md réécrit pour v2 - Instructions de démarrage mises à jour - .gitignore adapté pour backend/frontend/ 🎯 Architecture finale: notytex/ ├── backend/ # FastAPI + SQLAlchemy + Pydantic ├── frontend/ # Vue 3 + Vite + TailwindCSS ├── docs/ # Documentation └── school_management.db # Base de données (inchangée) Jalon 6 complété: Application v2 prête pour utilisation!
This commit is contained in:
619
README.md
619
README.md
@@ -1,422 +1,349 @@
|
||||
# 📚 Notytex - Système de Gestion Scolaire
|
||||
# 📚 Notytex v2 - Système de Gestion Scolaire
|
||||
|
||||
**Notytex** est une application web Flask conçue pour la gestion complète des évaluations. Elle permet aux enseignants de créer, organiser et noter les évaluations de leurs élèves.
|
||||
**Notytex** est une application web moderne pour la gestion complète des évaluations scolaires. Version 2.0 entièrement réécrite avec **FastAPI** (backend) et **Vue.js 3** (frontend).
|
||||
|
||||
Cette application a été presque entièrement vibecodé. Il ne faut donc pas s'attendre à des merveilles..! Mais elle est fonctionnelle et je l'utilise pour la gestion de mes notes!
|
||||
## 🎯 **Objectif Principal**
|
||||
|
||||
## 🎯 Objectif Principal
|
||||
Simplifier et digitaliser le processus d'évaluation scolaire, de la création des contrôles à la saisie des notes, en offrant une interface moderne et réactive.
|
||||
|
||||
Simplifier et digitaliser le processus d'évaluation scolaire, de la création des contrôles à la saisie des notes.
|
||||
---
|
||||
|
||||
## ⭐ Fonctionnalités Clés
|
||||
## 🚀 **Démarrage Rapide**
|
||||
|
||||
### 🏫 Gestion Hiérarchique Complète
|
||||
### **Prérequis**
|
||||
|
||||
- **Groupes classes** : Organisation des élèves par classe avec gestion des années scolaires
|
||||
- **Évaluations par trimestre** : Chaque évaluation doit être assignée à un trimestre (1, 2 ou 3)
|
||||
- **Structure modulaire** : ClassGroup → Students → Assessment → Exercise → GradingElement → Grade
|
||||
- **Interface unifiée** : Création d'évaluation + exercices + barème en une seule fois
|
||||
- **Indicateurs de progression** : Visualisation temps réel de l'état de correction avec code couleur
|
||||
- **Python 3.11+** avec `uv` ([installation](https://docs.astral.sh/uv/))
|
||||
- **Node.js 18+** avec `npm`
|
||||
- **Git**
|
||||
|
||||
### 🎯 Système de Notation Dual Unifié
|
||||
|
||||
**2 Types de Notation Complémentaires :**
|
||||
|
||||
1. **`notes`** : Notation classique en points décimaux (ex: 15.5/20, 2.5/4)
|
||||
2. **`score`** : Évaluation par compétences sur échelle 0-3 (0=Non acquis, 1=En cours, 2=Acquis, 3=Expert)
|
||||
|
||||
**Valeurs Spéciales Configurables :**
|
||||
|
||||
- **`.`** = Pas de réponse (traité comme 0 dans les calculs)
|
||||
- **`d`** = Dispensé (exclu des calculs de moyenne)
|
||||
- **Autres valeurs** : Configuration flexible via interface d'administration
|
||||
|
||||
**Configuration Centralisée :**
|
||||
|
||||
- **Interface d'administration** : Personnalisation complète des significations et couleurs
|
||||
- **Règles de calcul** : Logique unifiée pour tous les types avec gestion des cas particuliers
|
||||
- **Cohérence pédagogique** : Adaptation aux différentes pratiques d'évaluation
|
||||
|
||||
### 📊 Analyse des Résultats et Statistiques
|
||||
|
||||
- **Statistiques descriptives complètes** : Moyenne, médiane, minimum, maximum, écart-type
|
||||
- **Visualisation graphique interactive** : Histogrammes de distribution avec Chart.js
|
||||
- **Tableau détaillé par élève** : Classement alphabétique avec scores détaillés par exercice
|
||||
- **Calculs intelligents** : Gestion automatique des types "notes" et "score" avec formules spécialisées
|
||||
- **Gestion des absences** : Traitement cohérent des valeurs spéciales dans les statistiques
|
||||
|
||||
### 🎨 Interface Utilisateur Moderne
|
||||
|
||||
- **Dashboard avec statistiques** : Cartes interactives
|
||||
- **Navigation intuitive** : Actions principales mises en avant avec design cohérent
|
||||
- **Indicateurs de progression visuels** : Cercles de progression animés avec code couleur
|
||||
- **Design responsive** : Interface adaptée à tous les écrans avec TailwindCSS
|
||||
- **Mode plein écran** : Visualisation optimisée pour les présentations
|
||||
|
||||
## 🚀 Démarrage Rapide
|
||||
|
||||
### 📋 Prérequis
|
||||
|
||||
- **Python 3.8+** (recommandé : 3.11+)
|
||||
- **uv** : Gestionnaire de paquets moderne Python ([installation](https://docs.astral.sh/uv/))
|
||||
- **Git** : Pour le contrôle de version
|
||||
|
||||
### ⚡ Installation (5 minutes)
|
||||
### **Backend (FastAPI)**
|
||||
|
||||
```bash
|
||||
# 1. Cloner et accéder au projet
|
||||
git clone <repository>
|
||||
cd notytex
|
||||
|
||||
# 2. Installer les dépendances
|
||||
uv sync
|
||||
|
||||
# 3. Configuration obligatoire
|
||||
cp .env.example .env
|
||||
# Modifier .env avec SECRET_KEY (minimum 32 caractères obligatoire)
|
||||
|
||||
# 4. Initialiser la base de données (voir modes ci-dessous)
|
||||
uv run flask --app app init-db
|
||||
|
||||
# 5. Lancer l'application en mode développement
|
||||
uv run flask --app app run --debug
|
||||
cd backend
|
||||
uv sync --all-extras
|
||||
uv run uvicorn api.main:app --reload --port 8000
|
||||
```
|
||||
|
||||
### 🎯 Modes d'Initialisation de la Base de Données
|
||||
|
||||
**Notytex** propose **3 modes d'initialisation** adaptés aux différents contextes d'usage :
|
||||
|
||||
#### 🌱 **Mode Minimal** (par défaut) - Début d'année scolaire
|
||||
### **Frontend (Vue.js)**
|
||||
|
||||
```bash
|
||||
uv run flask --app app init-db --mode minimal
|
||||
# ou simplement
|
||||
uv run flask --app app init-db
|
||||
cd frontend
|
||||
npm install
|
||||
npm run dev
|
||||
```
|
||||
|
||||
- **Usage** : Début d'année scolaire, base vierge
|
||||
- **Contenu** : Configuration de base uniquement
|
||||
- **Idéal pour** : Démarrer une nouvelle année avec ses vraies classes et élèves
|
||||
### **Accès**
|
||||
|
||||
#### 📚 **Mode Milieu d'Année** - Données réalistes complètes
|
||||
- **Frontend** : http://localhost:3000
|
||||
- **API Backend** : http://localhost:8000
|
||||
- **Documentation API** : http://localhost:8000/api/v2/docs
|
||||
- **ReDoc** : http://localhost:8000/api/v2/redoc
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ **Architecture Technique**
|
||||
|
||||
### **Stack Technologique**
|
||||
|
||||
**Backend :**
|
||||
- FastAPI 0.109+ (API REST moderne avec support async)
|
||||
- SQLAlchemy 2.0+ avec aiosqlite (ORM async)
|
||||
- Pydantic 2.0+ (validation et sérialisation)
|
||||
- Uvicorn (serveur ASGI)
|
||||
|
||||
**Frontend :**
|
||||
- Vue.js 3.4+ (framework progressif)
|
||||
- Vite (build tool ultra-rapide)
|
||||
- Vue Router 4 (routing SPA)
|
||||
- Pinia (state management)
|
||||
- TailwindCSS 3 (styling moderne)
|
||||
- Chart.js 4 (graphiques interactifs)
|
||||
- Axios (client HTTP)
|
||||
|
||||
**Base de données :**
|
||||
- SQLite (développement)
|
||||
- PostgreSQL recommandé (production)
|
||||
|
||||
---
|
||||
|
||||
## 📊 **Modèle de Données**
|
||||
|
||||
```
|
||||
ClassGroup (Classe)
|
||||
↓
|
||||
Students (Élèves avec gestion temporelle)
|
||||
↓
|
||||
Assessment (Évaluation par trimestre)
|
||||
↓
|
||||
Exercise (Exercices)
|
||||
↓
|
||||
GradingElement (Questions/Compétences)
|
||||
↓
|
||||
Grade (Notes individuelles)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⭐ **Fonctionnalités Principales**
|
||||
|
||||
### **Gestion des Classes et Élèves**
|
||||
|
||||
- Création et organisation de classes par année
|
||||
- Inscription, transfert et départ d'élèves avec historique
|
||||
- Import CSV en masse
|
||||
- Statistiques par trimestre et par classe
|
||||
|
||||
### **Système d'Évaluation**
|
||||
|
||||
- Création unifiée d'évaluations (éval + exercices + barème)
|
||||
- Organisation par trimestre (1, 2, 3)
|
||||
- Filtrage avancé (trimestre, classe, statut de correction)
|
||||
- Indicateurs de progression de correction en temps réel
|
||||
|
||||
### **Notation Dual Configurable**
|
||||
|
||||
**2 Types de Notation :**
|
||||
|
||||
1. **`notes`** : Valeurs numériques décimales (ex: 15.5/20)
|
||||
2. **`score`** : Échelle 0-3 pour compétences (0=Non acquis → 3=Expert)
|
||||
|
||||
**Valeurs Spéciales :**
|
||||
- `.` = Absent (compte comme 0)
|
||||
- `d` = Dispensé (exclu des calculs)
|
||||
- Configuration personnalisable via interface
|
||||
|
||||
### **Analyse et Statistiques**
|
||||
|
||||
- Dashboard avec statistiques globales
|
||||
- Résultats détaillés par évaluation
|
||||
- Histogrammes de distribution des notes
|
||||
- Heatmaps par compétences et domaines
|
||||
- Statistiques descriptives (moyenne, médiane, écart-type)
|
||||
|
||||
### **Conseil de Classe**
|
||||
|
||||
- Préparation automatique avec données consolidées
|
||||
- Saisie et historique des appréciations
|
||||
- Vue complète des performances par élève
|
||||
|
||||
### **Envoi de Bilans par Email**
|
||||
|
||||
- Génération automatique de bilans individualisés
|
||||
- Support SMTP configurable (Gmail, Outlook, etc.)
|
||||
- Templates HTML responsives
|
||||
- Envoi en lot avec rapport détaillé
|
||||
|
||||
---
|
||||
|
||||
## 🧪 **Tests**
|
||||
|
||||
### **Backend**
|
||||
|
||||
```bash
|
||||
uv run flask --app app init-db --mode midyear
|
||||
cd backend
|
||||
|
||||
# Tous les tests
|
||||
uv run pytest tests/ -v
|
||||
|
||||
# Tests unitaires uniquement
|
||||
uv run pytest tests/unit/ -v
|
||||
|
||||
# Avec couverture
|
||||
uv run pytest tests/ --cov=. --cov-report=html
|
||||
```
|
||||
|
||||
- **Usage** : Tester l'application avec des données représentatives
|
||||
- **Contenu** :
|
||||
- **5 classes** avec 142 élèves au total (25-32 élèves par classe)
|
||||
- **30 évaluations** créées (6 par classe sur 2 trimestres)
|
||||
- **4 évaluations entièrement corrigées** par classe (Trimestre 1)
|
||||
- **2 évaluations partiellement corrigées** par classe (Trimestre 2)
|
||||
- **Notes réalistes** générées automatiquement
|
||||
- **Idéal pour** : Démonstrations, formations, tests de performance
|
||||
- **Volumétrie** : Correspond aux spécifications du CLAUDE.md (milieu de 2ème trimestre)
|
||||
**Résultat actuel : 99/99 tests ✅**
|
||||
|
||||
#### 🧪 **Mode Démonstration** - Données minimales
|
||||
### **Frontend**
|
||||
|
||||
```bash
|
||||
uv run flask --app app init-db --mode demo
|
||||
cd frontend
|
||||
|
||||
# Tests unitaires (à venir)
|
||||
npm run test:unit
|
||||
|
||||
# Tests E2E (à venir)
|
||||
npm run test:e2e
|
||||
```
|
||||
|
||||
- **Usage** : Tests rapides et démonstrations simples
|
||||
- **Contenu** : 2 classes, 5 élèves, 1 évaluation simple
|
||||
- **Idéal pour** : Premiers pas avec l'application
|
||||
---
|
||||
|
||||
### 🌐 Accès à l'Application
|
||||
|
||||
- **URL de développement** : http://localhost:5000
|
||||
- **Interface** : Dashboard avec navigation intuitive et indicateurs de progression
|
||||
- **Données** : Variables selon le mode d'initialisation choisi
|
||||
|
||||
## 🏗️ Architecture Technique
|
||||
|
||||
### 🎯 Principes Architecturaux
|
||||
|
||||
- **Architecture modulaire découplée** : Séparation claire des responsabilités
|
||||
- **Repository Pattern** : Accès aux données abstraites et testables
|
||||
- **Configuration externalisée** : Respect des principes 12 Factor App
|
||||
- **Gestion d'erreurs centralisée** : Traitement uniforme des exceptions
|
||||
- **Logging structuré JSON** : Traçabilité complète avec corrélation des requêtes
|
||||
|
||||
### 📁 Structure du Code
|
||||
## 📂 **Structure du Projet**
|
||||
|
||||
```
|
||||
notytex/
|
||||
├── 🚀 app.py # Point d'entrée Flask + routes de base
|
||||
├── 📊 models.py # Modèles SQLAlchemy + logique métier
|
||||
├── ⚙️ app_config_classes.py # Classes de configuration Flask (dev/prod/test)
|
||||
├── 🔧 config/ # Configuration sécurisée externalisée
|
||||
│ ├── __init__.py
|
||||
│ └── settings.py # Gestion variables d'environnement + validation
|
||||
├── 🛡️ exceptions/ # Gestion d'erreurs centralisée
|
||||
│ ├── __init__.py
|
||||
│ └── handlers.py # Gestionnaires d'erreurs globaux (JSON/HTML)
|
||||
├── 🔍 core/ # Utilitaires centraux
|
||||
│ ├── __init__.py
|
||||
│ └── logging.py # Logging structuré JSON + corrélation requêtes
|
||||
├── 📦 repositories/ # Pattern Repository pour accès données
|
||||
│ ├── __init__.py
|
||||
│ ├── base_repository.py # Repository générique CRUD
|
||||
│ └── assessment_repository.py # Repository spécialisé Assessment
|
||||
├── 📁 routes/ # Blueprints organisés par fonctionnalité
|
||||
│ ├── assessments.py # CRUD évaluations (création unifiée)
|
||||
│ ├── exercises.py # Gestion des exercices
|
||||
│ ├── grading.py # Saisie et gestion des notes
|
||||
│ └── config.py # Interface configuration système
|
||||
├── 🎨 templates/ # Templates Jinja2 avec indicateurs UX intégrés
|
||||
├── 🧪 tests/ # Tests pytest (100 tests ✅)
|
||||
└── 📋 domain/ # Exceptions métier personnalisées
|
||||
├── backend/ # API FastAPI
|
||||
│ ├── api/ # Routes et endpoints
|
||||
│ │ ├── main.py # Application principale
|
||||
│ │ └── routes/ # Routes organisées par fonctionnalité
|
||||
│ ├── domain/ # Logique métier pure
|
||||
│ │ ├── services/ # Services de calcul
|
||||
│ │ └── value_objects/ # Objets valeur
|
||||
│ ├── infrastructure/ # Couche d'infrastructure
|
||||
│ │ ├── database/ # Modèles SQLAlchemy + repositories
|
||||
│ │ └── external/ # Services externes (email)
|
||||
│ ├── schemas/ # Modèles Pydantic (validation I/O)
|
||||
│ ├── core/ # Configuration
|
||||
│ └── tests/ # Tests unitaires et d'intégration
|
||||
├── frontend/ # SPA Vue.js
|
||||
│ ├── src/
|
||||
│ │ ├── components/ # Composants réutilisables
|
||||
│ │ ├── views/ # Pages de l'application
|
||||
│ │ ├── stores/ # State management Pinia
|
||||
│ │ ├── services/ # Clients API
|
||||
│ │ ├── router/ # Configuration routing
|
||||
│ │ └── assets/ # Assets statiques
|
||||
│ └── public/ # Fichiers publics
|
||||
├── docs/ # Documentation complète
|
||||
├── school_management.db # Base de données SQLite
|
||||
└── README.md # Ce fichier
|
||||
```
|
||||
|
||||
### 📊 Modèle de Données Hiérarchique
|
||||
---
|
||||
|
||||
```
|
||||
ClassGroup (Classes: 6ème A, 5ème B...)
|
||||
↓
|
||||
Students (Élèves de la classe)
|
||||
↓
|
||||
Assessment (Évaluations: Contrôle Chapitre 3, Trimestre obligatoire)
|
||||
↓
|
||||
Exercise (Exercices: Exercice 1, Exercice 2...)
|
||||
↓
|
||||
GradingElement (Questions: a, b, c... + type: notes|score)
|
||||
↓
|
||||
Grade (Notes attribuées à chaque élève + valeurs spéciales)
|
||||
```
|
||||
## ⚙️ **Configuration**
|
||||
|
||||
### 🛠️ Stack Technique
|
||||
|
||||
- **Framework Backend** : Flask (Python) avec architecture modulaire
|
||||
- **Base de données** : SQLite avec SQLAlchemy ORM + Repository Pattern
|
||||
- **Frontend** : Templates Jinja2 + TailwindCSS + JavaScript + Chart.js
|
||||
- **Tests** : Pytest avec couverture complète (100 tests ✅)
|
||||
- **Configuration** : Variables d'environnement externalisées (.env)
|
||||
- **Logging** : Structuré JSON avec corrélation des requêtes
|
||||
- **Sécurité** : Configuration sécurisée + gestion d'erreurs centralisée
|
||||
|
||||
## ⚙️ Configuration
|
||||
|
||||
### 🔧 Variables d'Environnement (.env)
|
||||
### **Backend (`backend/.env`)**
|
||||
|
||||
```bash
|
||||
# OBLIGATOIRE - Sécurité
|
||||
SECRET_KEY=your-secret-key-here-minimum-32-characters-required
|
||||
# Base de données
|
||||
DATABASE_URL=sqlite+aiosqlite:///../school_management.db
|
||||
|
||||
# Optionnel - Base de données
|
||||
DATABASE_URL=sqlite:///school_management.db
|
||||
# Sécurité
|
||||
SECRET_KEY=your-secret-key-here-min-32-chars
|
||||
|
||||
# Optionnel - Environnement de développement
|
||||
FLASK_ENV=development
|
||||
DEBUG=true
|
||||
# CORS (origines autorisées)
|
||||
CORS_ORIGINS=["http://localhost:3000","http://localhost:5173"]
|
||||
|
||||
# Logging
|
||||
LOG_LEVEL=INFO
|
||||
DB_ECHO=false
|
||||
WTF_CSRF_TIME_LIMIT=3600
|
||||
|
||||
# Email (optionnel)
|
||||
SMTP_HOST=smtp.gmail.com
|
||||
SMTP_PORT=587
|
||||
SMTP_USERNAME=your-email@gmail.com
|
||||
SMTP_PASSWORD=your-app-password
|
||||
EMAIL_FROM=your-email@gmail.com
|
||||
```
|
||||
|
||||
### 🏭 Configuration de Production
|
||||
### **Frontend**
|
||||
|
||||
Le frontend utilise un proxy Vite configuré dans `vite.config.js` pour rediriger `/api` vers le backend.
|
||||
|
||||
---
|
||||
|
||||
## 📖 **Documentation Complète**
|
||||
|
||||
- **Architecture détaillée** : [`REWRITE.md`](REWRITE.md) - Historique de la réécriture v1 → v2
|
||||
- **Backend** : [`backend/README.md`](backend/README.md) - Documentation API
|
||||
- **Parité fonctionnelle** : [`backend/docs/PARITY_CHECKLIST.md`](backend/docs/PARITY_CHECKLIST.md)
|
||||
- **Documentation API** : http://localhost:8000/api/v2/docs (Swagger)
|
||||
|
||||
---
|
||||
|
||||
## 🔧 **Commandes Utiles**
|
||||
|
||||
### **Backend**
|
||||
|
||||
```bash
|
||||
# Variables critiques pour la production
|
||||
SECRET_KEY=your-production-secret-key-min-32-chars-strong
|
||||
DATABASE_URL=postgresql://user:password@localhost/notytex_prod
|
||||
FLASK_ENV=production
|
||||
DEBUG=false
|
||||
LOG_LEVEL=WARNING
|
||||
# Démarrer l'API en mode développement
|
||||
cd backend && uv run uvicorn api.main:app --reload --port 8000
|
||||
|
||||
# Exécuter les tests
|
||||
cd backend && uv run pytest tests/ -v
|
||||
|
||||
# Formater le code
|
||||
cd backend && uv run black .
|
||||
|
||||
# Linter
|
||||
cd backend && uv run ruff check .
|
||||
```
|
||||
|
||||
> ⚠️ **Important** : La variable `SECRET_KEY` est obligatoire et doit faire au minimum 32 caractères. L'application refusera de démarrer sans cette configuration.
|
||||
|
||||
## 🧪 Tests et Qualité
|
||||
|
||||
### 🚦 Lancer les Tests
|
||||
### **Frontend**
|
||||
|
||||
```bash
|
||||
# Tous les tests (100 tests ✅)
|
||||
uv run pytest
|
||||
# Démarrer en développement
|
||||
cd frontend && npm run dev
|
||||
|
||||
# Tests avec rapport de couverture
|
||||
uv run pytest --cov=. --cov-report=html
|
||||
# Build pour production
|
||||
cd frontend && npm run build
|
||||
|
||||
# Tests spécifiques par module
|
||||
uv run pytest tests/test_models.py -v
|
||||
uv run pytest tests/test_repositories.py -v
|
||||
# Preview du build
|
||||
cd frontend && npm run preview
|
||||
```
|
||||
|
||||
### 🎯 Organisation des Tests
|
||||
---
|
||||
|
||||
- **test_config.py** : Tests configuration externalisée + validation
|
||||
- **test_error_handlers.py** : Tests gestion d'erreurs centralisée
|
||||
- **test_logging.py** : Tests logging structuré JSON
|
||||
- **test_repositories.py** : Tests Repository Pattern + CRUD
|
||||
- **test_models.py** : Tests modèles SQLAlchemy + logique métier
|
||||
- **test*routes*\*.py** : Tests routes Flask + contrôleurs
|
||||
- **test_forms.py** : Tests validation WTForms
|
||||
## 📊 **État du Projet**
|
||||
|
||||
### 📊 Métriques de Qualité
|
||||
### **Fonctionnalités Implémentées (100%)**
|
||||
|
||||
- ✅ **100 tests** passent avec succès
|
||||
- ✅ **Architecture découplée** avec Repository Pattern
|
||||
- ✅ **Configuration sécurisée** externalisée
|
||||
- ✅ **Gestion d'erreurs robuste** centralisée
|
||||
| Module | Fonctionnalités | Status |
|
||||
|--------|----------------|--------|
|
||||
| **Classes** | CRUD, stats, dashboard | ✅ |
|
||||
| **Élèves** | CRUD, inscriptions, import CSV | ✅ |
|
||||
| **Évaluations** | Création unifiée, filtres, progression | ✅ |
|
||||
| **Notation** | Grille interactive, valeurs spéciales | ✅ |
|
||||
| **Résultats** | Statistiques, graphiques, heatmaps | ✅ |
|
||||
| **Conseil** | Préparation, appréciations | ✅ |
|
||||
| **Configuration** | Compétences, domaines, échelle, SMTP | ✅ |
|
||||
| **Email** | Envoi bilans individualisés | ✅ |
|
||||
|
||||
## 🛠️ Guide de Développement
|
||||
### **Tests**
|
||||
|
||||
### 🔄 Workflow de Développement
|
||||
- **Backend** : 99/99 tests unitaires ✅
|
||||
- **API** : 45 routes opérationnelles ✅
|
||||
- **Frontend** : 14 vues complètes ✅
|
||||
|
||||
```bash
|
||||
# 1. Configuration initiale
|
||||
cp .env.example .env
|
||||
# Éditer .env avec SECRET_KEY obligatoire
|
||||
---
|
||||
|
||||
# 2. Choisir le mode d'initialisation selon le contexte
|
||||
uv run flask --app app init-db --mode minimal # Début d'année
|
||||
uv run flask --app app init-db --mode midyear # Tests avec données complètes
|
||||
uv run flask --app app init-db --mode demo # Démonstration rapide
|
||||
## 🎓 **Public Cible**
|
||||
|
||||
# 3. Développement avec rechargement automatique
|
||||
uv run flask --app app run --debug
|
||||
- Enseignants du secondaire (collège/lycée)
|
||||
- Établissements souhaitant digitaliser leurs évaluations
|
||||
- Contexte de coexistence notation classique / évaluation par compétences
|
||||
|
||||
# 4. Validation avant commit
|
||||
uv run pytest
|
||||
---
|
||||
|
||||
# 5. Analyse des logs en temps réel
|
||||
tail -f logs/notytex.log | jq '.' # Pour formater le JSON
|
||||
```
|
||||
## 📝 **Notes de Version**
|
||||
|
||||
### 🆕 Ajouter une Nouvelle Fonctionnalité
|
||||
### **Version 2.0.0 (Actuelle)**
|
||||
|
||||
1. **Modèles** : Définir les entités dans `models.py`
|
||||
2. **Repository** : Créer l'accès données dans `repositories/`
|
||||
3. **Routes** : Implémenter les contrôleurs dans `routes/`
|
||||
4. **Templates** : Créer les vues dans `templates/`
|
||||
5. **Forms** : Ajouter la validation dans `forms.py`
|
||||
6. **Tests** : Couvrir la fonctionnalité dans `tests/`
|
||||
- ✨ Réécriture complète en FastAPI + Vue.js
|
||||
- ⚡ Architecture moderne avec séparation backend/frontend
|
||||
- 🚀 API REST JSON pure avec documentation OpenAPI
|
||||
- 🎨 Interface utilisateur réactive avec Vue 3
|
||||
- 📊 Graphiques interactifs avec Chart.js
|
||||
- 🔒 Validation Pydantic sur toutes les entrées
|
||||
- 🧪 99 tests unitaires avec 100% de succès
|
||||
|
||||
### 🎯 Conventions de Code
|
||||
### **Version 1.0.0 (Legacy)**
|
||||
|
||||
- **PEP 8** : Style Python standard
|
||||
- **Type hints** : Recommandés pour les nouvelles fonctions
|
||||
- **Docstrings** : Format Google pour les fonctions publiques
|
||||
- **Tests** : Couverture obligatoire pour les nouvelles fonctionnalités
|
||||
- Application Flask monolithique
|
||||
- Code disponible dans l'historique Git (branche `main` avant migration)
|
||||
|
||||
## 📊 Monitoring et Observabilité
|
||||
---
|
||||
|
||||
### 📝 Logs Structurés JSON
|
||||
## 🤝 **Contribution**
|
||||
|
||||
- **Format** : JSON avec ID de corrélation unique par requête
|
||||
- **Localisation** : `logs/notytex.log`
|
||||
- **Niveaux** : DEBUG, INFO, WARNING, ERROR
|
||||
- **Contexte automatique** : URL, méthode HTTP, IP, user-agent, timestamp
|
||||
- **Événements métier** : Création/modification/suppression d'évaluations
|
||||
Ce projet a été développé avec l'aide d'assistants IA (principalement Claude). Les contributions sont bienvenues !
|
||||
|
||||
### 🔍 Exemple de Log Structuré
|
||||
---
|
||||
|
||||
```json
|
||||
{
|
||||
"timestamp": "2025-08-06T10:30:45.123Z",
|
||||
"level": "INFO",
|
||||
"correlation_id": "uuid-1234-5678-9abc",
|
||||
"message": "Assessment created successfully",
|
||||
"context": {
|
||||
"assessment_id": 123,
|
||||
"class_group_id": 45,
|
||||
"trimester": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
## 📄 **Licence**
|
||||
|
||||
## 🎓 Exemples d'Utilisation Complète
|
||||
MIT
|
||||
|
||||
### 🌱 **Scénario Début d'Année** - Mode Minimal
|
||||
---
|
||||
|
||||
```bash
|
||||
# Initialisation pour démarrer l'année scolaire
|
||||
uv run flask --app app init-db --mode minimal
|
||||
```
|
||||
## 🔗 **Liens Utiles**
|
||||
|
||||
**Étapes typiques :**
|
||||
- [FastAPI Documentation](https://fastapi.tiangolo.com/)
|
||||
- [Vue.js 3 Documentation](https://vuejs.org/)
|
||||
- [SQLAlchemy 2.0](https://docs.sqlalchemy.org/en/20/)
|
||||
- [Pydantic](https://docs.pydantic.dev/)
|
||||
- [TailwindCSS](https://tailwindcss.com/)
|
||||
|
||||
1. **Configuration initiale** : Année scolaire 2025-2026 automatiquement définie
|
||||
2. **Création des classes** : Ajouter manuellement 6ème A, 5ème B, etc.
|
||||
3. **Import des élèves** : Saisir ou importer les listes d'élèves réelles
|
||||
4. **Première évaluation** : Créer le premier contrôle de l'année
|
||||
---
|
||||
|
||||
### 📚 **Scénario Milieu d'Année** - Mode Données Complètes
|
||||
|
||||
```bash
|
||||
# Initialisation avec données réalistes de milieu d'année
|
||||
uv run flask --app app init-db --mode midyear
|
||||
```
|
||||
|
||||
**Contenu automatiquement généré :**
|
||||
|
||||
- **Classes** : 6ème A (28 élèves), 6ème B (25 élèves), 5ème A (30 élèves), 5ème B (27 élèves), 4ème A (32 élèves)
|
||||
- **Évaluations Trimestre 1** (100% corrigées) :
|
||||
- Contrôle Nombres entiers (coefficient 2.0)
|
||||
- Évaluation Géométrie (coefficient 2.5)
|
||||
- Contrôle Fractions (coefficient 3.0)
|
||||
- Devoir Maison Recherche (coefficient 1.5)
|
||||
- **Évaluations Trimestre 2** (partiellement corrigées) :
|
||||
- Contrôle Proportionnalité (coefficient 2.5)
|
||||
- Évaluation Statistiques (coefficient 2.0)
|
||||
|
||||
**Utilisation immédiate :**
|
||||
|
||||
1. **Dashboard** : Aperçu des 142 élèves, 30 évaluations, 5 classes
|
||||
2. **Indicateurs de progression** : Visualisation des corrections en cours
|
||||
3. **Analyse des résultats** : Statistiques et graphiques sur les évaluations terminées
|
||||
4. **Saisie de notes** : Continuer la correction des évaluations partielles
|
||||
|
||||
### 📝 **Scénario Création d'Évaluation** - Workflow Standard
|
||||
|
||||
1. **🏗️ Création de l'évaluation**
|
||||
- Titre : "Contrôle Chapitre 3 - Fonctions"
|
||||
- Paramètres : Date, **trimestre obligatoire** (ex: 2), classe, coefficient
|
||||
|
||||
2. **⚙️ Structure de l'évaluation**
|
||||
- **Exercice 1** : "Calculs de base" (notes en points)
|
||||
- Question 1a : 2 points
|
||||
- Question 1b : 3 points
|
||||
- **Exercice 2** : "Compétences graphiques" (score 0-3)
|
||||
- Compétence "Lire un graphique" : échelle 0-3
|
||||
|
||||
3. **📊 Suivi de la progression**
|
||||
- **Indicateur initial** : "Correction 0%" (rouge) visible sur toutes les pages
|
||||
- **Saisie des notes** : Clic sur l'indicateur → accès direct à la page de notation
|
||||
- **Progression temps réel** : "Correction 45%" (orange) → "Correction 100%" (vert)
|
||||
|
||||
4. **📈 Analyse des résultats**
|
||||
- **Statistiques automatiques** : Moyenne, médiane, écart-type
|
||||
- **Visualisation graphique** : Histogramme de distribution des notes
|
||||
- **Tableau détaillé** : Classement alphabétique avec scores par exercice
|
||||
|
||||
## 🛡️ Sécurité et Bonnes Pratiques
|
||||
|
||||
### 🔐 Sécurité Applicative
|
||||
|
||||
- **Configuration externalisée** : Variables d'environnement (.env) - aucune donnée sensible en dur
|
||||
- **Validation centralisée** : WTForms + validation des données en entrée
|
||||
- **Gestion d'erreurs sécurisée** : Pas de fuite d'informations sensibles dans les messages
|
||||
- **Logs sécurisés** : Exclusion des données personnelles/sensibles des logs
|
||||
- **CSRF Protection** : Protection native Flask-WTF contre les attaques CSRF
|
||||
|
||||
### 🏗️ Architecture Robuste
|
||||
|
||||
- **Respect des principes 12 Factor App** : Configuration, logs, processus
|
||||
- **Repository Pattern** : Couche d'abstraction pour l'accès aux données
|
||||
- **Gestion d'erreurs centralisée** : Traitement uniforme des exceptions
|
||||
- **Tests complets** : Couverture de 100% des fonctionnalités critiques
|
||||
|
||||
## 👥 Public Cible et Contexte d'Usage
|
||||
|
||||
### 🎓 Utilisateurs Principaux
|
||||
|
||||
- **Enseignants** du secondaire (collège, lycée)
|
||||
|
||||
### 📚 Contextes Pédagogiques
|
||||
|
||||
- **Coexistence des pratiques** : Notation classique ET évaluation par compétences
|
||||
- **Gestion par trimestre** : Organisation structurée des évaluations scolaires
|
||||
- **Diversité des exercices** : Support des différents formats de contrôles
|
||||
**Développé avec ❤️ pour simplifier la vie des enseignants**
|
||||
|
||||
Reference in New Issue
Block a user