# backend/app/models/intrant.py from datetime import datetime, timezone from typing import List, Optional from sqlalchemy import Column from sqlalchemy import JSON as SA_JSON from sqlmodel import Field, SQLModel class AchatIntrant(SQLModel, table=True): __tablename__ = "achat_intrant" id: Optional[int] = Field(default=None, primary_key=True) categorie: str # terreau | engrais | traitement | autre nom: str marque: Optional[str] = None boutique_nom: Optional[str] = None boutique_url: Optional[str] = None prix: Optional[float] = None poids: Optional[str] = None # "20L", "1kg", "500ml" date_achat: Optional[str] = None # ISO date dluo: Optional[str] = None # ISO date notes: Optional[str] = None jardin_id: Optional[int] = Field(default=None, foreign_key="garden.id") plantation_id: Optional[int] = Field(default=None, foreign_key="planting.id") tache_id: Optional[int] = Field(default=None, foreign_key="task.id") created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc)) class Ingredient(SQLModel): """Modèle pour un ingrédient de fabrication (non persisté seul).""" nom: str quantite: str # "1kg", "10L" class Fabrication(SQLModel, table=True): __tablename__ = "fabrication" id: Optional[int] = Field(default=None, primary_key=True) type: str # compost | decoction | purin | autre nom: str ingredients: Optional[List[dict]] = Field( default=None, sa_column=Column("ingredients", SA_JSON, nullable=True), ) date_debut: Optional[str] = None # ISO date date_fin_prevue: Optional[str] = None # ISO date statut: str = "en_cours" # en_cours | pret | utilise | echec quantite_produite: Optional[str] = None # "8L", "50kg" notes: Optional[str] = None jardin_id: Optional[int] = Field(default=None, foreign_key="garden.id") plantation_id: Optional[int] = Field(default=None, foreign_key="planting.id") tache_id: Optional[int] = Field(default=None, foreign_key="task.id") created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc)) class FabricationStatutUpdate(SQLModel): statut: str