91 lines
3.2 KiB
Markdown
91 lines
3.2 KiB
Markdown
# 🌿 Jardin — Application de gestion de jardins
|
|
|
|
Interface web **mobile-first** pour gérer jardins, cultures, tâches et calendrier lunaire, avec détection d'espèces via IA.
|
|
Thème visuel : **Gruvbox Dark Seventies**.
|
|
|
|
## 🏗️ Architecture du Projet
|
|
|
|
Le projet est composé de trois services principaux orchestrés par Docker Compose :
|
|
|
|
1. **Backend (FastAPI)** : API REST gérant la logique métier, la base de données (SQLite/SQLModel) et l'intégration des services (lunaire, météo).
|
|
2. **Frontend (Vue 3)** : Interface utilisateur réactive avec Vite, Pinia pour le store, et Tailwind CSS pour le style.
|
|
3. **AI Service (FastAPI + YOLO)** : Service spécialisé dans la détection et classification de plantes via un modèle YOLOv8 (`ultralytics`).
|
|
4. **Redis** : Utilisé pour le cache et les tâches planifiées.
|
|
|
|
## 🚀 Démarrage Rapide
|
|
|
|
### Avec Docker (Recommandé)
|
|
```bash
|
|
cp .env.example .env
|
|
docker compose up --build
|
|
```
|
|
- **Application** : [http://localhost:8061](http://localhost:8061)
|
|
- **API Documentation (Swagger)** : [http://localhost:8060/docs](http://localhost:8060/docs)
|
|
|
|
### Développement Local
|
|
|
|
#### Backend
|
|
```bash
|
|
cd backend
|
|
python -m venv .venv && source .venv/bin/activate
|
|
pip install -r requirements.txt
|
|
# Variables d'env par défaut pour le dev local
|
|
export DATABASE_URL=sqlite:///./data/jardin.db
|
|
export UPLOAD_DIR=./data/uploads
|
|
uvicorn app.main:app --reload --port 8060
|
|
```
|
|
|
|
#### Frontend
|
|
```bash
|
|
cd frontend
|
|
npm install
|
|
npm run dev -- --port 8061
|
|
```
|
|
|
|
#### AI Service
|
|
```bash
|
|
cd ai-service
|
|
pip install -r requirements.txt
|
|
uvicorn main:app --reload --port 8070
|
|
```
|
|
|
|
## 🛠️ Commandes de Test et Qualité
|
|
|
|
### Backend
|
|
```bash
|
|
cd backend
|
|
pytest tests/ -v
|
|
```
|
|
|
|
### Frontend
|
|
```bash
|
|
cd frontend
|
|
npm run lint # Vérification TypeScript (vue-tsc)
|
|
```
|
|
|
|
## 📋 Conventions de Développement
|
|
|
|
- **Langue** : Code en anglais (variables, fonctions, routes), commentaires et documentation en français.
|
|
- **Style Backend** : PEP 8. Utilisation de `SQLModel` pour les modèles de données (union de SQLAlchemy et Pydantic).
|
|
- **Style Frontend** : Composition API (Vue 3). Utilisation de TypeScript obligatoire. Tailwind CSS pour le styling atomique.
|
|
- **API** : Préfixe `/api` pour tous les endpoints. Documentation automatique via Swagger.
|
|
- **Base de données** : SQLite par défaut pour la simplicité et la portabilité (située dans `data/jardin.db`).
|
|
- **Media** : Les images uploadées sont stockées dans `data/uploads/` et servies via `/uploads`.
|
|
|
|
## 📂 Structure des Données (Modèles SQLModel)
|
|
|
|
- `Garden` : Jardins (nom, dimensions, exposition, géolocalisation).
|
|
- `Plant` : Bibliothèque de plantes (nom, famille, exigences).
|
|
- `Variety` : Variétés spécifiques de plantes.
|
|
- `Planting` : Instances de plantation dans un jardin (date, état, position).
|
|
- `Task` : Tâches à accomplir (arrosage, taille, etc.).
|
|
- `Settings` : Paramètres utilisateur (lat/long pour météo/lune).
|
|
- `Meteo` : Données météo locales et prévisions.
|
|
- `Lunar` : Calculs de phases et conseils lunaires.
|
|
|
|
## 🤖 Service IA
|
|
|
|
Le service de détection utilise le modèle `foduucom/plant-leaf-detection-and-classification` via YOLOv8.
|
|
Endpoint : `POST /detect` acceptant une image.
|
|
Il est intégré au backend via le router `identify`.
|