124 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
# ========= Bacchus Monorepo Makefile (ohne Docker) =========
 | 
						||
# Variablen (bei Bedarf per "make VAR=wert ..." überschreiben)
 | 
						||
DB_HOST ?= localhost
 | 
						||
DB_PORT ?= 5432
 | 
						||
DB_NAME ?= bacchus
 | 
						||
DB_USER ?= bacchus
 | 
						||
DB_PASS ?= bacchus
 | 
						||
SUPERUSER ?= postgres           # Postgres-Superuser zum Anlegen von User/DB
 | 
						||
PGPASSWORD_SUPER ?=             # Passwort des SUPERUSER (leer, wenn nicht benötigt)
 | 
						||
 | 
						||
DB_URL := postgres://$(DB_USER):$(DB_PASS)@$(DB_HOST):$(DB_PORT)/$(DB_NAME)
 | 
						||
 | 
						||
# Pfade
 | 
						||
BACKEND := apps/backend
 | 
						||
FRONTEND := apps/frontend
 | 
						||
 | 
						||
# ------------------------------------------------------------
 | 
						||
# Hilfs-Target: Hilfe ausgeben
 | 
						||
# ------------------------------------------------------------
 | 
						||
.PHONY: help
 | 
						||
help: ## Zeigt diese Hilfe
 | 
						||
	@echo "Bacchus Makefile – Targets:"
 | 
						||
	@awk 'BEGIN {FS":.*##"; printf "\n"} /^[a-zA-Z0-9_%-]+:.*##/ { printf "  \033[36m%-22s\033[0m %s\n", $$1, $$2 } /^## / { printf "\n\033[1m%s\033[0m\n", substr($$0,4)}' $(MAKEFILE_LIST)
 | 
						||
	@echo "\nDB_URL = $(DB_URL)"
 | 
						||
 | 
						||
## --- Umgebung/Envs ----------------------------------------------------
 | 
						||
.PHONY: env-backend
 | 
						||
env-backend: ## apps/backend/.env aus Beispiel erzeugen (falls fehlt)
 | 
						||
	@test -f $(BACKEND)/.env || cp $(BACKEND)/.env.example $(BACKEND)/.env
 | 
						||
 | 
						||
.PHONY: env-frontend
 | 
						||
env-frontend: ## apps/frontend/.env.local aus Beispiel erzeugen (falls fehlt)
 | 
						||
	@test -f $(FRONTEND)/.env.local || cp $(FRONTEND)/.env.local.example $(FRONTEND)/.env.local
 | 
						||
 | 
						||
## --- Datenbank einrichten ---------------------------------------------
 | 
						||
.PHONY: db-create-user
 | 
						||
db-create-user: ## DB-User $(DB_USER) anlegen (mit SUPERUSER)
 | 
						||
	@PGPASSWORD=$(PGPASSWORD_SUPER) psql -U $(SUPERUSER) -h $(DB_HOST) -p $(DB_PORT) -tc "SELECT 1 FROM pg_roles WHERE rolname='$(DB_USER)';" | grep -q 1 || \
 | 
						||
	PGPASSWORD=$(PGPASSWORD_SUPER) psql -U $(SUPERUSER) -h $(DB_HOST) -p $(DB_PORT) -c "CREATE USER $(DB_USER) WITH PASSWORD '$(DB_PASS)';"
 | 
						||
	@echo "✔ User $(DB_USER) ok"
 | 
						||
 | 
						||
.PHONY: db-create-db
 | 
						||
db-create-db: ## Datenbank $(DB_NAME) anlegen (Owner=$(DB_USER))
 | 
						||
	@PGPASSWORD=$(PGPASSWORD_SUPER) psql -U $(SUPERUSER) -h $(DB_HOST) -p $(DB_PORT) -tc "SELECT 1 FROM pg_database WHERE datname='$(DB_NAME)';" | grep -q 1 || \
 | 
						||
	PGPASSWORD=$(PGPASSWORD_SUPER) psql -U $(SUPERUSER) -h $(DB_HOST) -p $(DB_PORT) -c "CREATE DATABASE $(DB_NAME) OWNER $(DB_USER);"
 | 
						||
	@echo "✔ DB $(DB_NAME) ok"
 | 
						||
 | 
						||
.PHONY: db-setup
 | 
						||
db-setup: db-create-user db-create-db ## User & DB anlegen (idempotent)
 | 
						||
 | 
						||
.PHONY: db-psql
 | 
						||
db-psql: ## Mit psql auf DB verbinden
 | 
						||
	psql "$(DB_URL)"
 | 
						||
 | 
						||
.PHONY: db-drop-db
 | 
						||
