rwadurian/backend/services/presence-service/scripts/start-all.sh

125 lines
3.7 KiB
Bash

#!/bin/bash
# =============================================================================
# Presence Service - Start All Services Script
# =============================================================================
# One-command startup for all required services (development mode).
# =============================================================================
set -e
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
BLUE='\033[0;34m'
NC='\033[0m'
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
echo -e "${YELLOW}🚀 Starting Presence Service and dependencies...${NC}"
echo ""
# Change to project directory
cd "$PROJECT_DIR"
# 1. Start infrastructure via Docker Compose
echo -e "${YELLOW}=== Starting Infrastructure ===${NC}"
if command -v docker &> /dev/null; then
echo "Starting Docker containers..."
docker compose -f docker-compose.dev.yml up -d
# Wait for containers to be healthy
echo "Waiting for services to be ready..."
sleep 5
# Check PostgreSQL
echo -n "Waiting for PostgreSQL..."
for i in {1..30}; do
if docker exec presence-postgres-dev pg_isready -U postgres > /dev/null 2>&1; then
echo -e " ${GREEN}✓ Ready${NC}"
break
fi
echo -n "."
sleep 1
done
# Check Redis
echo -n "Waiting for Redis..."
for i in {1..30}; do
if docker exec presence-redis-dev redis-cli ping > /dev/null 2>&1; then
echo -e " ${GREEN}✓ Ready${NC}"
break
fi
echo -n "."
sleep 1
done
# Check Kafka (takes longer)
echo -n "Waiting for Kafka..."
for i in {1..60}; do
if nc -zv localhost 9092 > /dev/null 2>&1; then
echo -e " ${GREEN}✓ Ready${NC}"
break
fi
echo -n "."
sleep 1
done
else
echo -e "${RED}✗ Docker not found. Please install Docker first.${NC}"
exit 1
fi
echo ""
# 2. Initialize database
echo -e "${YELLOW}=== Initializing Database ===${NC}"
if [ -f "prisma/schema.prisma" ]; then
echo "Running Prisma db push..."
npx prisma db push --skip-generate 2>/dev/null || true
echo -e "${GREEN}✓ Database initialized${NC}"
else
echo -e "${YELLOW}⚠ No Prisma schema found, skipping database init${NC}"
fi
echo ""
# 3. Start Presence Service
echo -e "${YELLOW}=== Starting Presence Service ===${NC}"
echo "Starting NestJS in development mode..."
npm run start:dev &
SERVICE_PID=$!
# Wait for service to start
echo "Waiting for service to be ready (up to 30 seconds)..."
for i in {1..30}; do
if curl -sf http://localhost:3011/api/v1/health > /dev/null 2>&1; then
echo -e "${GREEN}✓ Presence Service is running!${NC}"
break
fi
if [ $i -eq 30 ]; then
echo -e "${YELLOW}⚠ Service may still be starting...${NC}"
fi
sleep 1
echo -n "."
done
echo ""
echo -e "${YELLOW}======================================${NC}"
echo -e "${GREEN}✓ All services started!${NC}"
echo -e "${YELLOW}======================================${NC}"
echo ""
echo -e "${BLUE}Service endpoints:${NC}"
echo " • Presence Service: http://localhost:3011"
echo " • Health Check: http://localhost:3011/api/v1/health"
echo " • API Docs: http://localhost:3011/api/docs"
echo ""
echo -e "${BLUE}Next steps:${NC}"
echo " • Run health check: ./scripts/health-check.sh"
echo " • Run tests: npm test"
echo " • View logs: (in current terminal)"
echo ""
echo -e "${BLUE}To stop:${NC}"
echo " • Stop service: ./scripts/stop-service.sh"
echo " • Stop all: docker compose -f docker-compose.dev.yml down"
echo ""