11 KiB
11 KiB
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_varieties→plants, router/api/varieties→/api/plants, modèles, seed - Frontend : renommer
VarietesView→PlantesView, 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 nullablehauteur_cm: int nullablemaladies_courantes: text (liste libre)astuces_culture: texturl_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 nullablenotes: 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 verstoolsnullable - 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 viaPRAGMA table_info - Applique
ALTER TABLE … ADD COLUMNpour les nouveaux champs - Appelé dans le lifespan de
main.pyaprèscreate_db_and_tables
Phase 2 — Médias enrichis
2.1 Upload photos avec optimisation
- Ajouter
Pillowaux 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.vueré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),journullable,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.vue→CalendrierView.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_idnullable,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éePOST /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_KEYabsent)
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 completPOST /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 |