ProjetVM/README.md
2025-12-08 14:18:02 +01:00

233 lines
5.5 KiB
Markdown

# Application de Gestion de Notes
Application Flask pour la gestion des notes scolaires avec support multi-backend (SQLite et MariaDB).
## 🎯 Caractéristiques
-**Multi-backend** : SQLite ou MariaDB au choix
-**Architecture propre** : Pattern Strategy, ZÉRO if dans le code métier
-**Système de rôles** : Professeurs et Élèves avec permissions différenciées
-**Gestion des UE** : Organisation par Unités d'Enseignement
-**Coefficients** : Notes pondérées par coefficient
-**Recherche** : Recherche d'élèves et de matières
-**Moyennes automatiques** : Calcul des moyennes par UE
-**Sans ORM** : Requêtes SQL "à l'ancienne" avec abstraction propre
-**Extensible** : Ajouter PostgreSQL = créer 1 classe
## 🚀 Démarrage Rapide
Voir **[QUICKSTART.md](QUICKSTART.md)** pour démarrer en 3 commandes.
### SQLite (Développement Local)
```bash
./init_db.sh sqlite
export DB_TYPE=sqlite
python app.py
```
### MariaDB (Production)
```bash
docker-compose up -d mariadb && sleep 10
./init_db.sh mariadb
python app.py
```
**Accédez à l'application** : http://localhost:5000
## 👥 Comptes de Test
| Rôle | Login | Password | Accès |
|------|-------|----------|-------|
| Professeur | `prof1` | `prof123` | Gestion complète |
| Élève | `Djalim` | `caca` | Consultation notes |
| Élève | `eleve1` | `eleve123` | Consultation notes |
| Élève | `eleve2` | `eleve123` | Consultation notes |
## 📚 Documentation
- **[QUICKSTART.md](QUICKSTART.md)** - Démarrage rapide en 3 commandes
- **[GUIDE_UTILISATION.md](GUIDE_UTILISATION.md)** - Guide complet d'utilisation
- **[ARCHITECTURE.md](ARCHITECTURE.md)** - Architecture technique détaillée
- **[ARCHITECTURE_REFACTORING.md](ARCHITECTURE_REFACTORING.md)** - 🆕 Architecture propre sans if
- **[README_DATABASE.md](README_DATABASE.md)** - Documentation de la BDD
- **[CHANGELOG.md](CHANGELOG.md)** - Historique des changements
- **[EXEMPLES_SQL.md](EXEMPLES_SQL.md)** - Exemples de requêtes SQL
## 🎓 Fonctionnalités
### Pour les Professeurs
- Créer des comptes élèves
- Créer des UE (Unités d'Enseignement)
- Créer des matières avec coefficients
- Ajouter des notes pour les élèves
- Lister et rechercher élèves/matières
- Consulter les notes de chaque élève
### Pour les Élèves
- Consulter toutes leurs notes
- Voir la moyenne par UE (pondérée)
- Historique détaillé des notes
## 🏗️ Architecture
```
app.py # Application Flask
├── bdd/
│ ├── database.py # Abstraction SQLite/MariaDB
│ ├── User.py # Logique métier
│ └── GererBdd.py # Initialisation BDD
├── templates/ # Templates HTML
│ ├── notes_eleve.html
│ ├── prof_*.html
│ └── ...
└── static/ # CSS/JS
```
### Schéma de Base de Données
```
Users (prof/eleve) ──< Notes >── Matieres >── UE
```
- **Users** : Utilisateurs avec rôles (prof/eleve)
- **UE** : Unités d'Enseignement
- **Matieres** : Matières avec coefficients, liées aux UE
- **Notes** : Notes des élèves (0-20)
## 🔄 Changement de Backend
### Configuration
Modifiez `.env` :
```bash
DB_TYPE=sqlite # ou mariadb
```
### SQLite → MariaDB
```bash
export DB_TYPE=mariadb
./init_db.sh mariadb
python app.py
```
### MariaDB → SQLite
```bash
export DB_TYPE=sqlite
./init_db.sh sqlite
python app.py
```
## 🐳 Docker
### Lancer avec Docker Compose
```bash
docker-compose up -d
```
### Initialiser la base MariaDB
```bash
docker exec -it flask python -m bdd.GererBdd
```
### Accéder aux logs
```bash
docker-compose logs -f
```
## 🛠️ Installation Manuelle
### Prérequis
- Python 3.8+
- pip
### Installation des dépendances
```bash
pip install -r requirements.txt
```
### Variables d'environnement
```bash
export DB_TYPE=sqlite # ou mariadb
export DB_HOST=mariadb # pour MariaDB
export DB_USER=root
export DB_PASSWORD=caca
export DB_NAME=APPNOTE
export SQLITE_DB_PATH=cours.db # pour SQLite
```
## 📦 Technologies
- **Backend** : Flask, Flask-JWT-Extended
- **Base de données** : SQLite / MariaDB
- **Frontend** : HTML, CSS (templates Jinja2)
- **Conteneurisation** : Docker, Docker Compose
## 🔒 Sécurité
- ✅ Requêtes SQL paramétrées (protection injection SQL)
- ✅ JWT pour l'authentification
- ✅ Vérification des rôles sur chaque route
- ⚠️ Mots de passe en clair (à améliorer avec bcrypt)
## 📊 Exemple d'Utilisation
### Professeur crée une UE
```
1. Login avec prof1/prof123
2. Menu → "Créer une UE"
3. Code: UE4, Nom: "Langues"
4. Submit
```
### Professeur ajoute une note
```
1. Menu → "Ajouter une note"
2. Sélectionner élève: Djalim
3. Sélectionner matière: Python
4. Note: 18.5
5. Submit
```
### Élève consulte ses notes
```
1. Login avec Djalim/caca
2. Voir moyennes par UE en haut
3. Voir détail des notes en bas
```
## 🧪 Tests
### Tester avec SQLite
```bash
export DB_TYPE=sqlite
rm -f cours.db
./init_db.sh sqlite
python app.py
```
### Tester avec MariaDB
```bash
docker-compose up -d mariadb
sleep 10
export DB_TYPE=mariadb
./init_db.sh mariadb
python app.py
```
## 🤝 Contribution
L'application est modulaire et extensible :
- Ajouter un nouveau backend : Créer une classe `DatabaseBackend`
- Ajouter une fonctionnalité : Ajouter route + template + fonction métier
## 📝 Licence
Projet éducatif - Polytech
## 👨‍💻 Auteur
Projet de gestion de notes avec architecture multi-backend
---
**Pour commencer** : Consultez [QUICKSTART.md](QUICKSTART.md)