chore: clean legacy setup artifacts

This commit is contained in:
Cheng Zhou
2026-05-25 14:35:24 +08:00
parent 934d114a29
commit 6c2f61eebd
11 changed files with 48 additions and 11 deletions
+1 -1
View File
@@ -48,7 +48,7 @@
- 文档入口见 `docs/README.md`;当前约束集中在分支治理、发布清单和治理审计文档,操作手册集中在 `docs/guides/`,历史交付记录集中在 `docs/reports/``docs/plans/`
## 常用流程
1. 用管理员账号登录前端(默认 `admin@example.com / admin123`)。
1. 用管理员账号登录前端(默认 `admin@huapont.cn / admin123`)。
2. 进入左侧导航「账号治理」「项目治理」进行用户、项目、中心等全局管理;或在“项目列表”选择项目后进入项目内工作区。
3. Dashboard 查看进度、待办;左侧导航进入“里程碑”“任务”等页面。
4. 退出登录或切换项目可通过顶部右侧下拉。
+3
View File
@@ -37,6 +37,9 @@ from app.models.study_setup_config import StudySetupConfig # noqa: F401
from app.models.study_setup_config_version import StudySetupConfigVersion # noqa: F401
from app.models.study_monitoring_strategy import StudyMonitoringStrategy # noqa: F401
from app.models.study_center_confirm import StudyCenterConfirm # noqa: F401
from app.models.api_endpoint_permission import ApiEndpointPermission # noqa: F401
from app.models.api_endpoint_registry import ApiEndpointRegistry # noqa: F401
from app.models.permission_access_log import PermissionAccessLog # noqa: F401
from app.models.permission_metric_snapshot import PermissionMetricSnapshot # noqa: F401
from app.models.permission_template import PermissionTemplate, PermissionTemplateVersion # noqa: F401
from app.models.security_access_log import SecurityAccessLog # noqa: F401
-3
View File
@@ -40,9 +40,6 @@ async def lifespan(_: FastAPI):
aggregator_task = asyncio.create_task(run_hourly_metric_aggregation(stop_event))
await start_log_writer()
await start_security_log_writer()
# Ensure models are imported so metadata is populated
from app.models import user as user_model # noqa: F401
if settings.ENV == "development":
async with engine.begin() as conn:
await _ensure_legacy_primary_keys(conn)
@@ -1,5 +1,4 @@
from __future__ import annotations
from typing import Optional
import uuid
from datetime import datetime
@@ -1,5 +1,4 @@
from __future__ import annotations
from typing import Optional
import uuid
from datetime import datetime
+1 -1
View File
@@ -13,7 +13,7 @@ from cryptography.hazmat.primitives.ciphers.aead import AESGCM
BASE = os.getenv("BASE_URL", "http://localhost:8000")
ADMIN_EMAIL = os.getenv("EMAIL", "admin@example.com")
ADMIN_EMAIL = os.getenv("EMAIL", "admin@huapont.cn")
ADMIN_PASSWORD = os.getenv("PASSWORD", "admin123")
STUDY_ID = os.getenv("STUDY_ID", "").strip()
DATABASE_URL = (os.getenv("DATABASE_URL") or "postgresql://ctms_user:secret_password@db/ctms_db").replace("+asyncpg", "")
+39
View File
@@ -1,4 +1,8 @@
from contextlib import asynccontextmanager
import os
from pathlib import Path
import subprocess
import sys
from unittest.mock import AsyncMock
import pytest
@@ -7,6 +11,41 @@ from fastapi import FastAPI
from app import main
def test_db_base_registers_permission_models_for_create_all():
backend_dir = Path(__file__).resolve().parents[1]
code = """
from app.db.base_class import Base
import app.db.base
required_tables = {
"api_endpoint_permissions",
"api_endpoint_registries",
"permission_templates",
"permission_template_versions",
}
missing = sorted(required_tables - set(Base.metadata.tables))
if missing:
print(",".join(missing))
raise SystemExit(1)
"""
env = {
**os.environ,
"PYTHONDONTWRITEBYTECODE": "1",
"PYTHONPATH": str(backend_dir),
}
result = subprocess.run(
[sys.executable, "-c", code],
cwd=backend_dir,
env=env,
capture_output=True,
text=True,
check=False,
)
assert result.returncode == 0, result.stdout + result.stderr
class _DummyTask:
def __init__(self):
self.awaited = False
+1 -1
View File
@@ -195,7 +195,7 @@ Content-Type: multipart/form-data
```bash
chmod +x docs/setup-config-curl-smoke.sh
BASE_URL=http://localhost:8888 \
EMAIL=admin@example.com \
EMAIL=admin@huapont.cn \
PASSWORD=admin123 \
STUDY_ID=aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa \
bash docs/setup-config-curl-smoke.sh
@@ -2,7 +2,7 @@
"name": "CTMS Local Example",
"values": [
{ "key": "base_url", "value": "http://localhost:8888", "type": "default", "enabled": true },
{ "key": "email", "value": "admin@example.com", "type": "default", "enabled": true },
{ "key": "email", "value": "admin@huapont.cn", "type": "default", "enabled": true },
{ "key": "password", "value": "admin123", "type": "default", "enabled": true },
{ "key": "study_id", "value": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "type": "default", "enabled": true },
{ "key": "token", "value": "", "type": "default", "enabled": true },
@@ -218,7 +218,7 @@
],
"variable": [
{ "key": "base_url", "value": "http://localhost:8888" },
{ "key": "email", "value": "admin@example.com" },
{ "key": "email", "value": "admin@huapont.cn" },
{ "key": "password", "value": "admin123" },
{ "key": "study_id", "value": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" },
{ "key": "token", "value": "" },
+1 -1
View File
@@ -2,7 +2,7 @@
set -euo pipefail
BASE_URL="${BASE_URL:-http://localhost:8888}"
EMAIL="${EMAIL:-admin@example.com}"
EMAIL="${EMAIL:-admin@huapont.cn}"
PASSWORD="${PASSWORD:-admin123}"
STUDY_ID="${STUDY_ID:-aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa}"