#!/bin/bash # ============================================================================= # Blockchain Service - Individual Deployment Script # ============================================================================= set -e SERVICE_NAME="blockchain-service" CONTAINER_NAME="rwa-blockchain-service" IMAGE_NAME="services-blockchain-service" PORT=3012 # Colors RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' log_info() { echo -e "${BLUE}[INFO]${NC} $1"; } log_success() { echo -e "${GREEN}[OK]${NC} $1"; } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } log_error() { echo -e "${RED}[ERROR]${NC} $1"; } # Get script directory SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SERVICES_DIR="$(dirname "$SCRIPT_DIR")" # Load environment if [ -f "$SERVICES_DIR/.env" ]; then export $(cat "$SERVICES_DIR/.env" | grep -v '^#' | xargs) fi case "$1" in build) log_info "Building $SERVICE_NAME..." docker build -t "$IMAGE_NAME" "$SCRIPT_DIR" log_success "$SERVICE_NAME built successfully" ;; build-no-cache) log_info "Building $SERVICE_NAME (no cache)..." docker build --no-cache -t "$IMAGE_NAME" "$SCRIPT_DIR" log_success "$SERVICE_NAME built successfully" ;; start) log_info "Starting $SERVICE_NAME..." cd "$SERVICES_DIR" docker compose up -d "$SERVICE_NAME" log_success "$SERVICE_NAME started" ;; stop) log_info "Stopping $SERVICE_NAME..." docker stop "$CONTAINER_NAME" 2>/dev/null || true docker rm "$CONTAINER_NAME" 2>/dev/null || true log_success "$SERVICE_NAME stopped" ;; restart) $0 stop $0 start ;; logs) docker logs -f "$CONTAINER_NAME" ;; logs-tail) docker logs --tail 100 "$CONTAINER_NAME" ;; status) if docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then log_success "$SERVICE_NAME is running" docker ps --filter "name=$CONTAINER_NAME" --format "table {{.Status}}\t{{.Ports}}" else log_warn "$SERVICE_NAME is not running" fi ;; health) log_info "Checking health of $SERVICE_NAME..." if curl -sf "http://localhost:$PORT/health" > /dev/null 2>&1; then log_success "$SERVICE_NAME is healthy" else log_error "$SERVICE_NAME health check failed" exit 1 fi ;; migrate) log_info "Running migrations for $SERVICE_NAME..." docker exec "$CONTAINER_NAME" npx prisma migrate deploy log_success "Migrations completed" ;; migrate-dev) log_info "Running dev migrations for $SERVICE_NAME..." docker exec "$CONTAINER_NAME" npx prisma migrate dev ;; prisma-studio) log_info "Starting Prisma Studio..." docker exec -it "$CONTAINER_NAME" npx prisma studio ;; shell) log_info "Opening shell in $SERVICE_NAME container..." docker exec -it "$CONTAINER_NAME" sh ;; test) log_info "Running tests for $SERVICE_NAME..." cd "$SCRIPT_DIR" npm test ;; scan-blocks) log_info "Manually triggering block scan..." curl -X POST "http://localhost:$PORT/internal/scan-blocks" \ -H "Content-Type: application/json" ;; check-balance) if [ -z "$2" ] || [ -z "$3" ]; then log_error "Usage: $0 check-balance
" log_info "Example: $0 check-balance KAVA 0x1234..." exit 1 fi log_info "Checking balance on $2 for $3..." curl -s "http://localhost:$PORT/balance?chainType=$2&address=$3" | jq '.' ;; *) echo "Usage: $0 {build|build-no-cache|start|stop|restart|logs|logs-tail|status|health|migrate|migrate-dev|prisma-studio|shell|test|scan-blocks|check-balance}" echo "" echo "Commands:" echo " build - Build Docker image" echo " build-no-cache - Build Docker image without cache" echo " start - Start the service" echo " stop - Stop the service" echo " restart - Restart the service" echo " logs - Follow logs" echo " logs-tail - Show last 100 log lines" echo " status - Show service status" echo " health - Check service health" echo " migrate - Run database migrations" echo " migrate-dev - Run dev migrations" echo " prisma-studio - Open Prisma Studio" echo " shell - Open shell in container" echo " test - Run tests locally" echo " scan-blocks - Manually trigger block scanning" echo " check-balance - Check address balance (usage: check-balance
)" exit 1 ;; esac