Files
jardin/backend/app/models/plant.py
2026-03-08 10:04:14 +01:00

60 lines
2.4 KiB
Python

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 Plant(SQLModel, table=True):
__tablename__ = "plant"
id: Optional[int] = Field(default=None, primary_key=True)
nom_commun: str
nom_botanique: Optional[str] = None
variete: Optional[str] = None
famille: Optional[str] = None
tags: Optional[str] = None # CSV
type_plante: Optional[str] = None # legume | fruit | aromatique | fleur
categorie: Optional[str] = None # potager|fleur|arbre|arbuste
besoin_eau: Optional[str] = None # faible | moyen | fort
besoin_soleil: Optional[str] = None
espacement_cm: Optional[int] = None
hauteur_cm: Optional[int] = None
temp_min_c: Optional[float] = None
duree_culture_j: Optional[int] = None
profondeur_semis_cm: Optional[float] = None
sol_conseille: Optional[str] = None
semis_interieur_mois: Optional[str] = None # ex: "2,3"
semis_exterieur_mois: Optional[str] = None
repiquage_mois: Optional[str] = None
plantation_mois: Optional[str] = None
recolte_mois: Optional[str] = None
maladies_courantes: Optional[str] = None
astuces_culture: Optional[str] = None
url_reference: Optional[str] = None
notes: Optional[str] = None
associations_favorables: Optional[List[str]] = Field(
default=None,
sa_column=Column("associations_favorables", SA_JSON, nullable=True),
)
associations_defavorables: Optional[List[str]] = Field(
default=None,
sa_column=Column("associations_defavorables", SA_JSON, nullable=True),
)
# Boutique / approvisionnement (par variété)
boutique_nom: Optional[str] = None # ex: "Gamm Vert", "Lidl", "Amazon"
boutique_url: Optional[str] = None # URL fiche produit
prix_achat: Optional[float] = None
date_achat: Optional[str] = None # ISO date
poids: Optional[str] = None # ex: "5g", "100g", "50 graines"
dluo: Optional[str] = None # date limite utilisation optimale
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
class PlantImage(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
plant_id: int = Field(foreign_key="plant.id", index=True)
filename: str
caption: Optional[str] = None
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))