Files
jardin/plan_amelioration.md
2026-02-22 15:05:40 +01:00

11 KiB
Raw Permalink Blame History

Plan d'amélioration — Jardin App

Généré le 2026-02-22 · Mis à jour le 2026-02-22 Source : amelioration.md + analyse du code existant + brainstorming Statuts : [ ] à faire · [→] en cours · [x] terminé


Brainstorming & Analyse

Ce qui existe (MVP)

  • Backend : CRUD jardins / variétés (plantes) / plantations / tâches / settings / upload basique
  • Frontend : 9 vues (dashboard, jardins, grille, variétés, plantations, planning, tâches, lunaire, réglages)
  • Infrastructure : Docker Compose, SQLite, Nginx, TZ=Europe/Paris
  • Script calendrier_lunaire/lunar_calendar.py (skyfield + de421.bsp) prêt mais non intégré

Décisions architecturales issues du brainstorming

Sujet Décision
Renommage variétés → plantes Partout (modèle, routes, UI, seed, nav)
Photos Upload → Pillow → WebP 1200px max, thumbnail 300px
Calendrier lunaire Intégrer lunar_calendar.py dans l'API, cache JSON par année
Météo Open-Meteo API (gratuit, sans clé, RGPD ok)
Outils Nouvelle entité DB + seed 15 outils courants
Tâches récurrentes Champ frequence_jours nullable + date_prochaine calculée
Capteurs MQTT paho-mqtt, config par capteur (topic, type, unité)
Backup Archive ZIP : jardin.db + uploads/ + export JSON
Détection plante Pl@ntNet API (gratuit, open-source) ou mode offline désactivé
Migration BDD Script Python migrate.py + versionnement db_version dans settings
Dictons Table dictons seed avec ~60 dictons (Auvergne / Haute-Loire)
Astuces Table astuces liée polymorphiquement (jardin / plante / tâche)
Récoltes Table recoltes liée à une plantation (quantité, unité, date)
Ravageurs/maladies Table observations (type: maladie/ravageur/traitement)

Phase 1 — Renommage & Enrichissement des modèles

Priorité maximale : base de tout le reste

1.1 Renommage « Variétés » → « Plantes »

  • Backend : renommer plant_varietiesplants, router /api/varieties/api/plants, modèles, seed
  • Frontend : renommer VarietesViewPlantesView, nav header, router, stores, api client
  • Tests : adapter tous les tests existants

Impact : ~12 fichiers

1.2 Enrichissement modèle Plante

Nouveaux champs :

  • categorie : enum (potager, fleur, arbre, arbuste)
  • famille : str (ex. Solanacées, Cucurbitacées...)
  • resistance_froid : int (°C minimum supporté)
  • semis_debut / semis_fin : int (mois 1-12)
  • plantation_debut / plantation_fin : int (mois 1-12)
  • recolte_debut / recolte_fin : int (mois 1-12)
  • espacement_cm : int nullable
  • hauteur_cm : int nullable
  • maladies_courantes : text (liste libre)
  • astuces_culture : text
  • url_reference : str nullable

1.3 Seed plantes courantes (~20 plantes)

  • Tomate, Courgette, Carotte, Salade, Ail, Oignon, Haricot, Pois, Poireau, Pomme de terre, Fraise, Framboise, Persil, Échalote, Chou-fleur, Chou, Betterave, Radis, Épinard, Basilic

1.4 Enrichissement modèle Jardin

Nouveaux champs :

  • latitude / longitude : float nullable (géolocalisation)
  • type_terre : enum (argileux, sableux, limoneux, calcaire, humifère)
  • ph_sol : float nullable (4.0 9.0)
  • ensoleillement : enum (plein_soleil, mi_ombre, ombre)
  • surface_m2 : float nullable
  • notes : text nullable

1.5 Entité Outils (nouvelle)

Champs : nom, description, categorie (enum : bêche/fourche/griffe/arrosage/taille/autre), photo_url

  • Modèle SQLModel Tool
  • Router /api/tools (CRUD complet + tests)
  • Seed 15 outils : Bêche, Fourche-bêche, Grelinette, Pioche, Sarcloir, Râteau, Binette, Transplantoir, Serfouette, Arrosoir, Tuyau, Sécateur, Cisaille, Brouette, Gants
  • Vue frontend OutilsView.vue + route /outils
  • Ajout dans la navigation (header + drawer)

