✨ 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!
75 lines
1.6 KiB
Python
75 lines
1.6 KiB
Python
"""
|
|
Schemas Pydantic pour Grade.
|
|
"""
|
|
|
|
from datetime import datetime
|
|
from typing import Optional, List
|
|
|
|
from pydantic import Field
|
|
|
|
from schemas.common import BaseSchema
|
|
|
|
|
|
class GradeBase(BaseSchema):
|
|
"""Schema de base pour Grade."""
|
|
|
|
value: Optional[str] = None
|
|
comment: Optional[str] = None
|
|
|
|
|
|
class GradeRead(GradeBase):
|
|
"""Schema pour la lecture d'une note."""
|
|
|
|
id: int
|
|
student_id: int
|
|
grading_element_id: int
|
|
|
|
|
|
class GradeWithDetails(GradeRead):
|
|
"""Schema avec détails de l'élève et de l'élément."""
|
|
|
|
student_name: str = ""
|
|
element_label: str = ""
|
|
element_max_points: float = 0
|
|
element_grading_type: str = "notes"
|
|
|
|
|
|
class GradeCreate(BaseSchema):
|
|
"""Schema pour créer/modifier une note."""
|
|
|
|
student_id: int
|
|
grading_element_id: int
|
|
value: Optional[str] = None
|
|
comment: Optional[str] = None
|
|
|
|
|
|
class BulkGradeCreate(BaseSchema):
|
|
"""Schema pour créer plusieurs notes en une fois."""
|
|
|
|
grades: List[GradeCreate]
|
|
|
|
|
|
class GradingGrid(BaseSchema):
|
|
"""Grille de notation pour une évaluation."""
|
|
|
|
assessment_id: int
|
|
students: List[dict] # Liste des étudiants avec leurs infos
|
|
grading_elements: List[dict] # Liste des éléments de notation
|
|
grades: dict # Dict {student_id: {element_id: value}}
|
|
|
|
|
|
class BulkGradeResponse(BaseSchema):
|
|
"""Schema de réponse pour la sauvegarde en lot de notes."""
|
|
|
|
saved_count: int
|
|
updated_count: int
|
|
created_count: int
|
|
message: str = ""
|
|
|
|
|
|
class GradeUpdate(BaseSchema):
|
|
"""Schema pour mettre à jour une note individuelle."""
|
|
|
|
value: Optional[str] = None
|
|
comment: Optional[str] = None
|