#!/bin/bash # Development helper script for HoneyDue 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 echo "๐Ÿ”จ Building admin panel..." cd admin && npm run build && cd .. echo "โœ… Binaries built in ./bin/, admin panel built in ./admin/.next/standalone/" ;; run-api) echo "๐Ÿš€ Running API server locally..." go run ./cmd/api ;; run-worker) echo "โš™๏ธ Running worker locally..." go run ./cmd/worker ;; db) echo "๐Ÿ˜ Connecting to PostgreSQL..." docker-compose $COMPOSE_FILES exec db psql -U ${POSTGRES_USER:-honeydue} -d ${POSTGRES_DB:-honeydue} ;; 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:-honeydue} -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:-honeydue} -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:-honeydue} -f - < seeds/001_lookups.sql docker-compose $COMPOSE_FILES exec -T db psql -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-honeydue} -f - < seeds/002_test_data.sql echo "โœ… All data seeded" ;; seed-admin) echo "๐Ÿ” Seeding admin user..." docker-compose $COMPOSE_FILES exec -T db psql -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-honeydue} -f - < seeds/003_admin_user.sql echo "โœ… Admin user seeded" ;; admin-install) echo "๐Ÿ“ฆ Installing admin panel dependencies..." cd admin && npm install echo "โœ… Admin panel dependencies installed" ;; admin-dev) echo "๐Ÿš€ Starting admin panel in development mode..." cd admin && npm run dev ;; admin-build) echo "๐Ÿ”จ Building admin panel..." cd admin && npm run build echo "โœ… Admin panel built (standalone mode)" ;; admin-logs) echo "๐Ÿ“‹ Viewing admin panel logs..." docker-compose $COMPOSE_FILES logs -f admin ;; 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:-honeydue} -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 HoneyDue 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 Go binaries + admin panel locally" echo " run-api Run API server locally (port 8000)" echo " run-worker Run worker 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 admin user" echo "" echo "Admin Panel:" echo " admin-install Install admin panel npm dependencies" echo " admin-dev Start admin panel dev server (port 3000)" echo " admin-build Build admin panel for production" echo " admin-logs View admin panel container logs" echo "" echo "Services:" echo " api - API server (port 8000)" echo " admin - Admin panel (port 3000)" echo " worker - Background job worker" echo " db - PostgreSQL database" echo " redis - Redis cache" 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