#!/bin/bash # Development helper script for MyCrib API (Go) set -e COMPOSE_FILES="-f docker-compose.yml -f docker-compose.dev.yml" case "$1" in up) echo "๐Ÿš€ Starting development environment..." docker-compose $COMPOSE_FILES up ;; down) echo "โน๏ธ Stopping development environment..." docker-compose $COMPOSE_FILES down ;; logs) if [ -n "$2" ]; then docker-compose $COMPOSE_FILES logs -f "$2" else docker-compose $COMPOSE_FILES logs -f fi ;; restart) echo "๐Ÿ”„ Restarting development environment..." docker-compose $COMPOSE_FILES restart ;; build) echo "๐Ÿ”จ Rebuilding containers..." docker-compose $COMPOSE_FILES up --build ;; bash) echo "๐Ÿš Opening bash in API container..." docker-compose $COMPOSE_FILES exec api sh ;; test) echo "๐Ÿงช Running tests..." go test -v ./... ;; test-docker) echo "๐Ÿงช Running tests in Docker..." docker-compose $COMPOSE_FILES exec api go test -v ./... ;; lint) echo "๐Ÿ” Running linter..." golangci-lint run ./... ;; fmt) echo "๐Ÿ“ Formatting code..." go fmt ./... ;; build-local) echo "๐Ÿ”จ Building binaries locally..." go build -o bin/api ./cmd/api go build -o bin/worker ./cmd/worker go build -o bin/admin ./cmd/admin echo "โœ… Binaries built in ./bin/" ;; run-api) echo "๐Ÿš€ Running API server locally..." go run ./cmd/api ;; run-worker) echo "โš™๏ธ Running worker locally..." go run ./cmd/worker ;; run-admin) echo "๐Ÿ› ๏ธ Running admin panel locally..." go run ./cmd/admin ;; db) echo "๐Ÿ˜ Connecting to PostgreSQL..." docker-compose $COMPOSE_FILES exec db psql -U ${POSTGRES_USER:-mycrib} -d ${POSTGRES_DB:-mycrib} ;; redis) echo "๐Ÿ“ฎ Connecting to Redis..." docker-compose $COMPOSE_FILES exec redis redis-cli ;; seed) echo "๐ŸŒฑ Seeding lookup data..." docker-compose $COMPOSE_FILES exec -T db psql -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-mycrib} -f - < seeds/001_lookups.sql echo "โœ… Lookup data seeded" ;; seed-test) echo "๐Ÿงช Seeding test data..." docker-compose $COMPOSE_FILES exec -T db psql -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-mycrib} -f - < seeds/002_test_data.sql echo "โœ… Test data seeded" ;; seed-all) echo "๐ŸŒฑ Seeding all data..." docker-compose $COMPOSE_FILES exec -T db psql -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-mycrib} -f - < seeds/001_lookups.sql docker-compose $COMPOSE_FILES exec -T db psql -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-mycrib} -f - < seeds/002_test_data.sql echo "โœ… All data seeded" ;; seed-admin) echo "๐Ÿ” Seeding GoAdmin tables..." docker-compose $COMPOSE_FILES exec -T db psql -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-mycrib} -f - < migrations/002_goadmin_tables.up.sql echo "โœ… GoAdmin tables seeded" ;; migrate) echo "๐Ÿ“Š Running database migrations..." # GORM auto-migrates on API startup, but we need GoAdmin tables docker-compose $COMPOSE_FILES exec -T db psql -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-mycrib} -f - < migrations/002_goadmin_tables.up.sql echo "โœ… Migrations complete" ;; clean) echo "๐Ÿงน Cleaning up..." docker-compose $COMPOSE_FILES down -v rm -rf bin/ echo "โœ… Cleaned containers and binaries" ;; status) echo "๐Ÿ“Š Docker container status:" docker-compose $COMPOSE_FILES ps ;; *) # If no argument provided, default to 'up' if [ -z "$1" ]; then echo "๐Ÿš€ Starting development environment..." docker-compose $COMPOSE_FILES up else echo "Development helper script for MyCrib API (Go)" echo "" echo "Usage: ./dev.sh [command]" echo "" echo "Docker Commands:" echo " (no args) Start development environment (default)" echo " up Start development environment" echo " down Stop development environment" echo " logs [service] View logs (optionally for specific service)" echo " restart Restart all services" echo " build Rebuild and start containers" echo " bash Open shell in API container" echo " status Show container status" echo " clean Stop containers and remove volumes" echo "" echo "Local Development:" echo " build-local Build all binaries locally" echo " run-api Run API server locally" echo " run-worker Run worker locally" echo " run-admin Run admin panel locally" echo " test Run tests locally" echo " test-docker Run tests in Docker" echo " lint Run linter" echo " fmt Format code" echo "" echo "Database:" echo " db Connect to PostgreSQL" echo " redis Connect to Redis" echo " migrate Run database migrations" echo " seed Seed lookup data (categories, priorities, etc.)" echo " seed-test Seed test data (users, residences, tasks)" echo " seed-all Seed all data (lookups + test data)" echo " seed-admin Seed GoAdmin tables" echo "" echo "Services:" echo " api - API server (port 8000)" echo " worker - Background job worker" echo " admin - Admin panel (port 9000)" echo " db - PostgreSQL database" echo " redis - Redis cache" echo " gorush - Push notification server" echo "" echo "Examples:" echo " ./dev.sh # Start dev environment" echo " ./dev.sh up # Same as above" echo " ./dev.sh logs api # View API server logs" echo " ./dev.sh logs worker # View worker logs" echo " ./dev.sh build # Rebuild and start" echo " ./dev.sh run-api # Run API locally (without Docker)" echo " ./dev.sh test # Run tests" echo " ./dev.sh db # Connect to PostgreSQL" fi ;; esac