@echo off setlocal enabledelayedexpansion cd /d "%~dp0" echo. echo ========================================== echo CryptoWallet + BITOK Auth - Local Dev 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. Check Docker ────────────────────────────────────────────────────────── where docker >nul 2>&1 if errorlevel 1 ( echo [ERROR] Docker not found. Install Docker Desktop and ensure it is running. pause exit /b 1 ) :: ── 3. Stop local PostgreSQL (if any) so Docker gets port 5432 ───────────────── echo [1/8] Preparing environment... net stop postgresql-x64-16 2>nul timeout /t 2 /nobreak >nul :: ── 4. Wait for Docker Engine ───────────────────────────────────────────────── echo Waiting for Docker Engine... set /a docker_attempts=0 :waitdocker set /a docker_attempts+=1 if !docker_attempts! gtr 30 ( echo [ERROR] Docker Engine did not respond after 60 seconds. echo Make sure Docker Desktop is fully started ^(whale icon in tray^). pause exit /b 1 ) docker info >nul 2>&1 if errorlevel 1 ( timeout /t 2 /nobreak >nul goto waitdocker ) echo Docker ready. :: ── 5. Start infrastructure via Docker Compose ──────────────────────────────── echo [2/8] Starting infrastructure (PostgreSQL, Vault, RabbitMQ, KeyDB)... docker compose up -d postgres vault vault-init rabbitmq keydb 2>&1 if errorlevel 1 ( echo Retrying with docker-compose... docker-compose up -d postgres vault vault-init rabbitmq keydb 2>&1 ) if errorlevel 1 ( echo. echo [ERROR] Could not start Docker Compose. echo. echo Common fixes: echo 1. Wait 30-60 sec after opening Docker Desktop echo 2. Restart Docker Desktop ^(right-click tray icon -^> Restart^) echo 3. Run: docker compose up -d postgres vault vault-init rabbitmq keydb echo. pause exit /b 1 ) :: Wait for PostgreSQL to be ready set /a pg_attempts=0 :waitpg set /a pg_attempts+=1 if !pg_attempts! gtr 30 ( echo [ERROR] PostgreSQL not responding after 60 seconds. pause exit /b 1 ) timeout /t 2 /nobreak >nul docker exec cryptowallet-db pg_isready -U postgres -q 2>nul if errorlevel 1 goto waitpg echo PostgreSQL is ready. :: Wait for RabbitMQ to be ready echo Waiting for RabbitMQ... set /a rmq_attempts=0 :waitrmq set /a rmq_attempts+=1 if !rmq_attempts! gtr 30 ( echo [WARN] RabbitMQ slow to start, continuing anyway... goto rmq_done ) timeout /t 2 /nobreak >nul docker exec cryptowallet-rabbitmq rabbitmq-diagnostics check_port_connectivity >nul 2>&1 if errorlevel 1 goto waitrmq :rmq_done echo RabbitMQ is ready. :: ── 6. Create databases ────────────────────────────────────────────────────── echo [3/8] Ensuring databases... docker exec cryptowallet-db psql -U postgres -c "CREATE DATABASE cryptowallet_devphase3" 2>nul if errorlevel 1 ( echo cryptowallet_devphase3 may already exist, continuing... ) docker exec cryptowallet-db psql -U postgres -c "CREATE DATABASE bitok_dev" 2>nul if errorlevel 1 ( echo bitok_dev may already exist, continuing... ) echo Databases ready. :: ── 7. Wait for vault-init to finish ───────────────────────────────────────── echo [4/8] Waiting for Vault initialization... set /a vault_attempts=0 :waitvault set /a vault_attempts+=1 if !vault_attempts! gtr 30 ( echo [WARN] vault-init taking long, continuing... goto vault_done ) timeout /t 2 /nobreak >nul docker inspect cryptowallet-vault-init --format="{{.State.Status}}" 2>nul | findstr /C:"exited" >nul 2>&1 if errorlevel 1 goto waitvault :vault_done echo Vault initialized. :: ── 8. Update .env ─────────────────────────────────────────────────────────── echo [5/8] Updating .env... if not exist .env ( copy .env.example .env >nul ) powershell -NoProfile -Command "(Get-Content .env) -replace '^DB_NAME=.*', 'DB_NAME=cryptowallet_devphase3' -replace '^DATABASE_URL=.*', 'DATABASE_URL=postgresql://postgres:postgres@localhost:5432/cryptowallet_devphase3' | Set-Content .env" echo .env updated. :: ── 9. Install deps and run migrations ──────────────────────────────────────── echo [6/8] Installing dependencies... call pnpm install if errorlevel 1 ( echo [ERROR] pnpm install failed. pause exit /b 1 ) echo Dependencies installed. echo Running database migrations... cd apps\api call pnpm migrate if errorlevel 1 ( echo Migration failed - resetting DB and retrying... call pnpm db:reset call pnpm migrate ) if errorlevel 1 ( echo [ERROR] Migrations failed - check output above. pause exit /b 1 ) cd ..\.. echo Migrations done. :: ── 10. Initialize BITOK database tables ────────────────────────────────────── echo [7/8] Initializing BITOK database... if exist BITOK\sql\tables.sql ( docker exec -i cryptowallet-db psql -U postgres -d bitok_dev < BITOK\sql\tables.sql 2>nul echo BITOK tables initialized. ) else ( echo BITOK/sql/tables.sql not found, skipping... ) :: ── 11. Start BITOK auth service (Docker) ───────────────────────────────────── echo Starting BITOK auth service... docker compose up -d bitok-auth 2>&1 if errorlevel 1 ( echo [WARN] BITOK auth container failed to start. Check: docker logs cryptowallet-bitok ) :: Wait briefly for BITOK to be responsive set /a bitok_attempts=0 :waitbitok set /a bitok_attempts+=1 if !bitok_attempts! gtr 15 ( echo [WARN] BITOK slow to start, continuing... goto bitok_done ) timeout /t 2 /nobreak >nul powershell -NoProfile -Command "try { $r = Invoke-WebRequest -Uri http://localhost:8000/ping -TimeoutSec 2 -UseBasicParsing; exit 0 } catch { exit 1 }" >nul 2>&1 if errorlevel 1 goto waitbitok :bitok_done echo BITOK auth service ready. :: ── 12. Stop old dev servers and clear lock ───────────────────────────────────── echo [8/8] Starting wallet 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 wallet API and Web 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" :: ── Done ───────────────────────────────────────────────────────────────────── echo. echo ========================================== echo All services started! echo. echo Web: http://localhost:3000 echo API: http://localhost:3001 echo BITOK: http://localhost:8000 echo RabbitMQ: http://localhost:15672 (guest/guest) echo DB: localhost:5432 echo wallet DB: cryptowallet_devphase3 echo BITOK DB: bitok_dev echo user: postgres pass: postgres echo ========================================== echo. timeout /t 3 /nobreak >nul start http://localhost:3000 echo Press any key to close this launcher... pause >nul endlocal