Files
roa2web-service-auto/start-test.sh
Marius Mutu c5e051ad80 feat: Migrate to ultrathin monolith architecture
Consolidate 3 separate applications (reports-app, data-entry-app, telegram-bot) into a unified
architecture with single backend and frontend:

Backend Changes:
- Unified FastAPI backend at backend/ with modular structure
- Modules: reports, data_entry, telegram in backend/modules/
- Centralized config.py and main.py with all routers registered
- Single worker mode (--workers 1) for Telegram bot compatibility
- Shared Oracle connection pool and JWT authentication
- Unified requirements.txt and environment configuration

Frontend Changes:
- Single Vue.js SPA with module-based routing
- Unified frontend at src/ with modules in src/modules/{reports,data-entry}/
- Shared components and stores in src/shared/
- Error boundaries for module isolation
- Dual API proxy in Vite for module communication

Infrastructure:
- New unified startup scripts: start-prod.sh, start-test.sh, start-backend.sh
- Environment templates: .env.dev.example, .env.test.example, .env.prod.example
- Updated deployment scripts for Windows IIS
- Simplified SSH tunnel management

Documentation:
- Comprehensive CLAUDE.md with architecture overview
- Module-specific docs in docs/{data-entry,telegram}/
- Architecture decision records in docs/ARCHITECTURE-DECISIONS.md
- Deployment guides consolidated in deployment/windows/docs/

This migration reduces complexity, improves maintainability, and enables easier
deployment while maintaining all existing functionality.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-29 23:48:14 +02:00

231 lines
6.6 KiB
Bash

