# Zentral - Makefile per sviluppo # Uso: make .PHONY: help install build run dev clean test lint backend frontend backend-run frontend-run backend-build frontend-build all stop # Variabili BACKEND_DIR := src/backend/Zentral.API FRONTEND_DIR := src/frontend BACKEND_PORT := 5000 FRONTEND_PORT := 5173 # Colori per output CYAN := \033[0;36m GREEN := \033[0;32m YELLOW := \033[0;33m NC := \033[0m # No Color help: ## Mostra questo help @echo "$(CYAN)Zentral - Comandi disponibili:$(NC)" @echo "" @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " $(GREEN)%-20s$(NC) %s\n", $$1, $$2}' @echo "" @echo "$(YELLOW)Esempi:$(NC)" @echo " make install # Installa tutte le dipendenze" @echo " make dev # Avvia backend e frontend in dev mode" @echo " make build # Compila tutto per produzione" # ============================================ # INSTALLAZIONE # ============================================ install: backend-restore frontend-install ## Installa tutte le dipendenze (backend + frontend) @echo "$(GREEN)Tutte le dipendenze installate!$(NC)" backend-restore: ## Ripristina i pacchetti NuGet del backend @echo "$(CYAN)Ripristino pacchetti NuGet...$(NC)" cd src/backend && dotnet restore frontend-install: ## Installa le dipendenze npm del frontend @echo "$(CYAN)Installazione dipendenze npm...$(NC)" cd $(FRONTEND_DIR) && npm install # ============================================ # BUILD # ============================================ build: backend-build frontend-build ## Compila backend e frontend @echo "$(GREEN)Build completata!$(NC)" backend-build: ## Compila il backend .NET @echo "$(CYAN)Compilazione backend...$(NC)" cd src/backend && dotnet build --configuration Release frontend-build: ## Compila il frontend React @echo "$(CYAN)Compilazione frontend...$(NC)" cd $(FRONTEND_DIR) && npm run build # ============================================ # ESECUZIONE SVILUPPO # ============================================ dev: ## Avvia backend e frontend in parallelo (dev mode) @echo "$(CYAN)Avvio in modalita' sviluppo...$(NC)" @echo "$(YELLOW)Backend: http://localhost:$(BACKEND_PORT)$(NC)" @echo "$(YELLOW)Frontend: http://localhost:$(FRONTEND_PORT)$(NC)" @echo "" @$(MAKE) -j2 backend-run frontend-run backend-run: ## Avvia solo il backend in dev mode @echo "$(CYAN)Avvio backend su porta $(BACKEND_PORT)...$(NC)" cd $(BACKEND_DIR) && dotnet run frontend-run: ## Avvia solo il frontend in dev mode @echo "$(CYAN)Avvio frontend su porta $(FRONTEND_PORT)...$(NC)" cd $(FRONTEND_DIR) && npm run dev backend-watch: ## Avvia il backend con hot reload (dotnet watch) @echo "$(CYAN)Avvio backend con hot reload...$(NC)" cd $(BACKEND_DIR) && dotnet watch run # ============================================ # TEST E LINTING # ============================================ test: backend-test ## Esegue tutti i test @echo "$(GREEN)Test completati!$(NC)" backend-test: ## Esegue i test del backend @echo "$(CYAN)Esecuzione test backend...$(NC)" cd src/backend && dotnet test lint: frontend-lint ## Esegue il linting @echo "$(GREEN)Linting completato!$(NC)" frontend-lint: ## Esegue ESLint sul frontend @echo "$(CYAN)Linting frontend...$(NC)" cd $(FRONTEND_DIR) && npm run lint # ============================================ # PULIZIA # ============================================ clean: backend-clean frontend-clean ## Pulisce tutti gli artefatti di build @echo "$(GREEN)Pulizia completata!$(NC)" backend-clean: ## Pulisce gli artefatti di build del backend @echo "$(CYAN)Pulizia backend...$(NC)" cd src/backend && dotnet clean find src -type d -name "bin" -exec rm -rf {} + 2>/dev/null || true find src -type d -name "obj" -exec rm -rf {} + 2>/dev/null || true frontend-clean: ## Pulisce gli artefatti di build del frontend @echo "$(CYAN)Pulizia frontend...$(NC)" rm -rf $(FRONTEND_DIR)/dist rm -rf $(FRONTEND_DIR)/node_modules/.vite clean-all: clean ## Pulizia completa (include node_modules) @echo "$(CYAN)Rimozione node_modules...$(NC)" rm -rf $(FRONTEND_DIR)/node_modules # ============================================ # DATABASE # ============================================ db-update: ## Applica le migration del database @echo "$(CYAN)Applicazione migration...$(NC)" cd $(BACKEND_DIR) && dotnet ef database update db-migration: ## Crea una nuova migration (usa: make db-migration NAME=NomeMigration) @echo "$(CYAN)Creazione migration: $(NAME)$(NC)" cd $(BACKEND_DIR) && dotnet ef migrations add $(NAME) # ============================================ # UTILITY # ============================================ logs: ## Mostra i log del backend (se in esecuzione) @tail -f $(BACKEND_DIR)/logs/*.log 2>/dev/null || echo "Nessun file di log trovato" check: ## Verifica che tutti i prerequisiti siano installati @echo "$(CYAN)Verifica prerequisiti...$(NC)" @command -v dotnet >/dev/null 2>&1 && echo "$(GREEN)dotnet:$(NC) $$(dotnet --version)" || echo "$(YELLOW)dotnet: non trovato$(NC)" @command -v node >/dev/null 2>&1 && echo "$(GREEN)node:$(NC) $$(node --version)" || echo "$(YELLOW)node: non trovato$(NC)" @command -v npm >/dev/null 2>&1 && echo "$(GREEN)npm:$(NC) $$(npm --version)" || echo "$(YELLOW)npm: non trovato$(NC)" # Target di default .DEFAULT_GOAL := help