# ============================================================ # ๐Ÿง  MAKEFILE โ€” DEV ENVIRONMENT (SSO-MBUGROUP) # ============================================================ # --- Load environment --- ifneq (,$(wildcard .env.dev)) include .env.dev export endif # --- Configuration --- COMPOSE ?= docker compose -f docker-compose.dev.yaml NETWORK ?= lti-api_lti-network APP_CONTAINER ?= dev-api-sso DB_CONTAINER ?= dev-postgres-sso REDIS_CONTAINER?= dev-redis-sso MIGRATE_IMAGE ?= migrate/migrate:v4.15.2 MIGRATIONS_DIR := $(PWD)/internal/database/migrations DB_USER ?= postgres DB_PASSWORD ?= Postgres@Secure2025! DB_NAME ?= db_lti_erp DB_PORT ?= 5432 DB_HOST ?= dev-postgres-lti DB_URL := postgres://$(DB_USER):$(DB_PASSWORD)@$(DB_HOST):$(DB_PORT)/$(DB_NAME)?sslmode=disable # ============================================================ # ๐Ÿงฑ DATABASE MIGRATION COMMANDS # ============================================================ migrate-up: @echo "๐Ÿงฑ Running database migrations..." @docker run --rm \ --network $(NETWORK) \ -v $(MIGRATIONS_DIR):/migrations \ $(MIGRATE_IMAGE) \ -path=/migrations/ -database "$(DB_URL)" up migrate-down: @echo "โฌ‡๏ธ Rolling back last migration..." @docker run --rm \ --network $(NETWORK) \ -v $(MIGRATIONS_DIR):/migrations \ $(MIGRATE_IMAGE) \ -path=/migrations/ -database "$(DB_URL)" down 1 migrate-fresh: @echo "๐Ÿงฑ Rebuilding database from scratch..." @echo "๐Ÿ”น Terminating active connections..." @docker exec -i $(DB_CONTAINER) psql -U $(DB_USER) -d postgres -c \ "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='$(DB_NAME)' AND pid <> pg_backend_pid();" || true @echo "๐Ÿ”น Dropping and recreating database..." @docker exec -i $(DB_CONTAINER) psql -U $(DB_USER) -d postgres -c "DROP DATABASE IF EXISTS $(DB_NAME);" || true @docker exec -i $(DB_CONTAINER) psql -U $(DB_USER) -d postgres -c "CREATE DATABASE $(DB_NAME);" || true @sleep 3 @make -f Makefile.dev migrate-up @make -f Makefile.dev seed @echo "โœ… Fresh migration complete!" # ========================================== # ๐Ÿงน FIX DIRTY MIGRATION / FORCE VERSION # ========================================== # Pakai: make migrate-force v=20250825071938 migrate-force: @if [ -z "$(v)" ]; then \ echo "โŒ Error: versi migrasi belum ditentukan!"; \ echo "Gunakan contoh: make migrate-force v=20250825071938"; \ exit 1; \ fi; \ echo "โš™๏ธ Forcing migration version $(v)..."; \ docker run --rm \ -v $(PWD)/internal/database/migrations:/migrations \ --network $(NETWORK) \ $(MIGRATE_IMAGE) \ -path=/migrations/ -database "$(DB_URL)" force $(v); \ echo "โœ… Migration forced to version $(v)" migrate-super: @echo "๐Ÿš€ Running migration as superuser..." @docker cp internal/database/migrations/superuser_migrations.sql $(DB_CONTAINER):/tmp/superuser_migrations.sql @docker exec -it $(DB_CONTAINER) psql -U $(DB_USER) -d $(DB_NAME) -f /tmp/superuser_migrations.sql @echo "โœ… Superuser migrations complete!" # ============================================================ # ๐ŸŒฑ SEEDER # ============================================================ seed: @echo "๐ŸŒฑ Running Go-based seeder..." @docker run --rm \ --network $(NETWORK) \ --env-file .env.dev \ -v $(PWD):/app \ -w /app \ golang:1.23-alpine \ sh -c "apk add --no-cache git && go run cmd/seed/main.go" @echo "โœ… Seeder completed successfully!" # ============================================================ # ๐Ÿณ DOCKER MANAGEMENT # ============================================================ up: @echo "๐Ÿš€ Starting all containers..." @$(COMPOSE) up -d down: @echo "๐Ÿงน Stopping all containers..." @$(COMPOSE) down --remove-orphans restart: @echo "โ™ป๏ธ Restarting application container..." @docker restart $(APP_CONTAINER) ps: @$(COMPOSE) ps logs: @docker logs -f $(APP_CONTAINER) psql: @docker exec -it $(DB_CONTAINER) psql -U $(DB_USER) -d $(DB_NAME) # ============================================================ # โš™๏ธ UTILITIES # ============================================================ fix-db: @echo "๐Ÿ”ง Checking if database exists..." @docker exec -i $(DB_CONTAINER) psql -U $(DB_USER) -tc "SELECT 1 FROM pg_database WHERE datname='$(DB_NAME)';" | grep -q 1 \ && echo "โœ… Database exists: $(DB_NAME)" \ || (echo "โš ๏ธ Creating database..." && docker exec -i $(DB_CONTAINER) psql -U $(DB_USER) -c "CREATE DATABASE $(DB_NAME);") clean: @echo "๐Ÿงน Removing dangling images and cache..." @docker builder prune -f