feat: multi-Oracle server support with runtime switching
Complete implementation of multi-server Oracle database support: Backend: - Multi-pool Oracle with lazy loading per server - Email-to-server cache for automatic server discovery - JWT tokens include server_id claim - /auth/check-identity and /auth/check-email endpoints - /auth/my-servers endpoint for listing user's accessible servers - Server switch with password re-authentication Frontend: - New ServerSelector component for header dropdown - Multi-step login flow (identity → server → password) - Server switching from header with password modal - Mobile drawer menu with server selection - Dark mode support for all new components - URL bookmark support with ?server= query param Scripts: - Unified start.sh replacing start-prod.sh/start-test.sh - Unified ssh-tunnel.sh with multi-server support - Updated status.sh for new architecture Tests: - E2E tests for multi-server and single-server login flows - Backend unit tests for all new endpoints - Oracle multi-pool integration tests Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -11,8 +11,8 @@ Comprehensive validation that tests everything in the ROA2WEB codebase. This com
|
||||
### Services Must Be Running
|
||||
**IMPORTANT**: Before running this validation, start testing services:
|
||||
```bash
|
||||
./start-test.sh start # Starts: TEST SSH tunnel + Backend + Frontend + Telegram Bot
|
||||
./start-test.sh status # Verify all services are running
|
||||
./start.sh test start # Starts: TEST SSH tunnel + Backend + Frontend + Telegram Bot
|
||||
./start.sh test status # Verify all services are running
|
||||
```
|
||||
|
||||
### Test Configuration
|
||||
@@ -303,7 +303,7 @@ echo ""
|
||||
|
||||
This is the **most comprehensive** phase that validates complete user journeys from documentation.
|
||||
|
||||
**IMPORTANT**: E2E tests require all services to be running. Use `start-test.sh` to start services before running these tests.
|
||||
**IMPORTANT**: E2E tests require all services to be running. Use `start.sh test` to start services before running these tests.
|
||||
|
||||
### Prerequisites Check
|
||||
```bash
|
||||
@@ -317,8 +317,8 @@ echo "📝 Checking prerequisites..."
|
||||
echo ""
|
||||
echo "📝 Starting testing environment..."
|
||||
if ! pgrep -f "uvicorn.*app.main:app" > /dev/null 2>&1; then
|
||||
echo "⚠️ Services not running - starting with start-test.sh..."
|
||||
./start-test.sh start || {
|
||||
echo "⚠️ Services not running - starting with start.sh test..."
|
||||
./start.sh test start || {
|
||||
echo "❌ Failed to start testing services"
|
||||
exit 1
|
||||
}
|
||||
@@ -329,15 +329,10 @@ else
|
||||
echo "✅ Services already running"
|
||||
fi
|
||||
|
||||
# Verify TEST SSH tunnel is running (connects to Oracle TEST LXC 10.0.20.121)
|
||||
if ./ssh-tunnel-test.sh status > /dev/null 2>&1; then
|
||||
echo "✅ TEST SSH tunnel is running (Oracle TEST: 10.0.20.121)"
|
||||
else
|
||||
echo "⚠️ TEST SSH tunnel not detected - attempting to start..."
|
||||
./ssh-tunnel-test.sh start || {
|
||||
echo "❌ Failed to start TEST SSH tunnel"
|
||||
exit 1
|
||||
}
|
||||
# Check SSH tunnel (TEST uses direct connection to 10.0.20.121, no tunnel needed)
|
||||
echo "ℹ️ TEST environment uses direct connection to Oracle (10.0.20.121)"
|
||||
if [ -f "./ssh-tunnel.sh" ]; then
|
||||
./ssh-tunnel.sh status 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# Check if ports are available
|
||||
@@ -366,7 +361,7 @@ echo " → Verifying all services are running..."
|
||||
echo " → Testing backend health endpoint..."
|
||||
if ! check_port_available 8001; then
|
||||
echo "❌ Backend is not running on port 8001"
|
||||
echo " Run: ./start-test.sh start"
|
||||
echo " Run: ./start.sh test start"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -390,7 +385,7 @@ done
|
||||
|
||||
if [ -z "$frontend_port" ]; then
|
||||
echo "❌ Frontend is not running on any expected port"
|
||||
echo " Run: ./start-test.sh start"
|
||||
echo " Run: ./start.sh test start"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -964,7 +959,7 @@ echo ""
|
||||
echo "🎯 Result: 100% CONFIDENCE IN PRODUCTION READINESS"
|
||||
echo ""
|
||||
echo "Services Status:"
|
||||
./start-test.sh status
|
||||
./start.sh test status
|
||||
echo ""
|
||||
echo "════════════════════════════════════════════════════════════"
|
||||
```
|
||||
@@ -973,8 +968,8 @@ echo "════════════════════════
|
||||
|
||||
## Notes
|
||||
|
||||
- **Test Environment**: Oracle TEST server (LXC 10.0.20.121) via `ssh-tunnel-test.sh`
|
||||
- **Service Management**: `start-test.sh` starts all services (SSH tunnel, Backend, Frontend, Telegram Bot)
|
||||
- **Test Environment**: Oracle TEST server (LXC 10.0.20.121) - direct connection, no SSH tunnel
|
||||
- **Service Management**: `start.sh test` starts all services (SSH tunnel, Backend, Frontend, Telegram Bot)
|
||||
- **Test Company**: Company ID 110 (MARIUSM_AUTO) - has complete Oracle schema
|
||||
- **Test Credentials**: `MARIUS M` / `123`
|
||||
- **API Structure**: All endpoints use query params (`?company=110`), not path params
|
||||
@@ -988,10 +983,10 @@ echo "════════════════════════
|
||||
**Prerequisites**: Before running E2E tests (Phase 5), ensure testing services are started:
|
||||
```bash
|
||||
# Start all testing services (TEST SSH tunnel to LXC 10.0.20.121 + Backend + Frontend + Telegram Bot)
|
||||
./start-test.sh start
|
||||
./start.sh test start
|
||||
|
||||
# Check testing services status
|
||||
./start-test.sh status
|
||||
./start.sh test status
|
||||
```
|
||||
|
||||
To run all validations:
|
||||
@@ -999,7 +994,7 @@ To run all validations:
|
||||
/validate
|
||||
```
|
||||
|
||||
**Note**: `/validate` automatically starts testing services using `start-test.sh` if not already running.
|
||||
**Note**: `/validate` automatically starts testing services using `start.sh test` if not already running.
|
||||
|
||||
To run specific phases:
|
||||
```bash
|
||||
@@ -1007,6 +1002,6 @@ To run specific phases:
|
||||
grep -A 20 "Phase 1: Linting" .claude/commands/validate.md | bash
|
||||
|
||||
# Just run E2E tests (requires testing services running first!)
|
||||
./start-test.sh start # Start testing services first
|
||||
./start.sh test start # Start testing services first
|
||||
grep -A 500 "Phase 5: End-to-End Testing" .claude/commands/validate.md | bash
|
||||
```
|
||||
|
||||
@@ -53,7 +53,7 @@ Impact așteptat: -150 linii cod duplicat, OCR deps opționale via .env, -2 fiș
|
||||
## Verificare Finală
|
||||
|
||||
După implementare, verifică:
|
||||
- [ ] `./start-prod.sh` pornește fără erori
|
||||
- [ ] `./start.sh prod` pornește fără erori
|
||||
- [ ] Login funcționează
|
||||
- [ ] Un raport se încarcă corect
|
||||
- [ ] O chitanță se poate crea
|
||||
|
||||
@@ -23,8 +23,8 @@ Configure IIS web.config to proxy different API paths to different backend ports
|
||||
## P: Scripturi pentru pornire/oprire servere ROA2WEB
|
||||
@2026-01-07 #scripts #server-management | explicit:high
|
||||
Serverele se pornesc și opresc DOAR cu scripturile dedicate:
|
||||
- `./start-prod.sh` - pornește tot (SSH tunnel + backend + frontend) în mod producție
|
||||
- `./start-test.sh` - pornește în mod test
|
||||
- `./start.sh prod` - pornește tot (SSH tunnel + backend + frontend) în mod producție
|
||||
- `./start.sh test` - pornește în mod test
|
||||
- `./start-backend.sh restart` - restartează doar backend-ul
|
||||
- `./start-frontend.sh restart` - restartează doar frontend-ul
|
||||
- `./status.sh` - verifică starea serviciilor
|
||||
|
||||
@@ -2,5 +2,35 @@
|
||||
"statusLine": {
|
||||
"type": "command",
|
||||
"command": "/home/claude/.claude/statusline.sh"
|
||||
},
|
||||
"permissions": {
|
||||
"allow": [
|
||||
"Bash(npm run dev)",
|
||||
"Bash(npm run build)",
|
||||
"Bash(npm run lint)",
|
||||
"Bash(npm run format)",
|
||||
"Bash(npm run preview)",
|
||||
"Bash(npm run serve)",
|
||||
"Bash(npm run test:e2e*)",
|
||||
"Bash(npm test*)",
|
||||
"Bash(./start.sh*)",
|
||||
"Bash(./start-backend.sh*)",
|
||||
"Bash(./start-frontend.sh*)",
|
||||
"Bash(./status.sh)",
|
||||
"Bash(pytest*)",
|
||||
"Bash(python -m pytest*)",
|
||||
"Bash(ruff check*)",
|
||||
"Bash(ruff format*)",
|
||||
"Bash(mypy*)",
|
||||
"Bash(pip install*)",
|
||||
"Bash(git checkout*)",
|
||||
"Bash(git status)",
|
||||
"Bash(git diff*)",
|
||||
"Bash(git add*)",
|
||||
"Bash(git commit*)",
|
||||
"Bash(git log*)",
|
||||
"Bash(git branch*)",
|
||||
"Bash(agent-browser*)"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user