@echo off setlocal enabledelayedexpansion cd /d "%~dp0" echo. echo ========================================== echo CryptoWallet - Local Dev Starter echo ========================================== echo. :: ── 1. Check pnpm ──────────────────────────────────────────────────────────── where pnpm >nul 2>&1 if errorlevel 1 ( echo [ERROR] pnpm not found. Install with: npm install -g pnpm pause exit /b 1 ) :: ── 2. Locate PostgreSQL binaries ───────────────────────────────────────────── set "PGBIN=" if exist "C:\Program Files\PostgreSQL\16\bin\pg_isready.exe" set "PGBIN=C:\Program Files\PostgreSQL\16\bin" if not defined PGBIN ( where pg_isready >nul 2>&1 if errorlevel 1 ( echo [ERROR] PostgreSQL 16 not found. Expected at C:\Program Files\PostgreSQL\16\bin pause exit /b 1 ) ) set "PGPASSWORD=postgres" :: ── 3. Start local PostgreSQL service ──────────────────────────────────────── echo [1/4] Starting PostgreSQL... net start postgresql-x64-16 2>nul timeout /t 2 /nobreak >nul set /a pg_attempts=0 :waitpg set /a pg_attempts+=1 if !pg_attempts! gtr 15 ( echo [ERROR] PostgreSQL not responding after 30 seconds. pause exit /b 1 ) if defined PGBIN ( "%PGBIN%\pg_isready.exe" -U postgres -q 2>nul ) else ( pg_isready -U postgres -q 2>nul ) if errorlevel 1 ( timeout /t 2 /nobreak >nul goto waitpg ) echo PostgreSQL is ready. :: ── 4. Ensure DB exists (create only if missing) ──────────────────────────── echo [2/4] Ensuring database... if defined PGBIN ( "%PGBIN%\psql.exe" -U postgres -tc "SELECT 1 FROM pg_database WHERE datname='cryptowallet_v2'" 2>nul | findstr "1" >nul 2>nul ) else ( psql -U postgres -tc "SELECT 1 FROM pg_database WHERE datname='cryptowallet_v2'" 2>nul | findstr "1" >nul 2>nul ) if errorlevel 1 ( echo Creating database cryptowallet_v2... if defined PGBIN ( "%PGBIN%\psql.exe" -U postgres -c "CREATE DATABASE cryptowallet_v2" 2>nul ) else ( psql -U postgres -c "CREATE DATABASE cryptowallet_v2" 2>nul ) ) else ( echo Database exists. ) :: ── 5. Install deps + migrate ──────────────────────────────────────────────── echo [3/4] Installing dependencies... if not exist .env ( copy .env.example .env >nul echo Created .env from .env.example ) call pnpm install if errorlevel 1 ( echo [ERROR] pnpm install failed. pause exit /b 1 ) echo Dependencies installed. echo Running migrations... cd apps\api call pnpm migrate if errorlevel 1 ( echo [ERROR] Migrations failed. pause exit /b 1 ) cd ..\.. echo Migrations done. :: ── 6. Stop old processes and start servers ────────────────────────────────── echo [4/4] Starting servers... powershell -NoProfile -Command "Get-NetTCPConnection -LocalPort 3000,3001 -ErrorAction SilentlyContinue | ForEach-Object { Stop-Process -Id $_.OwningProcess -Force -ErrorAction SilentlyContinue }" if exist apps\web\.next\dev\lock del apps\web\.next\dev\lock 2>nul timeout /t 1 /nobreak >nul start "CryptoWallet API [port 3001]" cmd /k "cd /d %~dp0apps\api && pnpm dev" timeout /t 2 /nobreak >nul start "CryptoWallet Web [port 3000]" cmd /k "cd /d %~dp0apps\web && pnpm dev" echo. echo ========================================== echo All services started! echo. echo Web: http://localhost:3000 echo API: http://localhost:3001 echo DB: localhost:5432 / cryptowallet_v2 echo ========================================== echo. timeout /t 3 /nobreak >nul start http://localhost:3000 pause >nul endlocal