courseworx/start-courseworx.ps1
mmabdalla 5477297914 v2.0.2 - Complete Plugin Architecture System and Multi-Currency Implementation
Major Features Added:
- Complete Plugin Architecture System with financial plugin
- Multi-currency support with exchange rates
- Course type system (online, classroom, hybrid)
- Attendance tracking and QR code scanning
- Classroom sessions management
- Course sections and content management
- Professional video player with authentication
- Secure media serving system
- Shopping cart and checkout system
- Financial dashboard and earnings tracking
- Trainee progress tracking
- User notes and assignments system

Backend Infrastructure:
- Plugin loader and registry system
- Multi-currency database models
- Secure media middleware
- Course access middleware
- Financial plugin with payment processing
- Database migrations for new features
- API endpoints for all new functionality

Frontend Components:
- Course management interface
- Content creation and editing
- Section management with drag-and-drop
- Professional video player
- QR scanner for attendance
- Shopping cart and checkout flow
- Financial dashboard
- Plugin management interface
- Trainee details and progress views

This represents a major evolution of CourseWorx from a basic LMS to a comprehensive educational platform with plugin architecture.
2025-09-14 04:20:37 +03:00

176 lines
6.2 KiB
PowerShell

# CourseWorx Start Script
Write-Host "Starting CourseWorx..." -ForegroundColor Green
# Function to check if a port is in use
function Test-PortInUse {
param([int]$Port)
try {
$connections = Get-NetTCPConnection -LocalPort $Port -ErrorAction SilentlyContinue
# Only consider ports in use if they have actual application processes (PID > 4)
$activeConnections = $connections | Where-Object { $_.OwningProcess -gt 4 }
return $activeConnections -ne $null
}
catch {
return $false
}
}
# Function to kill processes using specific ports
function Kill-ProcessesOnPort {
param([int]$Port)
try {
$connections = Get-NetTCPConnection -LocalPort $Port -ErrorAction SilentlyContinue
if ($connections) {
foreach ($connection in $connections) {
# Only kill non-system processes (PID > 4)
if ($connection.OwningProcess -gt 4) {
$process = Get-Process -Id $connection.OwningProcess -ErrorAction SilentlyContinue
if ($process) {
Write-Host "Killing process $($process.ProcessName) (PID: $($process.Id)) using port $Port" -ForegroundColor Yellow
Stop-Process -Id $process.Id -Force -ErrorAction SilentlyContinue
}
}
}
Start-Sleep -Seconds 2
}
}
catch {
Write-Host "Warning: Could not kill processes on port $Port" -ForegroundColor Yellow
}
}
# Function to kill all Node.js processes
function Kill-AllNodeProcesses {
try {
$nodeProcesses = Get-Process -Name "node" -ErrorAction SilentlyContinue
if ($nodeProcesses) {
Write-Host "Found $($nodeProcesses.Count) Node.js processes running. Killing them..." -ForegroundColor Yellow
foreach ($process in $nodeProcesses) {
Write-Host "Killing Node.js process (PID: $($process.Id))" -ForegroundColor Yellow
Stop-Process -Id $process.Id -Force -ErrorAction SilentlyContinue
}
Start-Sleep -Seconds 3
} else {
Write-Host "No Node.js processes found running." -ForegroundColor Green
}
}
catch {
Write-Host "Warning: Could not kill Node.js processes" -ForegroundColor Yellow
}
}
# Function to wait for port to be free
function Wait-ForPortFree {
param([int]$Port, [int]$TimeoutSeconds = 30)
$startTime = Get-Date
while ((Get-Date) -lt $startTime.AddSeconds($TimeoutSeconds)) {
if (-not (Test-PortInUse -Port $Port)) {
Write-Host "Port $Port is now free." -ForegroundColor Green
return $true
}
Write-Host "Waiting for port $Port to be free..." -ForegroundColor Yellow
Start-Sleep -Seconds 2
}
Write-Host "Timeout waiting for port $Port to be free." -ForegroundColor Red
return $false
}
# Check if Node.js is installed
$nodeVersion = node --version
if ($LASTEXITCODE -ne 0) {
Write-Host "ERROR: Node.js is not installed or not in PATH" -ForegroundColor Red
Read-Host "Press Enter to exit"
exit 1
}
Write-Host "Node.js version: $nodeVersion" -ForegroundColor Green
# Check if npm is installed
$npmVersion = npm --version
if ($LASTEXITCODE -ne 0) {
Write-Host "ERROR: npm is not installed or not in PATH" -ForegroundColor Red
Read-Host "Press Enter to exit"
exit 1
}
Write-Host "npm version: $npmVersion" -ForegroundColor Green
# Check for existing processes and ports
Write-Host "Checking for existing processes and ports..." -ForegroundColor Cyan
# Check if ports 3000 and 5000 are in use
$port3000InUse = Test-PortInUse -Port 3000
$port5000InUse = Test-PortInUse -Port 5000
if ($port3000InUse -or $port5000InUse) {
Write-Host "Ports 3000 and/or 5000 are in use. Cleaning up..." -ForegroundColor Yellow
if ($port3000InUse) {
Write-Host "Port 3000 is in use. Killing processes..." -ForegroundColor Yellow
Kill-ProcessesOnPort -Port 3000
}
if ($port5000InUse) {
Write-Host "Port 5000 is in use. Killing processes..." -ForegroundColor Yellow
Kill-ProcessesOnPort -Port 5000
}
# Kill all Node.js processes to ensure clean state
Kill-AllNodeProcesses
# Wait for ports to be free
Write-Host "Waiting for ports to be free..." -ForegroundColor Cyan
$port3000Free = Wait-ForPortFree -Port 3000
$port5000Free = Wait-ForPortFree -Port 5000
if (-not $port3000Free -or -not $port5000Free) {
Write-Host "ERROR: Could not free up required ports. Please check manually." -ForegroundColor Red
Read-Host "Press Enter to exit"
exit 1
}
} else {
Write-Host "Ports 3000 and 5000 are free." -ForegroundColor Green
}
# Check if dependencies are installed
if (-not (Test-Path "node_modules")) {
Write-Host "Installing root dependencies..." -ForegroundColor Yellow
npm install
}
if (-not (Test-Path "backend\node_modules")) {
Write-Host "Installing backend dependencies..." -ForegroundColor Yellow
Set-Location backend
npm install
Set-Location ..
}
if (-not (Test-Path "frontend\node_modules")) {
Write-Host "Installing frontend dependencies..." -ForegroundColor Yellow
Set-Location frontend
npm install
Set-Location ..
}
# Final port check before starting
Write-Host "Final port availability check..." -ForegroundColor Cyan
if (Test-PortInUse -Port 3000) {
Write-Host "ERROR: Port 3000 is still in use after cleanup!" -ForegroundColor Red
Read-Host "Press Enter to exit"
exit 1
}
if (Test-PortInUse -Port 5000) {
Write-Host "ERROR: Port 5000 is still in use after cleanup!" -ForegroundColor Red
Read-Host "Press Enter to exit"
exit 1
}
Write-Host "All ports are free. Starting CourseWorx..." -ForegroundColor Green
Write-Host "Frontend: http://localhost:3000" -ForegroundColor Cyan
Write-Host "Backend: http://localhost:5000" -ForegroundColor Cyan
Write-Host "Network Access:" -ForegroundColor Cyan
Write-Host " Frontend: http://10.0.0.96:3000" -ForegroundColor Cyan
Write-Host " Backend: http://10.0.0.96:5000" -ForegroundColor Cyan
# Start both frontend and backend
Write-Host "Starting application..." -ForegroundColor Green
npm run start