1.6 Tâches enrichies

  • Champ frequence_jours : int nullable
  • Champ date_prochaine : date nullable
  • Champ outil_id : FK vers tools nullable
  • Seed tâches courantes : Arrosage, Binage, Désherbage, Taille, Traitement, Semis, Plantation, Récolte, Compostage, Buttage, Paillage, Palissage, Fertilisation

1.7 Migration BDD automatique

  • Script backend/app/migrate.py : détecte colonnes manquantes via PRAGMA table_info
  • Applique ALTER TABLE … ADD COLUMN pour les nouveaux champs
  • Appelé dans le lifespan de main.py après create_db_and_tables

Phase 2 — Médias enrichis

2.1 Upload photos avec optimisation

  • Ajouter Pillow aux dépendances backend
  • Endpoint POST /api/upload : détecter image → convertir WebP → resize 1200px max → thumbnail 300px
  • Nommage fichiers : {uuid}.webp + {uuid}_thumb.webp
  • Retourner { url, thumbnail_url } dans la réponse

2.2 Photos liées aux entités (galerie)

  • Modèle Media : entity_type (jardin/plante/outil/plantation), entity_id, url, thumbnail_url, titre, created_at
  • Endpoint GET /api/media?entity_type=jardin&entity_id=1
  • Endpoint DELETE /api/media/{id}
  • Composant Vue MediaGallery.vue réutilisable (lightbox simple)

2.3 Support PDF & URLs & annotations

  • Table attachments : entity_type, entity_id, type (pdf/url/note), titre, contenu
  • Upload PDF stocké dans /data/uploads/pdf/
  • Composant Vue AttachmentList.vue

2.4 Upload depuis mobile (appareil photo)

  • <input type="file" accept="image/*" capture="environment"> dans le composant upload
  • Preview avant envoi (FileReader API)

Phase 3 — Calendrier complet

3.1 Intégration lunar_calendar.py dans l'API

  • Service backend/app/services/lunar.py (skyfield + pytz + numpy)
  • Endpoint GET /api/lunar?month=YYYY-MM → retourne les jours du mois
  • Cache dict en mémoire par mois

3.2 Icônes calendrier lunaire

  • Phase interpolée sur illumination → icône emoji lune (🌑🌒🌓🌔🌕🌖🌗🌘)
  • Type jour → badge coloré : 🌱 Racine / 🌿 Feuille / 🌸 Fleur / 🍅 Fruit
  • Montante/Descendante : badges ↑↓
  • Périgée / Apogée / Nœud : badges spéciaux

3.3 Dictons régionaux

  • Table dictons : mois (1-12), jour nullable, texte, region
  • Seed ~15 dictons : Auvergne / Haute-Loire / National
  • Endpoint GET /api/dictons?mois=3 → dictons du mois

3.4 Refonte vue Calendrier

  • Renommer LunaireView.vueCalendrierView.vue, route /calendrier
  • Header navigation : "Lunaire" → "Calendrier"
  • Onglets internes : Lunaire / Météo / Tâches / Dictons
  • Vue mois : grille 7×5 avec résumé par jour (icône phase + type)
  • Vue jour (modal) : détail complet phase, signe zodiacal, type, dicton, météo

Phase 4 — Météo

4.1 Intégration Open-Meteo

  • Service backend/app/services/meteo.py : httpx → Open-Meteo API
  • Cache fichier JSON 3h
  • Endpoint GET /api/meteo?days=14

4.2 Frontend météo

  • Onglet Météo dans CalendrierView avec codes WMO → icône + label + temp + pluie
  • Widget Dashboard : 3 prochains jours

Phase 5 — Récoltes & Observations

5.1 Récoltes

  • Modèle Recolte : plantation_id, quantite, unite, date_recolte, notes
  • Router /api/plantings/{id}/recoltes (CRUD + tests)
  • API client frontend recoltes.ts
  • Section Récoltes dans PlantationsView (dépliable par plantation)

