Files
Laca-City/setup.sh
PhongPham c65cc97a33 🎯 MapView v2.0 - Global Deployment Ready
 MAJOR FEATURES:
• Auto-zoom intelligence với smart bounds fitting
• Enhanced 3D GPS markers với pulsing effects
• Professional route display với 6-layer rendering
• Status-based parking icons với availability indicators
• Production-ready build optimizations

🗺️ AUTO-ZOOM FEATURES:
• Smart bounds fitting cho GPS + selected parking
• Adaptive padding (50px) cho visual balance
• Max zoom control (level 16) để tránh quá gần
• Dynamic centering khi không có selection

🎨 ENHANCED VISUALS:
• 3D GPS marker với multi-layer pulse effects
• Advanced parking icons với status colors
• Selection highlighting với animation
• Dimming system cho non-selected items

🛣️ ROUTE SYSTEM:
• OpenRouteService API integration
• Multi-layer route rendering (glow, shadow, main, animated)
• Real-time distance & duration calculation
• Visual route info trong popup

📱 PRODUCTION READY:
• SSR safe với dynamic imports
• Build errors resolved
• Global deployment via Vercel
• Optimized performance

🌍 DEPLOYMENT:
• Vercel: https://whatever-ctk2auuxr-phong12hexdockworks-projects.vercel.app
• Bundle size: 22.8 kB optimized
• Global CDN distribution
• HTTPS enabled

💾 VERSION CONTROL:
• MapView-v2.0.tsx backup created
• MAPVIEW_VERSIONS.md documentation
• Full version history tracking
2025-07-20 19:52:16 +07:00

289 lines
8.2 KiB
Bash
Executable File

