.PHONY: dev-init dev-api dev-worker-generate dev-scheduler migrate-up migrate-down migrate-monitoring-up migrate-monitoring-down migrate-create sqlc-generate tenant-scope-guard lint test tidy seed DB_URL ?= postgres://geo:geo_dev@localhost:5432/geo?sslmode=disable MONITORING_DB_URL ?= postgres://geo:geo_dev@localhost:5433/geo_monitoring?sslmode=disable MIGRATE_CMD ?= go run -tags postgres github.com/golang-migrate/migrate/v4/cmd/migrate@v4.19.1 dev-init: ## Start infra, run migrations, seed data docker compose up -d @echo "Waiting for postgres..." @sleep 3 $(MAKE) migrate-up $(MAKE) migrate-monitoring-up $(MAKE) seed dev-api: ## Run tenant-api server go run ./cmd/tenant-api dev-worker-generate: ## Run article generation worker go run ./cmd/worker-generate dev-scheduler: ## Run scheduler workers go run ./cmd/scheduler migrate-up: ## Run all pending migrations $(MIGRATE_CMD) -path migrations -database "$(DB_URL)" up migrate-down: ## Rollback last migration $(MIGRATE_CMD) -path migrations -database "$(DB_URL)" down 1 migrate-monitoring-up: ## Run all pending monitoring migrations $(MIGRATE_CMD) -path migrations_monitoring -database "$(MONITORING_DB_URL)" up migrate-monitoring-down: ## Rollback last monitoring migration $(MIGRATE_CMD) -path migrations_monitoring -database "$(MONITORING_DB_URL)" down 1 migrate-create: ## Create new migration (usage: make migrate-create NAME=xxx) $(MIGRATE_CMD) create -ext sql -dir migrations -seq $(NAME) sqlc-generate: ## Generate typed Go code from SQL queries cd internal/tenant/repository && sqlc generate tenant-scope-guard: ## Ensure tenant-scoped SQL includes tenant_id filters bash scripts/check_tenant_scope.sh seed: ## Insert development seed data go run ./cmd/dev-seed lint: ## Run linter golangci-lint run ./... test: ## Run all tests go test ./... -count=1 tidy: ## Tidy go modules go mod tidy