257 lines
16 KiB
Python
257 lines
16 KiB
Python
from datetime import date
|
|
from sqlmodel import Session, select
|
|
from app.database import engine
|
|
import app.models # noqa
|
|
|
|
|
|
def run_seed():
|
|
from app.models.garden import Garden, GardenCell, Measurement
|
|
from app.models.plant import Plant, PlantVariety
|
|
from app.models.planting import Planting, PlantingEvent
|
|
from app.models.task import Task
|
|
from app.models.tool import Tool
|
|
from app.models.dicton import Dicton
|
|
from app.models.astuce import Astuce
|
|
|
|
with Session(engine) as session:
|
|
already_seeded = session.exec(select(Garden)).first() is not None
|
|
|
|
if not already_seeded:
|
|
# ── Jardin ────────────────────────────────────────────────────────────
|
|
jardin = Garden(
|
|
nom="Mon potager",
|
|
description="Potager principal plein sud",
|
|
type="plein_air",
|
|
exposition="S",
|
|
ombre="plein_soleil",
|
|
sol_type="limoneux",
|
|
surface_m2=24.0,
|
|
grille_largeur=6,
|
|
grille_hauteur=4,
|
|
)
|
|
session.add(jardin)
|
|
session.flush()
|
|
|
|
for row in range(4):
|
|
for col in range(6):
|
|
session.add(
|
|
GardenCell(
|
|
garden_id=jardin.id,
|
|
col=col,
|
|
row=row,
|
|
libelle=f"{chr(65 + row)}{col + 1}",
|
|
)
|
|
)
|
|
|
|
session.add(Measurement(garden_id=jardin.id, temp_air=18.0, humidite_air=65.0))
|
|
|
|
# ── 20 Plantes ────────────────────────────────────────────────────────
|
|
plantes_data = [
|
|
dict(nom_commun="Tomate", variete="Andine Cornue", famille="Solanacées",
|
|
categorie="potager", type_plante="legume", besoin_eau="fort",
|
|
espacement_cm=60, plantation_mois="4,5", recolte_mois="7,8,9",
|
|
semis_interieur_mois="2,3"),
|
|
dict(nom_commun="Courgette", variete="Verte", famille="Cucurbitacées",
|
|
categorie="potager", type_plante="legume", besoin_eau="moyen",
|
|
espacement_cm=80, plantation_mois="5,6", recolte_mois="7,8",
|
|
semis_interieur_mois="4"),
|
|
dict(nom_commun="Carotte", famille="Apiacées",
|
|
categorie="potager", type_plante="legume", besoin_eau="moyen",
|
|
espacement_cm=8, semis_exterieur_mois="3,4,5,6",
|
|
recolte_mois="6,7,8,9,10"),
|
|
dict(nom_commun="Laitue", variete="Batavia", famille="Astéracées",
|
|
categorie="potager", type_plante="legume", besoin_eau="moyen",
|
|
espacement_cm=25, plantation_mois="3,4,5,8,9",
|
|
recolte_mois="5,6,7,10"),
|
|
dict(nom_commun="Ail", famille="Amaryllidacées",
|
|
categorie="potager", type_plante="legume", besoin_eau="faible",
|
|
espacement_cm=15, plantation_mois="10,11",
|
|
recolte_mois="6,7"),
|
|
dict(nom_commun="Oignon", famille="Amaryllidacées",
|
|
categorie="potager", type_plante="legume", besoin_eau="faible",
|
|
espacement_cm=10, semis_interieur_mois="2,3",
|
|
plantation_mois="4,5", recolte_mois="7,8"),
|
|
dict(nom_commun="Haricot", variete="Nain", famille="Fabacées",
|
|
categorie="potager", type_plante="legume", besoin_eau="moyen",
|
|
espacement_cm=15, semis_exterieur_mois="5,6",
|
|
recolte_mois="7,8,9"),
|
|
dict(nom_commun="Pois", variete="Mange-tout", famille="Fabacées",
|
|
categorie="potager", type_plante="legume", besoin_eau="moyen",
|
|
espacement_cm=10, semis_exterieur_mois="3,4",
|
|
recolte_mois="6,7"),
|
|
dict(nom_commun="Poireau", famille="Amaryllidacées",
|
|
categorie="potager", type_plante="legume", besoin_eau="moyen",
|
|
espacement_cm=15, semis_interieur_mois="2,3",
|
|
plantation_mois="6,7", recolte_mois="10,11,12,1,2"),
|
|
dict(nom_commun="Pomme de terre", famille="Solanacées",
|
|
categorie="potager", type_plante="legume", besoin_eau="moyen",
|
|
espacement_cm=35, plantation_mois="3,4,5",
|
|
recolte_mois="7,8,9,10"),
|
|
dict(nom_commun="Fraise", famille="Rosacées",
|
|
categorie="potager", type_plante="fruit", besoin_eau="moyen",
|
|
espacement_cm=30, plantation_mois="3,4,9,10",
|
|
recolte_mois="5,6,7"),
|
|
dict(nom_commun="Framboise", famille="Rosacées",
|
|
categorie="arbuste", type_plante="fruit", besoin_eau="moyen",
|
|
espacement_cm=60, plantation_mois="11,12,2,3",
|
|
recolte_mois="7,8,9"),
|
|
dict(nom_commun="Persil", famille="Apiacées",
|
|
categorie="potager", type_plante="aromatique", besoin_eau="moyen",
|
|
espacement_cm=20, semis_exterieur_mois="3,4,5,8",
|
|
recolte_mois="4,5,6,7,8,9,10"),
|
|
dict(nom_commun="Échalote", famille="Amaryllidacées",
|
|
categorie="potager", type_plante="legume", besoin_eau="faible",
|
|
espacement_cm=15, plantation_mois="2,3",
|
|
recolte_mois="7,8"),
|
|
dict(nom_commun="Chou-fleur", famille="Brassicacées",
|
|
categorie="potager", type_plante="legume", besoin_eau="fort",
|
|
espacement_cm=60, semis_interieur_mois="3,4",
|
|
plantation_mois="5,6", recolte_mois="9,10,11"),
|
|
dict(nom_commun="Chou", variete="Milan", famille="Brassicacées",
|
|
categorie="potager", type_plante="legume", besoin_eau="moyen",
|
|
espacement_cm=50, semis_interieur_mois="3,4",
|
|
plantation_mois="5,6", recolte_mois="10,11,12"),
|
|
dict(nom_commun="Betterave", famille="Amaranthacées",
|
|
categorie="potager", type_plante="legume", besoin_eau="moyen",
|
|
espacement_cm=15, semis_exterieur_mois="4,5,6",
|
|
recolte_mois="8,9,10"),
|
|
dict(nom_commun="Radis", famille="Brassicacées",
|
|
categorie="potager", type_plante="legume", besoin_eau="moyen",
|
|
espacement_cm=5, semis_exterieur_mois="3,4,5,8,9",
|
|
recolte_mois="4,5,6,9,10"),
|
|
dict(nom_commun="Épinard", famille="Amaranthacées",
|
|
categorie="potager", type_plante="legume", besoin_eau="moyen",
|
|
espacement_cm=15, semis_exterieur_mois="3,4,8,9",
|
|
recolte_mois="5,6,10,11"),
|
|
dict(nom_commun="Basilic", famille="Lamiacées",
|
|
categorie="potager", type_plante="aromatique", besoin_eau="moyen",
|
|
espacement_cm=20, semis_interieur_mois="3,4",
|
|
plantation_mois="5,6", recolte_mois="6,7,8,9"),
|
|
]
|
|
|
|
plantes = []
|
|
for data in plantes_data:
|
|
variete = data.pop('variete', None)
|
|
p = Plant(**data)
|
|
session.add(p)
|
|
plantes.append(p)
|
|
session.flush()
|
|
|
|
# Créer les variétés pour les plantes qui en avaient une
|
|
plantes_varietes = [
|
|
("Andine Cornue", 0), # Tomate
|
|
("Verte", 1), # Courgette
|
|
("Batavia", 3), # Laitue
|
|
("Nain", 6), # Haricot
|
|
("Mange-tout", 7), # Pois
|
|
("Milan", 15), # Chou
|
|
]
|
|
for variete_nom, idx in plantes_varietes:
|
|
session.add(PlantVariety(plant_id=plantes[idx].id, variete=variete_nom))
|
|
|
|
tomate = plantes[0]
|
|
courgette = plantes[1]
|
|
|
|
# ── Plantings ──────────────────────────────────────────────────────────
|
|
p1 = Planting(
|
|
garden_id=jardin.id,
|
|
variety_id=tomate.id,
|
|
date_plantation=date(2026, 5, 1),
|
|
quantite=6,
|
|
statut="en_cours",
|
|
)
|
|
p2 = Planting(
|
|
garden_id=jardin.id,
|
|
variety_id=courgette.id,
|
|
date_plantation=date(2026, 5, 15),
|
|
quantite=3,
|
|
statut="prevu",
|
|
)
|
|
session.add_all([p1, p2])
|
|
session.flush()
|
|
session.add(PlantingEvent(planting_id=p1.id, type="arrosage", note="Arrosage du matin"))
|
|
|
|
# ── Tâches ────────────────────────────────────────────────────────────
|
|
session.add(Task(titre="Arroser les tomates", priorite="haute",
|
|
statut="a_faire", garden_id=jardin.id))
|
|
session.add(Task(titre="Traiter contre les pucerons", priorite="normale", statut="a_faire"))
|
|
session.add(Task(titre="Préparer le compost", priorite="basse", statut="en_cours"))
|
|
|
|
# ── Outils (indépendant du jardin) ────────────────────────────────────────
|
|
if not session.exec(select(Tool)).first():
|
|
outils_data = [
|
|
dict(nom="Bêche", categorie="beche",
|
|
description="Bêche acier forgé, manche bois 110 cm"),
|
|
dict(nom="Fourche-bêche", categorie="fourche",
|
|
description="Fourche à bêcher 4 dents inox"),
|
|
dict(nom="Grelinette", categorie="fourche",
|
|
description="Aérateur bi-fourche ergonomique"),
|
|
dict(nom="Pioche", categorie="beche",
|
|
description="Pioche légère pour travaux de surface"),
|
|
dict(nom="Sarcloir", categorie="griffe",
|
|
description="Sarcloir oscillant pour désherber entre les rangs"),
|
|
dict(nom="Râteau", categorie="griffe",
|
|
description="Râteau métallique 14 dents"),
|
|
dict(nom="Binette", categorie="griffe",
|
|
description="Binette pour ameublir et désherber"),
|
|
dict(nom="Transplantoir", categorie="taille",
|
|
description="Transplantoir inox gradué"),
|
|
dict(nom="Arrosoir", categorie="arrosage",
|
|
description="Arrosoir 10L avec pomme amovible"),
|
|
dict(nom="Sécateur", categorie="taille",
|
|
description="Sécateur de précision bypass"),
|
|
]
|
|
for data in outils_data:
|
|
session.add(Tool(**data))
|
|
|
|
# ── Dictons (indépendant du jardin) ──────────────────────────────────────
|
|
if not session.exec(select(Dicton)).first():
|
|
dictons_data = [
|
|
dict(mois=1, texte="En janvier, la neige au potager réjouit le jardinier.", region="National"),
|
|
dict(mois=2, texte="À la Chandeleur, l'hiver reste ou reprend vigueur.", region="National"),
|
|
dict(mois=3, texte="Mars venteux, avril pluvieux, font mai fleureux.", region="National"),
|
|
dict(mois=3, texte="Quand mars se déguise en été, avril se déguise en hiver.", region="Auvergne"),
|
|
dict(mois=4, texte="Avril ne te découvre pas d'un fil.", region="National"),
|
|
dict(mois=4, texte="Pluie d'avril, fleurs à l'infini.", region="Haute-Loire"),
|
|
dict(mois=5, texte="Gelées de mai, misère chez le jardinier.", region="Haute-Loire"),
|
|
dict(mois=5, jour=11, texte="Saints de glace : Mamert, Pancrace et Gervais.", region="National"),
|
|
dict(mois=6, texte="Juin sec, juillet pluvieux ; juillet sec, grains savoureux.", region="Auvergne"),
|
|
dict(mois=7, texte="Pluie de juillet remplit greniers et cuves.", region="National"),
|
|
dict(mois=8, texte="Août chaud, vin bon.", region="Auvergne"),
|
|
dict(mois=9, texte="En septembre, qui sème du blé en fait son profit.", region="National"),
|
|
dict(mois=10, texte="En octobre, glands à foison, bon hiver selon la raison.", region="Haute-Loire"),
|
|
dict(mois=11, texte="À la Saint-Martin, bois ton vin.", region="National"),
|
|
dict(mois=12, texte="Noël au balcon, Pâques aux tisons.", region="Auvergne"),
|
|
]
|
|
for data in dictons_data:
|
|
session.add(Dicton(**data))
|
|
|
|
# ── Astuces (indépendant du jardin) ──────────────────────────────────────
|
|
if not session.exec(select(Astuce)).first():
|
|
astuces_data = [
|
|
dict(titre="Rotation des cultures", entity_type="general",
|
|
contenu="Changez chaque année la famille de légumes sur chaque parcelle pour éviter l'épuisement du sol et les maladies."),
|
|
dict(titre="Compagnonnage tomate-basilic", entity_type="plante",
|
|
contenu="Plantez du basilic au pied des tomates : il éloigne les pucerons et améliore le goût des fruits."),
|
|
dict(titre="Paillage économise l'eau", entity_type="jardin",
|
|
contenu="Un paillage de 5 à 10 cm (paille, BRF, tontes) réduit les arrosages de moitié et limite les mauvaises herbes."),
|
|
dict(titre="Arrosage au pied le matin", entity_type="general",
|
|
contenu="Arrosez toujours au pied des plantes le matin pour éviter les maladies cryptogamiques et la brûlure des feuilles."),
|
|
dict(titre="Purin d'ortie maison", entity_type="general",
|
|
contenu="Faites macérer 1 kg d'orties dans 10 L d'eau pendant 10 jours. Diluez à 10 % et arrosez le sol pour stimuler la croissance."),
|
|
dict(titre="Buttage des pommes de terre", entity_type="plante",
|
|
contenu="Buttez régulièrement les pommes de terre quand les fanes atteignent 20 cm pour favoriser la tubérisation."),
|
|
dict(titre="Semis de carottes en gel", entity_type="plante",
|
|
contenu="Mélangez les graines de carottes avec du sable fin pour un semis homogène et clairsemé."),
|
|
dict(titre="Récupération d'eau de pluie", entity_type="jardin",
|
|
contenu="Installez une cuve de récupération d'eau de pluie : une maison avec 100 m² de toiture collecte 60 000 L/an."),
|
|
dict(titre="Calendrier lunaire", entity_type="general",
|
|
contenu="Semez les légumes-feuilles en lune montante, les légumes-racines en lune descendante pour de meilleurs résultats."),
|
|
dict(titre="Taille en vert des tomates", entity_type="plante",
|
|
contenu="Pincez les gourmands (tiges secondaires entre tige principale et feuille) pour concentrer l'énergie sur les fruits."),
|
|
]
|
|
for data in astuces_data:
|
|
session.add(Astuce(**data))
|
|
|
|
session.commit()
|