# 🔧 GarageManager > Application web de gestion de garage automobile — véhicules, interventions, pièces détachées. [![FastAPI](https://img.shields.io/badge/FastAPI-0.109-009688?style=flat&logo=fastapi)](https://fastapi.tiangolo.com) [![Python](https://img.shields.io/badge/Python-3.12-3776AB?style=flat&logo=python)](https://python.org) [![Docker](https://img.shields.io/badge/Docker-ready-2496ED?style=flat&logo=docker)](https://docker.com) [![SQLite](https://img.shields.io/badge/SQLite-léger-003B57?style=flat&logo=sqlite)](https://sqlite.org) 🌐 **URL de production** : [https://garage.nas.percolouco.com](https://garage.nas.percolouco.com) --- ## 📋 Description **GarageManager** est une application web légère permettant de gérer un garage automobile personnel ou professionnel. Elle permet de suivre les véhicules, leurs interventions mécaniques et les pièces utilisées, avec un tableau de bord synthétique. Pensée pour être self-hostée, elle tourne dans un conteneur Docker derrière un reverse proxy Traefik. --- ## 🛠️ Stack technique | Composant | Technologie | Rôle | |-----------|-------------|------| | **Backend** | [FastAPI](https://fastapi.tiangolo.com) 0.109 | API REST + rendu SSR | | **Base de données** | [SQLite](https://sqlite.org) | Stockage persistant, fichier unique | | **Templates** | [Jinja2](https://jinja.palletsprojects.com) 3.1 | Rendu HTML côté serveur | | **CSS** | [Tailwind CSS](https://tailwindcss.com) (CDN) | Interface responsive moderne | | **Serveur ASGI** | [Uvicorn](https://www.uvicorn.org) | Serveur HTTP haute performance | | **Conteneur** | [Docker](https://docker.com) + Compose | Déploiement clé en main | | **Reverse proxy** | [Traefik](https://traefik.io) | HTTPS automatique (Let's Encrypt) | --- ## ✨ Fonctionnalités ### 🚗 Gestion des véhicules - Ajout de véhicules avec les informations clés : - **Immatriculation** (clé unique, mise en majuscules automatiquement) - **Marque**, **modèle**, **année**, **kilométrage** - **Numéro VIN** (Vehicle Identification Number) - **Infos libres** par véhicule : notes texte, liens URL, photos — système extensible - Recherche par immatriculation, marque, modèle ou VIN - Compteur d'interventions par véhicule - Suppression en cascade (interventions + pièces supprimées automatiquement) ### 🔩 Gestion des interventions - Création d'interventions liées à un véhicule - Champs disponibles : - **Description** de l'intervention - **Statut** : `En attente` / `En cours` / `Terminé` - **Coût main-d'œuvre** - **Technicien** responsable - **Notes** internes - Suivi du coût total (main-d'œuvre + pièces) - Filtrage par statut ### 🔧 Gestion des pièces détachées - Association de pièces à chaque intervention : - **Nom** de la pièce - **Référence** constructeur - **Marque** de la pièce - **Prix unitaire** et **quantité** - **Photo** (upload d'image) - Calcul automatique du coût total par intervention ### 📊 Tableau de bord - Vue synthétique en temps réel : - Nombre de véhicules enregistrés - Interventions par statut (en attente / en cours / terminées) - Coût total des interventions terminées (pièces + main-d'œuvre) - 5 dernières interventions avec accès rapide --- ## 📁 Structure du projet ``` garagemanager/ ├── app/ │ ├── __init__.py │ └── main.py # Application FastAPI (routes, DB, logique) ├── templates/ │ ├── base.html # Template de base (nav, layout) │ ├── dashboard.html # Tableau de bord │ ├── vehicules.html # Liste des véhicules │ ├── vehicule_form.html # Formulaire ajout/édition véhicule │ ├── vehicule_detail.html # Détail véhicule + interventions + infos │ ├── interventions.html # Liste des interventions │ ├── intervention_form.html # Formulaire ajout/édition intervention │ └── intervention_detail.html # Détail intervention + pièces ├── data/ # Volume persistant (ignoré par git) │ └── garage.db # Base SQLite ├── Dockerfile # Image Docker Python 3.12-slim ├── docker-compose.yml # Déploiement avec Traefik ├── requirements.txt # Dépendances Python └── README.md ``` --- ## 🚀 Installation ### Prérequis - Docker & Docker Compose installés - (Optionnel) Traefik configuré pour HTTPS automatique ### 1. Cloner le dépôt ```bash git clone http://192.168.1.29:3500/perco/garagemanager.git cd garagemanager ``` ### 2. Démarrer avec Docker Compose **Avec Traefik (production)** : ```bash docker compose up -d ``` L'application sera accessible via `https://garage.nas.percolouco.com` si Traefik est configuré avec le réseau `proxy`. **Sans Traefik (local/dev)** : Modifier `docker-compose.yml` pour exposer un port directement : ```yaml ports: - "8000:8000" ``` Puis : ```bash docker compose up -d ``` Accessible sur : `http://localhost:8000` ### 3. Développement local (sans Docker) ```bash # Créer un environnement virtuel python3 -m venv venv source venv/bin/activate # Installer les dépendances pip install -r requirements.txt # Lancer le serveur avec rechargement automatique DB_PATH=./data/garage.db uvicorn app.main:app --reload --port 8000 ``` Accessible sur : `http://localhost:8000` --- ## 🗄️ Base de données La base SQLite est initialisée automatiquement au démarrage. Le schéma comprend 4 tables : | Table | Description | |-------|-------------| | `vehicules` | Véhicules (immat, marque, modèle, VIN, km) | | `vehicule_infos` | Infos libres par véhicule (texte/url/image) | | `interventions` | Interventions mécaniques avec statut et coûts | | `pieces` | Pièces détachées liées aux interventions | Les suppressions en cascade sont gérées par des contraintes SQLite (`ON DELETE CASCADE`). --- ## 🐳 Variables d'environnement | Variable | Défaut | Description | |----------|--------|-------------| | `DB_PATH` | `/data/garage.db` | Chemin de la base SQLite | | `UPLOAD_DIR` | `/data/uploads` | Dossier de stockage des photos | --- ## 🔄 Mise à jour ```bash # Arrêter le conteneur docker compose down # Récupérer les dernières modifications git pull # Reconstruire l'image et redémarrer docker compose up -d --build ``` --- ## 📝 Notes - Les données sont persistées dans le dossier `./data/` (volume Docker) - Les photos uploadées sont stockées dans `./data/uploads/` - Le dossier `data/` est exclu du dépôt git (`.gitignore`) - L'application ne gère pas d'authentification — à protéger via Traefik middleware si nécessaire --- ## 🏷️ Versions | Version | Notes | |---------|-------| | v2.1 | Infos libres véhicule (texte/url/image), upload photos pièces | | v2.0 | Ajout gestion des pièces détachées | | v1.0 | Gestion véhicules + interventions | --- *Développé avec ❤️ pour la gestion de garage automobile*