db-drop-db: ## Datenbank $(DB_NAME) löschen (Vorsicht!)
 | 
						||
	@PGPASSWORD=$(PGPASSWORD_SUPER) psql -U $(SUPERUSER) -h $(DB_HOST) -p $(DB_PORT) -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='$(DB_NAME)';" || true
 | 
						||
	@PGPASSWORD=$(PGPASSWORD_SUPER) psql -U $(SUPERUSER) -h $(DB_HOST) -p $(DB_PORT) -c "DROP DATABASE IF EXISTS $(DB_NAME);"
 | 
						||
	@echo "✖ DB $(DB_NAME) dropped"
 | 
						||
 | 
						||
.PHONY: db-drop-user
 | 
						||
db-drop-user: ## DB-User $(DB_USER) löschen (Vorsicht!)
 | 
						||
	@PGPASSWORD=$(PGPASSWORD_SUPER) psql -U $(SUPERUSER) -h $(DB_HOST) -p $(DB_PORT) -c "DROP OWNED BY $(DB_USER) CASCADE;" || true
 | 
						||
	@PGPASSWORD=$(PGPASSWORD_SUPER) psql -U $(SUPERUSER) -h $(DB_HOST) -p $(DB_PORT) -c "DROP ROLE IF EXISTS $(DB_USER);"
 | 
						||
	@echo "✖ User $(DB_USER) dropped"
 | 
						||
 | 
						||
.PHONY: db-reset
 | 
						||
db-reset: db-drop-db db-create-db migrate seed ## DB leeren & neu aufsetzen (Migrate+Seed)
 | 
						||
 | 
						||
## --- Migrations (sqlx-cli benötigt) -----------------------------------
 | 
						||
.PHONY: migrate
 | 
						||
migrate: ## Migrationen ausführen
 | 
						||
	cd $(BACKEND) && DATABASE_URL=$(DB_URL) sqlx migrate run
 | 
						||
 | 
						||
.PHONY: migrate-new
 | 
						||
migrate-new: ## Neue Migration anlegen: make migrate-new name=add_table
 | 
						||
	@test -n "$(name)" || (echo "Bitte mit name=... aufrufen"; exit 1)
 | 
						||
	cd $(BACKEND) && sqlx migrate add -r $(name)
 | 
						||
 | 
						||
.PHONY: sqlx-prepare
 | 
						||
sqlx-prepare: ## SQLx offline-data erzeugen (schnellere Builds)
 | 
						||
	cd $(BACKEND) && DATABASE_URL=$(DB_URL) cargo sqlx prepare
 | 
						||
 | 
						||
## --- Seeds -------------------------------------------------------------
 | 
						||
.PHONY: seed
 | 
						||
seed: ## Beispiel-Daten einspielen
 | 
						||
	psql "$(DB_URL)" -f scripts/seed.sql
 | 
						||
 | 
						||
## --- Backend -----------------------------------------------------------
 | 
						||
.PHONY: dev-backend
 | 
						||
dev-backend: env-backend ## Backend starten (Axum)
 | 
						||
	cd $(BACKEND) && RUST_LOG=bacchus=debug,axum=info DATABASE_URL=$(DB_URL) cargo run
 | 
						||
 | 
						||
.PHONY: fmt
 | 
						||
fmt: ## Rust & Frontend format/lint
 | 
						||
	cd $(BACKEND) && cargo fmt --all
 | 
						||
	@cd $(FRONTEND) && npm run lint || true
 | 
						||
 | 
						||
.PHONY: clippy
 | 
						||
clippy: ## Rust Lint (clippy)
 | 
						||
	cd $(BACKEND) && cargo clippy -- -D warnings
 | 
						||
 | 
						||
.PHONY: test
 | 
						||
test: ## Rust Tests
 | 
						||
	cd $(BACKEND) && cargo test
 | 
						||
 | 
						||
## --- Frontend ----------------------------------------------------------
 | 
						||
.PHONY: dev-frontend
 | 
						||
dev-frontend: env-frontend ## Frontend Dev-Server starten (Next.js)
 | 
						||
	cd $(FRONTEND) && npm install && npm run dev
 | 
						||
 | 
						||
## --- Convenience --------------------------------------------------------
 | 
						||
.PHONY: dev
 | 
						||
dev: ## Hinweis: Backend & Frontend in separaten Terminals starten (dev-backend, dev-frontend)
 | 
						||
	@echo "Starte getrennt:"
 | 
						||
	@echo "  make dev-backend   # API auf http://localhost:8080"
 | 
						||
	@echo "  make dev-frontend  # UI  auf http://localhost:3000"
 | 
						||
 | 
						||
.PHONY: clean
 | 
						||
clean: ## Build-Artefakte entfernen
 | 
						||
	cargo clean || true
 | 
						||
	rm -rf $(FRONTEND)/.next $(FRONTEND)/node_modules || true
 | 
						||
	@echo "✔ Clean"
 |