#!/bin/bash
# Smart Parking Finder - Development Setup Script
# This script sets up the complete development environment
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Function to print colored output
print_status() {
echo -e "${BLUE}[INFO]${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 command exists
command_exists() {
command -v "$1" >/dev/null 2>&1
}
# Check prerequisites
check_prerequisites() {
print_status "Checking prerequisites..."
local missing_deps=()
if ! command_exists docker; then
missing_deps+=("docker")
fi
if ! command_exists docker-compose; then
missing_deps+=("docker-compose")
fi
if ! command_exists node; then
missing_deps+=("node")
fi
if ! command_exists npm; then
missing_deps+=("npm")
fi
if [ ${#missing_deps[@]} -ne 0 ]; then
print_error "Missing required dependencies: ${missing_deps[*]}"
echo ""
echo "Please install the following:"
echo "- Docker: https://docs.docker.com/get-docker/"
echo "- Docker Compose: https://docs.docker.com/compose/install/"
echo "- Node.js 18+: https://nodejs.org/"
exit 1
fi
print_success "All prerequisites are installed!"
}
# Create directory structure
create_structure() {
print_status "Creating project structure..."
# Create main directories
mkdir -p {frontend,backend,valhalla/custom_files}
# Create subdirectories
mkdir -p frontend/{src,public,components,pages}
mkdir -p backend/{src,test,database}
print_success "Project structure created!"
}
# Download OSM data
download_osm_data() {
print_status "Setting up OSM data for Valhalla..."
if [ ! -f "valhalla/custom_files/vietnam-latest.osm.pbf" ]; then
read -p "Do you want to download Vietnam OSM data now? (y/N): " download_osm
if [[ $download_osm =~ ^[Yy]$ ]]; then
print_status "Downloading Vietnam OSM data (~100MB)..."
cd valhalla
./download-osm-data.sh
cd ..
else
print_warning "OSM data not downloaded. Valhalla may not work properly."
print_warning "You can download it later by running: cd valhalla && ./download-osm-data.sh"
fi
else
print_success "OSM data already exists!"
fi
}
# Setup environment files
setup_environment() {
print_status "Setting up environment files..."
# Frontend environment
if [ ! -f "frontend/.env.local" ]; then
cat > frontend/.env.local << EOF
# Frontend Environment Variables
NEXT_PUBLIC_API_URL=http://localhost:3001
NEXT_PUBLIC_MAP_TILES_URL=https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png
NEXT_PUBLIC_VALHALLA_URL=http://localhost:8002
NEXT_PUBLIC_DEFAULT_LAT=10.7769
NEXT_PUBLIC_DEFAULT_LNG=106.7009
EOF
print_success "Created frontend/.env.local"
fi
# Backend environment
if [ ! -f "backend/.env" ]; then
cat > backend/.env << EOF
# Backend Environment Variables
NODE_ENV=development
PORT=3001
DATABASE_URL=postgresql://parking_user:parking_pass@localhost:5432/parking_db
REDIS_URL=redis://localhost:6379
VALHALLA_URL=http://localhost:8002
JWT_SECRET=your-development-jwt-secret-$(date +%s)
JWT_EXPIRATION=24h
CORS_ORIGIN=http://localhost:3000
API_PREFIX=api
EOF
print_success "Created backend/.env"
fi
}
# Setup Docker services
setup_docker() {
print_status "Setting up Docker services..."
# Check if Docker is running
if ! docker info >/dev/null 2>&1; then
print_error "Docker is not running. Please start Docker first."
exit 1
fi
# Pull images
print_status "Pulling Docker images..."
docker-compose pull postgres redis
# Start infrastructure services
print_status "Starting infrastructure services..."
docker-compose up -d postgres redis
# Wait for services to be ready
print_status "Waiting for services to be ready..."
sleep 10
# Check if services are healthy
if docker-compose ps postgres | grep -q "healthy\|Up"; then
print_success "PostgreSQL is ready!"
else
print_warning "PostgreSQL may still be starting..."
fi
if docker-compose ps redis | grep -q "healthy\|Up"; then
print_success "Redis is ready!"
else
print_warning "Redis may still be starting..."
fi
}
# Setup Valhalla
setup_valhalla() {
print_status "Setting up Valhalla routing engine..."
if [ ! -f "valhalla/custom_files/vietnam-latest.osm.pbf" ]; then
print_warning "No OSM data found. Skipping Valhalla setup."
print_warning "Download OSM data first: cd valhalla && ./download-osm-data.sh"
return
fi
print_status "Building and starting Valhalla (this may take 10-30 minutes)..."
docker-compose up -d valhalla
print_status "Valhalla is processing OSM data. This may take a while..."
print_status "You can check progress with: docker-compose logs -f valhalla"
}
# Install dependencies
install_dependencies() {
print_status "Installing Node.js dependencies..."
# Frontend dependencies
if [ -f "frontend/package.json" ]; then
print_status "Installing frontend dependencies..."
cd frontend && npm install && cd ..
print_success "Frontend dependencies installed!"
else
print_warning "No frontend/package.json found. Skipping frontend dependencies."
fi
# Backend dependencies
if [ -f "backend/package.json" ]; then
print_status "Installing backend dependencies..."
cd backend && npm install && cd ..
print_success "Backend dependencies installed!"
else
print_warning "No backend/package.json found. Skipping backend dependencies."
fi
}
# Setup database
setup_database() {
print_status "Setting up database..."
# Wait for PostgreSQL to be ready
print_status "Waiting for PostgreSQL to be ready..."
timeout=60
while ! docker-compose exec -T postgres pg_isready -U parking_user -d parking_db >/dev/null 2>&1; do
if [ $timeout -le 0 ]; then
print_error "PostgreSQL is not ready after 60 seconds"
exit 1
fi
sleep 1
((timeout--))
done
print_success "PostgreSQL is ready!"
# Run migrations (if backend exists)
if [ -f "backend/package.json" ]; then
print_status "Running database migrations..."
cd backend
# npm run migration:run # Uncomment when migrations exist
cd ..
print_success "Database migrations completed!"
fi
}
# Main setup function
main() {
echo ""
echo "🚗 Smart Parking Finder - Development Setup"
echo "==========================================="
echo ""
check_prerequisites
create_structure
setup_environment
download_osm_data
setup_docker
install_dependencies
setup_database
setup_valhalla
echo ""
echo "🎉 Setup completed successfully!"
echo ""
echo "Next steps:"
echo "1. Start the development servers:"
echo " - Frontend: cd frontend && npm run dev"
echo " - Backend: cd backend && npm run start:dev"
echo ""
echo "2. Access the applications:"
echo " - Frontend: http://localhost:3000"
echo " - Backend API: http://localhost:3001"
echo " - Database (pgAdmin): http://localhost:5050 (with --profile tools)"
echo " - Redis (Commander): http://localhost:8081 (with --profile tools)"
echo " - Valhalla: http://localhost:8002/status"
echo ""
echo "3. Useful commands:"
echo " - View logs: docker-compose logs -f [service]"
echo " - Stop services: docker-compose down"
echo " - Restart services: docker-compose restart [service]"
echo " - Start with tools: docker-compose --profile tools up -d"
echo ""
echo "💡 If Valhalla is still processing data, wait for it to complete"
echo " Check status: curl http://localhost:8002/status"
}
# Run main function
main "$@"