#!/bin/bash # Enhanced Tilbudgivern Deployment Script # This script sets up the enhanced features for the tilbudgivern system echo "🚀 Starting Enhanced Tilbudgivern Deployment..." # 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" } # Check if we're in the right directory if [ ! -f "package.json" ] || [ ! -d "backend" ] || [ ! -d "frontend" ]; then print_error "This script must be run from the tilbudgivern root directory" exit 1 fi print_status "Deploying Enhanced Tilbudgivern Features" echo "========================================" # 1. Install any new dependencies print_status "Checking and installing dependencies..." # Backend dependencies if [ -d "backend" ]; then cd backend print_status "Installing backend dependencies..." npm install if [ $? -eq 0 ]; then print_success "Backend dependencies installed" else print_error "Failed to install backend dependencies" exit 1 fi cd .. fi # Frontend dependencies if [ -d "frontend" ]; then cd frontend print_status "Installing frontend dependencies..." npm install if [ $? -eq 0 ]; then print_success "Frontend dependencies installed" else print_error "Failed to install frontend dependencies" exit 1 fi cd .. fi # 2. Database Schema Updates print_status "Updating database schema for enhanced features..." # Check if MySQL/MariaDB is running if ! command -v mysql &> /dev/null; then print_error "MySQL/MariaDB client not found. Please install it first." exit 1 fi # Load database configuration if [ -f ".env" ]; then source .env else print_warning ".env file not found, using default database settings" export DB_HOST=${DB_HOST:-localhost} export DB_USER=${DB_USER:-tilbuduser} export DB_PASSWORD=${DB_PASSWORD:-tilbudpass123} export DB_NAME=${DB_NAME:-tilbudgivern} export DB_PORT=${DB_PORT:-3306} fi print_status "Database: $DB_NAME on $DB_HOST:$DB_PORT" # Test database connection mysql -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASSWORD" -e "USE $DB_NAME;" 2>/dev/null if [ $? -eq 0 ]; then print_success "Database connection successful" else print_error "Cannot connect to database. Please check your database configuration." print_status "You may need to:" print_status "1. Start your database server" print_status "2. Check your .env file database settings" print_status "3. Ensure the database and user exist" exit 1 fi # Apply database schema updates print_status "Applying enhanced features schema updates..." mysql -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" < setup_enhanced_features.sql if [ $? -eq 0 ]; then print_success "Database schema updated successfully" else print_error "Failed to update database schema" exit 1 fi # 3. Build Frontend if needed print_status "Building frontend for production..." cd frontend npm run build if [ $? -eq 0 ]; then print_success "Frontend built successfully" else print_error "Failed to build frontend" exit 1 fi cd .. # 4. Copy build to main build directory if [ -d "frontend/build" ]; then print_status "Copying frontend build to main build directory..." cp -r frontend/build/* build/ 2>/dev/null || mkdir -p build && cp -r frontend/build/* build/ print_success "Frontend build copied" fi # 5. Verify enhanced services are accessible print_status "Verifying enhanced services..." # Check if enhanced services files exist services_check=true if [ ! -f "backend/src/services/packageService.js" ]; then print_error "Package service not found" services_check=false fi if [ ! -f "backend/src/services/advancedGeometryService.js" ]; then print_error "Advanced geometry service not found" services_check=false fi if [ ! -f "backend/src/services/timeCalculatorService.js" ]; then print_error "Time calculator service not found" services_check=false fi if [ ! -f "backend/src/routes/enhancedFeatures.js" ]; then print_error "Enhanced features routes not found" services_check=false fi if [ ! -f "frontend/src/components/EnhancedTilbudgivern.js" ]; then print_error "Enhanced frontend component not found" services_check=false fi if [ "$services_check" = true ]; then print_success "All enhanced service files found" else print_error "Some enhanced service files are missing" exit 1 fi # 6. Test basic functionality print_status "Testing enhanced features integration..." # Start the server in background for testing print_status "Starting server for integration test..." timeout 10s node unified-server.js & server_pid=$! sleep 5 # Test if server started if ps -p $server_pid > /dev/null 2>&1; then print_success "Server started successfully" # Test enhanced API endpoint if command -v curl &> /dev/null; then curl -s "http://localhost:4031/api/enhanced/packages/Betontegl" > /dev/null if [ $? -eq 0 ]; then print_success "Enhanced API endpoints accessible" else print_warning "Enhanced API endpoints may need manual verification" fi fi # Clean up test server kill $server_pid 2>/dev/null else print_warning "Server test skipped - may need manual verification" fi # 7. Final verification and summary print_status "Running final verification..." echo "" echo "========================================" print_success "Enhanced Tilbudgivern Deployment Complete!" echo "========================================" echo "" print_status "🎯 Enhanced Features Deployed:" echo " ✅ Package Management System" echo " ✅ Advanced Geometry Calculations" echo " ✅ Team-Scaled Time Calculator" echo " ✅ Integrated API Routes" echo " ✅ Enhanced Frontend Components" echo " ✅ Database Schema Updates" echo "" print_status "🚀 Next Steps:" echo " 1. Start the server: npm start or node unified-server.js" echo " 2. Access the enhanced interface at: http://localhost:4031" echo " 3. Test the new features in the interface" echo " 4. Check logs for any issues: tail -f backend/combined.log" echo "" print_status "📁 Key Files Updated:" echo " • Database: setup_enhanced_features.sql applied" echo " • Backend: Enhanced services and API routes added" echo " • Frontend: EnhancedTilbudgivern component available" echo " • Server: unified-server.js updated with new routes" echo "" print_status "🔧 Configuration:" echo " • Database: $DB_NAME on $DB_HOST:$DB_PORT" echo " • Server Port: ${PORT:-4031}" echo " • Environment: ${NODE_ENV:-development}" echo "" # Check if PM2 is available for production deployment if command -v pm2 &> /dev/null; then print_status "💡 Production Tip:" echo " Use PM2 for production deployment:" echo " pm2 start ecosystem.config.json" else print_status "💡 Production Tip:" echo " Consider installing PM2 for production deployment:" echo " npm install -g pm2" fi print_success "Deployment completed successfully! 🎉" echo "" print_status "Testing the enhanced features now..." echo "Open your browser and navigate to: http://localhost:4031" echo ""