avant codex

This commit is contained in:
2026-02-22 15:05:40 +01:00
parent fed449c784
commit 20af00d653
291 changed files with 51868 additions and 424 deletions

View File

@@ -0,0 +1,10 @@
from typing import Optional
from sqlmodel import Field, SQLModel
class Dicton(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
mois: int # 1-12
jour: Optional[int] = None
texte: str
region: Optional[str] = None # Auvergne|Haute-Loire|National

View File

@@ -1,4 +1,4 @@
from datetime import datetime
from datetime import datetime, timezone
from typing import Optional
from sqlmodel import Field, SQLModel
@@ -16,10 +16,12 @@ class Garden(SQLModel, table=True):
ombre: Optional[str] = None # ombre | mi-ombre | plein_soleil
sol_type: Optional[str] = None
sol_ph: Optional[float] = None
surface_m2: Optional[float] = None
ensoleillement: Optional[str] = None
grille_largeur: int = 6
grille_hauteur: int = 4
created_at: datetime = Field(default_factory=datetime.utcnow)
updated_at: datetime = Field(default_factory=datetime.utcnow)
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
updated_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
class GardenCell(SQLModel, table=True):
@@ -39,7 +41,7 @@ class GardenImage(SQLModel, table=True):
garden_id: int = Field(foreign_key="garden.id", index=True)
filename: str
caption: Optional[str] = None
created_at: datetime = Field(default_factory=datetime.utcnow)
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
class Measurement(SQLModel, table=True):
@@ -50,4 +52,4 @@ class Measurement(SQLModel, table=True):
humidite_air: Optional[float] = None
humidite_sol: Optional[float] = None
source: str = "manuel" # manuel | capteur
ts: datetime = Field(default_factory=datetime.utcnow)
ts: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))

View File

@@ -1,9 +1,11 @@
from datetime import datetime
from datetime import datetime, timezone
from typing import Optional
from sqlmodel import Field, SQLModel
class PlantVariety(SQLModel, table=True):
class Plant(SQLModel, table=True):
__tablename__ = "plant"
id: Optional[int] = Field(default=None, primary_key=True)
nom_commun: str
nom_botanique: Optional[str] = None
@@ -11,9 +13,11 @@ class PlantVariety(SQLModel, table=True):
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
@@ -23,13 +27,16 @@ class PlantVariety(SQLModel, table=True):
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
created_at: datetime = Field(default_factory=datetime.utcnow)
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)
variety_id: int = Field(foreign_key="plantvariety.id", index=True)
plant_id: int = Field(foreign_key="plant.id", index=True)
filename: str
caption: Optional[str] = None
created_at: datetime = Field(default_factory=datetime.utcnow)
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))

View File

@@ -1,12 +1,28 @@
from datetime import date, datetime
from datetime import date, datetime, timezone
from typing import Optional
from sqlmodel import Field, SQLModel
class PlantingCreate(SQLModel):
garden_id: int
variety_id: int
cell_id: Optional[int] = None
date_semis: Optional[date] = None
date_plantation: Optional[date] = None
date_repiquage: Optional[date] = None
quantite: int = 1
statut: str = "prevu"
date_recolte_debut: Optional[date] = None
date_recolte_fin: Optional[date] = None
rendement_estime: Optional[float] = None
rendement_reel: Optional[float] = None
notes: Optional[str] = None
class Planting(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
garden_id: int = Field(foreign_key="garden.id", index=True)
variety_id: int = Field(foreign_key="plantvariety.id", index=True)
variety_id: int = Field(foreign_key="plant.id", index=True)
cell_id: Optional[int] = Field(default=None, foreign_key="gardencell.id")
date_semis: Optional[date] = None
date_plantation: Optional[date] = None
@@ -18,8 +34,8 @@ class Planting(SQLModel, table=True):
rendement_estime: Optional[float] = None
rendement_reel: Optional[float] = None
notes: Optional[str] = None
created_at: datetime = Field(default_factory=datetime.utcnow)
updated_at: datetime = Field(default_factory=datetime.utcnow)
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
updated_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
class PlantingEvent(SQLModel, table=True):
@@ -27,4 +43,4 @@ class PlantingEvent(SQLModel, table=True):
planting_id: int = Field(foreign_key="planting.id", index=True)
type: str # arrosage | taille | traitement | observation | autre
note: Optional[str] = None
ts: datetime = Field(default_factory=datetime.utcnow)
ts: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))

View File

@@ -0,0 +1,42 @@
from datetime import date, datetime, timezone
from typing import Optional
from sqlmodel import Field, SQLModel
class RecolteCreate(SQLModel):
quantite: float
unite: str = "kg" # kg|g|unites|litres|bottes
date_recolte: date
notes: Optional[str] = None
class Recolte(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
plantation_id: int = Field(foreign_key="planting.id", index=True)
quantite: float
unite: str = "kg"
date_recolte: date
notes: Optional[str] = None
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
class ObservationCreate(SQLModel):
type: str # maladie|ravageur|traitement|note
titre: str
description: Optional[str] = None
date: date
photo_url: Optional[str] = None
plantation_id: Optional[int] = None
garden_id: Optional[int] = None
class Observation(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
type: str
titre: str
description: Optional[str] = None
date: date
photo_url: Optional[str] = None
plantation_id: Optional[int] = Field(default=None, foreign_key="planting.id")
garden_id: Optional[int] = Field(default=None, foreign_key="garden.id")
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))

View File

@@ -1,17 +1,34 @@
from datetime import date, datetime
from datetime import date, datetime, timezone
from typing import Optional
from sqlmodel import Field, SQLModel
class TaskCreate(SQLModel):
titre: str
description: Optional[str] = None
garden_id: Optional[int] = None
planting_id: Optional[int] = None
outil_id: Optional[int] = None
priorite: str = "normale" # basse | normale | haute
echeance: Optional[date] = None
recurrence: Optional[str] = None
frequence_jours: Optional[int] = None
date_prochaine: Optional[date] = None
statut: str = "a_faire" # a_faire | en_cours | fait | annule
class Task(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
titre: str
description: Optional[str] = None
garden_id: Optional[int] = Field(default=None, foreign_key="garden.id")
planting_id: Optional[int] = Field(default=None, foreign_key="planting.id")
priorite: str = "normale" # basse | normale | haute
outil_id: Optional[int] = Field(default=None, foreign_key="tool.id")
priorite: str = "normale"
echeance: Optional[date] = None
recurrence: Optional[str] = None # quotidien | hebdomadaire | mensuel
statut: str = "a_faire" # a_faire | en_cours | fait | annule
created_at: datetime = Field(default_factory=datetime.utcnow)
updated_at: datetime = Field(default_factory=datetime.utcnow)
recurrence: Optional[str] = None
frequence_jours: Optional[int] = None
date_prochaine: Optional[date] = None
statut: str = "a_faire"
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
updated_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))

View File

@@ -0,0 +1,12 @@
from datetime import datetime, timezone
from typing import Optional
from sqlmodel import Field, SQLModel
class Tool(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
nom: str
description: Optional[str] = None
categorie: Optional[str] = None # beche|fourche|griffe|arrosage|taille|autre
photo_url: Optional[str] = None
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))