feat: run.sh restart/stop/status + real DB connector + GitLab CI

1. run.sh: start/stop/restart/status/logs/build/test
   - PID file management in .pids/
   - Colored output, health check wait, log files
   - Auto alembic migrate on start

2. DB Connector (replaces mock aiomysql):
   - MySQL: aiomysql (connect/query/dml/test)
   - PostgreSQL: asyncpg (connect/query/dml/test)
   - SQLite: sqlite3 via executor (connect/query/dml/test)
   - Unified interface: DBConnector.test_connection/execute_query/execute_dml
   - Connection test returns version + latency

3. GitLab CI/CD pipeline:
   - test: backend pytest + frontend build
   - build: Docker images (manual trigger)
   - deploy: SSH deploy (manual trigger)
   - Cache: pip + node_modules

Tests: 128 passing, frontend build: OK
This commit is contained in:
logan committed 2026-05-22 15:16:59 +08:00
1 parent 64e0c37972
commit 2cfd45c9d1
10 files changed
+712 -126

No files matched your search

+2 -2
View File
@@ -8,7 +8,7 @@ from app.models.user import User
from app.models.instance import Instance
from app.models.audit_log import AuditLog
from app.schemas.query import QueryRequest, QueryResult
from app.services.query_service import QueryService
from app.services.db_connector import DBConnector
from app.core.crypto import decrypt_password
router = APIRouter(prefix="/query", tags=["SQL 查询"])
@@ -32,7 +32,7 @@ async def execute_query(
instance.password = decrypt_password(instance.password)
try:
query_result = await QueryService.execute_query(instance, req.database, req.sql, current_user.id)
query_result = await DBConnector.execute_query(instance, req.database, req.sql, current_user.id)
except ValueError as e:
raise HTTPException(status_code=400, detail=str(e))