#!/bin/bash
# ROA2WEB Ultrathin Monolith - TEST Starter Script
# Starts all services for the unified application:
# - Unified Backend (8000) - includes Reports, Data Entry, and Telegram
# - Unified Frontend (3000)
set -e # Exit on any error
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# Function to print colored messages
print_message() {
echo -e "${CYAN}[UNIFIED-TEST]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Function to check if port is in use
check_port() {
local port=$1
if lsof -Pi :$port -sTCP:LISTEN -t >/dev/null 2>&1; then
return 0
else
return 1
fi
}
# Function to cleanup processes on exit
cleanup() {
print_message "Stopping all services..."
# Stop Unified Backend (8000)
if check_port 8000; then
print_message "Stopping Unified Backend..."
lsof -ti:8000 | xargs kill -TERM 2>/dev/null || true
sleep 2
lsof -ti:8000 | xargs kill -KILL 2>/dev/null || true
fi
# Stop Unified Frontend (3000)
if check_port 3000; then
print_message "Stopping Unified Frontend..."
lsof -ti:3000 | xargs kill -TERM 2>/dev/null || true
sleep 1
lsof -ti:3000 | xargs kill -KILL 2>/dev/null || true
fi
# Stop SSH tunnel
if [ -f "./ssh-tunnel-test.sh" ]; then
print_message "Stopping SSH Tunnel..."
./ssh-tunnel-test.sh stop 2>/dev/null || true
fi
print_success "All services stopped."
exit 0
}
# Check command line arguments
if [ "$1" = "stop" ]; then
cleanup
fi
# Set up signal handlers
trap cleanup SIGINT SIGTERM
print_message "Starting ROA2WEB Ultrathin Monolith (TEST Environment)..."
echo
# Step 1: Start SSH Tunnel
print_message "1. Starting SSH Tunnel (TEST server)..."
if [ -f "./ssh-tunnel-test.sh" ]; then
if ./ssh-tunnel-test.sh start; then
print_success "SSH Tunnel started (TEST)"
else
print_warning "SSH tunnel may already be running or failed to start"
fi
else
print_warning "SSH tunnel script not found - skipping"
fi
sleep 2
# Step 2: Start Unified Backend (8000)
print_message "2. Starting Unified Backend on port 8000..."
if check_port 8000; then
print_warning "Port 8000 already in use - Unified Backend may be running"
else
cd backend/
# Create venv if doesn't exist
if [ ! -d "venv" ]; then
print_message "Creating Python virtual environment..."
python3 -m venv venv
fi
# Activate venv
source venv/bin/activate
# Install dependencies if needed
if ! python -c "import fastapi, uvicorn" 2>/dev/null; then
print_message "Installing dependencies (this may take 3-5 minutes for ML packages)..."
pip install -r requirements.txt
fi
# Check for TEST environment configuration
if [ ! -f ".env.test" ]; then
if [ -f ".env.test.example" ]; then
print_error ".env.test not found!"
print_warning "First-time setup required:"
echo " 1. Copy template: cp backend/.env.test.example backend/.env.test"
echo " 2. Fill in your TEST credentials in backend/.env.test"
echo " 3. Run ./start-test.sh again"
exit 1
else
print_error ".env.test and .env.test.example not found!"
print_warning "Please check your backend/ directory structure"
exit 1
fi
fi
# Copy TEST environment to active .env
print_message "Using TEST environment (.env.test)..."
cp .env.test .env
# Load environment
set -a
source .env
set +a
# Start backend (without reload for test stability)
print_message "Starting unified backend (includes Reports, Data Entry, and Telegram bot)..."
nohup uvicorn main:app --host 0.0.0.0 --port 8000 > /tmp/unified_backend_test.log 2>&1 &
cd - > /dev/null
# Wait for backend to start (Oracle pool + cache + Telegram bot initialization)
print_message "Waiting for Unified Backend to initialize (Oracle + Cache + DBs + Telegram)..."
MAX_WAIT=40
ELAPSED=0
while [ $ELAPSED -lt $MAX_WAIT ]; do
if check_port 8000; then
print_success "Unified Backend started on http://localhost:8000"
break
fi
sleep 1
ELAPSED=$((ELAPSED + 1))
if [ $((ELAPSED % 5)) -eq 0 ]; then
print_message "Still initializing... ($ELAPSED/${MAX_WAIT}s)"
fi
done
if ! check_port 8000; then
print_error "Unified Backend failed to start - check /tmp/unified_backend_test.log"
tail -n 30 /tmp/unified_backend_test.log
cleanup
fi
fi
# Step 3: Start Unified Frontend (port 3000)
print_message "3. Starting Unified Frontend (port 3000)..."
if check_port 3000; then
print_warning "Port 3000 already in use - Unified Frontend may be running"
else
# Check if node_modules exists
if [ ! -d "node_modules" ] || [ ! -f "node_modules/.bin/vite" ]; then
print_message "Installing Unified Frontend dependencies..."
npm install
fi
# Start frontend
print_message "Starting Vite development server..."
nohup npm run dev > /tmp/unified_frontend_test.log 2>&1 &
FRONTEND_PID=$!
# Wait for frontend to start
sleep 10
if check_port 3000; then
print_success "Unified Frontend started on http://localhost:3000"
else
print_error "Unified Frontend failed to start - check /tmp/unified_frontend_test.log"
cat /tmp/unified_frontend_test.log
cleanup
fi
fi
# Summary
echo
print_success "🚀 ROA2WEB Ultrathin Monolith (TEST) is now running!"
echo
echo -e "${BLUE}Services:${NC}"
echo " • SSH Tunnel: Active (Oracle TEST DB connection)"
echo " • Unified Backend: http://localhost:8000"
echo " • ├── Reports API: http://localhost:8000/api/reports/*"
echo " • ├── Data Entry: http://localhost:8000/api/data-entry/*"
echo " • ├── Telegram: http://localhost:8000/api/telegram/*"
echo " • └── Bot: Running as background task"
echo " • Unified Frontend: http://localhost:3000"
echo
echo -e "${BLUE}API Documentation:${NC}"
echo " • Unified API Docs: http://localhost:8000/docs"
echo " • Health Check: http://localhost:8000/health"
echo
echo -e "${BLUE}Log Files:${NC}"
echo " • Unified Backend: /tmp/unified_backend_test.log"
echo " • Unified Frontend: /tmp/unified_frontend_test.log"
echo
echo -e "${YELLOW}Press Ctrl+C to stop all services${NC}"
echo
# Keep script running
wait