Files
bacchus/Makefile
2025-08-28 14:24:06 +00:00

124 lines
5.1 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ========= 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"