5.2 Observations (maladies, ravageurs, traitements)

  • Modèle Observation : type (maladie/ravageur/traitement/note), titre, description, date, photo_url
  • Router /api/observations
  • Section Observations dans fiche plantation + jardin (frontend)

Phase 6 — Capteurs IoT / MQTT

6.1-6.3 Capteurs

  • Modèle Sensor + SensorReading
  • Client MQTT (paho-mqtt)
  • Frontend capteurs

Phase optionnelle selon l'infrastructure disponible.


Phase 7 — Astuces

7.1 Entité Astuces

  • Modèle Astuce : entity_type, entity_id nullable, titre, contenu, source
  • Router /api/astuces
  • Seed ~10 astuces

7.2 Frontend astuces

  • Composant AstuceCard.vue (fond gruvbox-soft, icône 💡)
  • "Astuce du jour" sur le Dashboard (rotation aléatoire par date)

Phase 8 — UI/UX & Système de design

8.1 Palette sémantique (par-dessus Gruvbox)

  • Plante : #b8bb26 (vert) · Jardin : orange · Arrosage : bleu · Outils : jaune
  • Récolte : #8ec07c (aqua) documenté dans tailwind.config.js

8.2 Responsive Desktop

  • Sidebar fixe 240px en desktop (≥1024px) avec icônes au lieu du drawer mobile
  • Drawer mobile maintenu pour petits écrans

8.3 Mode édition inline

  • Bouton "Modifier" sur chaque fiche → bascule en mode formulaire in-place
  • PUT sur l'API existante, sauvegarde optimiste

8.4 Icônes SVG dimensionnables

  • Composant AppIcon.vue (name + size props)

Phase 9 — Réglages avancés

9.1 Backup & Restore complet

  • GET /api/backup → archive ZIP (jardin.db + uploads/) streamée
  • POST /api/restore → upload ZIP, validation, décompression

9.2 Sections réglages organisées

  • Onglets : Interface / Jardin / Plantes / Tâches / Calendrier / Météo / Capteurs / Sauvegarde

9.3 Détection de plante par photo (optionnel)

  • Intégration Pl@ntNet API (désactivé si PLANTNET_API_KEY absent)

Phase 10 — Backend : qualité & évolutivité

10.1 Tests de migration

  • Tests de migration (créer DB v0, migrer vers v1, vérifier colonnes)

10.2 Export/Import JSON

  • GET /api/export → JSON complet
  • POST /api/import → validation + import

10.3 Tests élargis

  • Tests pour chaque nouveau router (récoltes , observations, capteurs, médias, dictons)
  • Test service lunaire (mock skyfield ou dates connues)
  • Test backup/restore
  • Couverture cible : 80% des routers

Ordre de développement recommandé

Phase 1 (fondations) ✅
    → Phase 2 (médias) ✅ backend · frontend [ ]
        → Phase 3 (calendrier lunaire réel) ✅
            → Phase 4 (météo) ✅
Phase 5 (récoltes/observations) ✅ backend · frontend ✅ récoltes
Phase 7 (astuces) ✅ backend · frontend [ ]
Phase 8 (UI/UX) → sidebar responsive ✅ · mode édition [ ]
Phase 6 (MQTT)   ← optionnel
Phase 9 (réglages avancés)
Phase 10 (qualité)

Récapitulatif des nouvelles entités DB

Table Phase Description Statut
plant 1.1 Renommage de plant_varieties
tool 1.5 Outils de jardinage
media 2.2 Photos liées à toute entité backend
attachment 2.3 PDF, URLs, notes backend
dicton 3.3 Dictons saisonniers régionaux
recolte 5.1 Quantités récoltées par plantation
observation 5.2 Maladies, ravageurs, traitements backend
astuce 7.1 Conseils de jardinage backend

Changelog

Date Version Description
2026-02-22 v1.0 Création initiale — 10 phases, ~90 tâches
2026-02-22 v1.1 Phase 1-5 backend complètes · bug date Recolte corrigé · sidebar responsive desktop