.PHONY: help dev test lint fmt clean docker-up docker-down install migrate # Variables BACKEND_DIR = backend FRONTEND_DIR = frontend PYTHON = python3 UV = uv NPM = npm help: ## Affiche cette aide @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' # === Développement === dev: ## Lance l'environnement de développement complet (backend + frontend) docker compose up --build dev-backend: ## Lance uniquement le backend en mode dev cd $(BACKEND_DIR) && $(UV) run uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 dev-frontend: ## Lance uniquement le frontend en mode dev cd $(FRONTEND_DIR) && $(NPM) run dev # === Installation === install: install-backend install-frontend ## Installe toutes les dépendances install-backend: ## Installe les dépendances Python (backend) cd $(BACKEND_DIR) && $(UV) sync install-frontend: ## Installe les dépendances Node (frontend) cd $(FRONTEND_DIR) && $(NPM) install # === Tests === test: test-backend test-frontend ## Lance tous les tests test-backend: ## Lance les tests backend (pytest) cd $(BACKEND_DIR) && $(UV) run pytest test-backend-cov: ## Lance les tests backend avec couverture cd $(BACKEND_DIR) && $(UV) run pytest --cov=app --cov-report=html --cov-report=term test-frontend: ## Lance les tests frontend (vitest) cd $(FRONTEND_DIR) && $(NPM) run test # === Linting & Formatage === lint: lint-backend lint-frontend ## Lance tous les linters lint-backend: ## Lint le code backend (ruff + mypy) cd $(BACKEND_DIR) && $(UV) run ruff check . cd $(BACKEND_DIR) && $(UV) run mypy . lint-frontend: ## Lint le code frontend (eslint) cd $(FRONTEND_DIR) && $(NPM) run lint fmt: fmt-backend fmt-frontend ## Formate tout le code fmt-backend: ## Formate le code backend (ruff) cd $(BACKEND_DIR) && $(UV) run ruff check --fix . cd $(BACKEND_DIR) && $(UV) run ruff format . fmt-frontend: ## Formate le code frontend (prettier) cd $(FRONTEND_DIR) && $(NPM) run fmt # === Base de données === migrate: ## Crée et applique une nouvelle migration Alembic cd $(BACKEND_DIR) && $(UV) run alembic revision --autogenerate -m "$(msg)" cd $(BACKEND_DIR) && $(UV) run alembic upgrade head migrate-up: ## Applique les migrations en attente cd $(BACKEND_DIR) && $(UV) run alembic upgrade head migrate-down: ## Rollback de la dernière migration cd $(BACKEND_DIR) && $(UV) run alembic downgrade -1 migrate-history: ## Affiche l'historique des migrations cd $(BACKEND_DIR) && $(UV) run alembic history db-reset: ## Réinitialise la base de données (ATTENTION: supprime toutes les données!) rm -f data/homestock.db $(MAKE) migrate-up # === Docker === docker-up: ## Démarre les conteneurs Docker docker compose up -d docker-down: ## Arrête les conteneurs Docker docker compose down docker-logs: ## Affiche les logs des conteneurs docker compose logs -f docker-rebuild: ## Rebuild et redémarre les conteneurs docker compose up --build -d docker-clean: ## Nettoie les conteneurs, volumes et images Docker docker compose down -v docker system prune -f # === Nettoyage === clean: ## Nettoie les fichiers temporaires find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true find . -type d -name ".pytest_cache" -exec rm -rf {} + 2>/dev/null || true find . -type d -name ".ruff_cache" -exec rm -rf {} + 2>/dev/null || true find . -type d -name ".mypy_cache" -exec rm -rf {} + 2>/dev/null || true find . -type d -name "node_modules" -exec rm -rf {} + 2>/dev/null || true find . -type d -name "dist" -exec rm -rf {} + 2>/dev/null || true find . -type f -name "*.pyc" -delete rm -rf $(BACKEND_DIR)/htmlcov rm -rf $(FRONTEND_DIR)/coverage clean-all: clean docker-clean ## Nettoie tout (fichiers + Docker) rm -rf data/homestock.db rm -rf uploads/* # === Utilitaires === shell-backend: ## Ouvre un shell Python dans l'environnement backend cd $(BACKEND_DIR) && $(UV) run python shell-db: ## Ouvre un shell SQLite sur la base de données sqlite3 data/homestock.db check: lint test ## Vérifie la qualité du code (lint + tests) init: install migrate-up ## Initialise le projet pour la première fois @echo "✅ Projet initialisé avec succès!" @echo "👉 Lancez 'make dev' pour démarrer le développement"