Phase 1: Test/Prod Database Configurations
- Migration 010: test_* columns on databases table, environment column on request_logs
- DatabasePoolManager: dual-pool strategy (prod + test), getPool(id, env) with fallback
- SqlExecutor, ScriptExecutor, IsolatedScriptExecutor, AqlExecutor: environment param threaded through all execution paths
- dynamicApiController: X-Environment header detection, environment in logging
- databaseManagementController: CRUD for test credentials, testConnection with ?env=test
- Frontend: test env form in DatabaseModal, env toggle in EndpointEditor test panel
Phase 2: Endpoint Versioning
- Migration 011: endpoint_versions table with full snapshots, backfill v1 for existing endpoints
- VersionService: createVersion, saveDraft, publishVersion, rollbackToVersion, getHistory
- endpointController: auto-versioning on update, 6 new version management handlers
- dynamicApiController: draft serving when environment=test and draft exists
- Frontend: Save Draft button, version history panel with publish/rollback actions
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Add ScriptExecutionError class that preserves captured logs/queries
- IsolatedScriptExecutor: throw ScriptExecutionError with accumulated
logs instead of plain Error on script failure
- ScriptExecutor (Python): same fix for Python execution errors
- testEndpoint: return captured logs/queries on script errors
- dynamicApiController: correctly extract scriptResult.result instead
of stuffing entire IsolatedExecutionResult into rows; include logs
in detailed_response output
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
new file: .gitignore
new file: backend/.env.example
new file: backend/.gitignore
new file: backend/ecosystem.config.js
new file: backend/nodemon.json
new file: backend/package-lock.json
new file: backend/package.json
new file: backend/src/config/database.ts
new file: backend/src/config/dynamicSwagger.ts
new file: backend/src/config/environment.ts
new file: backend/src/config/swagger.ts
new file: backend/src/controllers/apiKeyController.ts
new file: backend/src/controllers/authController.ts
new file: backend/src/controllers/databaseController.ts
new file: backend/src/controllers/databaseManagementController.ts
new file: backend/src/controllers/dynamicApiController.ts
new file: backend/src/controllers/endpointController.ts
new file: backend/src/controllers/folderController.ts
new file: backend/src/controllers/logsController.ts
new file: backend/src/controllers/userController.ts
new file: backend/src/middleware/apiKey.ts
new file: backend/src/middleware/auth.ts
new file: backend/src/middleware/logging.ts
new file: backend/src/migrations/001_initial_schema.sql
new file: backend/src/migrations/002_add_logging.sql
new file: backend/src/migrations/003_add_scripting.sql
new file: backend/src/migrations/004_add_superadmin.sql
new file: backend/src/migrations/run.ts
new file: backend/src/migrations/seed.ts
new file: backend/src/routes/apiKeys.ts
new file: backend/src/routes/auth.ts
new file: backend/src/routes/databaseManagement.ts
new file: backend/src/routes/databases.ts
new file: backend/src/routes/dynamic.ts
new file: backend/src/routes/endpoints.ts
new file: backend/src/routes/folders.ts
new file: backend/src/routes/logs.ts
new file: backend/src/routes/users.ts
new file: backend/src/server.ts
new file: backend/src/services/DatabasePoolManager.ts
new file: backend/src/services/ScriptExecutor.ts
new file: backend/src/services/SqlExecutor.ts
new file: backend/src/types/index.ts
new file: backend/tsconfig.json
new file: frontend/.gitignore
new file: frontend/index.html
new file: frontend/nginx.conf
new file: frontend/package-lock.json
new file: frontend/package.json
new file: frontend/postcss.config.js
new file: frontend/src/App.tsx
new file: frontend/src/components/CodeEditor.tsx