Code source de models.models

from pydantic import BaseModel, Field
from sqlalchemy import Column, Float, Integer, String

from modules.connect import Base


# ==========================================
# 1. MODÈLE SQLALCHEMY (La Table en BDD)
# ==========================================
[docs] class OperationDB(Base): """Définit la structure exacte de notre table 'operations' dans SQLite/PostgreSQL.""" # noqa: E501 __tablename__ = "operations" id = Column(Integer, primary_key=True, index=True) # Clé primaire unique type_op = Column(String, index=True) # ex: "addition", "soustraction" valeur1 = Column(Float) valeur2 = Column(Float) resultat = Column(Float)
# ========================================== # 2. MODÈLES PYDANTIC (Le Videur de l'API) # ==========================================
[docs] class OperationCreate(BaseModel): """Contrat de données pour ce que le client (Front) DOIT envoyer.Si le client envoie du texte à la place d'un float, Pydantic rejettera la requête.""" # noqa: E501 type_op: str = Field(..., description="Le type d'opération (ex: add, sub)") valeur1: float = Field(..., description="La première valeur numérique") valeur2: float = Field(..., description="La deuxième valeur numérique")
[docs] class OperationResponse(OperationCreate): """Contrat de données pour ce que l'API renvoie au client. Hérite de OperationCreate, mais ajoute l'ID généré par la BDD et le résultat. """ # noqa: D205 id: int resultat: float # Indispensable en Pydantic V2 : Permet de lire un objet SQLAlchemy (OperationDB) # et de le transformer en JSON automatiquement pour le Front. model_config = {"from_attributes": True}