feat(intrants): add AchatIntrant + Fabrication SQLModel

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-08 10:05:53 +01:00
parent 14636bd58f
commit faa469e688
2 changed files with 58 additions and 0 deletions

View File

@@ -10,3 +10,4 @@ from app.models.astuce import Astuce # noqa
from app.models.recolte import Recolte, Observation # noqa
from app.models.meteo import MeteoStation, MeteoOpenMeteo # noqa
from app.models.saint import SaintDuJour # noqa
from app.models.intrant import AchatIntrant, Fabrication # noqa

View File

@@ -0,0 +1,57 @@
# 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