# 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)