feat(scada): add project monitoring replay
Generic Container CI/CD / test-build-publish (push) Successful in 3m39s
Server CI/CD v2 / build-test-publish-and-deploy (push) Successful in 3m39s

This commit is contained in:
2026-11-04 14:27:21 +08:00
parent f25423dec4
commit 26fa5d1909
53 changed files with 5153 additions and 20 deletions
+1
View File
@@ -44,6 +44,7 @@ class Project(Base):
gs_workspace: Mapped[str] = mapped_column(String(100), unique=True)
map_extent: Mapped[dict | None] = mapped_column(JSONB, nullable=True)
map_config: Mapped[dict] = mapped_column(JSONB, nullable=False, default=dict, server_default="{}")
settings: Mapped[dict] = mapped_column(JSONB, nullable=False, default=dict, server_default="{}")
status: Mapped[str] = mapped_column(String(20), default="active")
created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True), default=datetime.utcnow
@@ -67,6 +67,7 @@ class ProjectDetail:
map_extent: Optional[dict]
status: str
map_config: dict = field(default_factory=dict)
settings: dict = field(default_factory=dict)
@dataclass(frozen=True)
@@ -223,6 +224,7 @@ class MetadataRepository:
status: str,
creator_user_id: UUID | None = None,
map_config: dict | None = None,
settings: dict | None = None,
) -> models.Project:
project = models.Project(
id=uuid4(),
@@ -233,6 +235,7 @@ class MetadataRepository:
map_extent=map_extent,
status=status,
map_config=map_config or {},
settings=settings or {},
created_at=_utcnow(),
updated_at=_utcnow(),
)
@@ -263,6 +266,7 @@ class MetadataRepository:
timescale_dsn: str,
pool_min_size: int = 1,
pool_max_size: int = 4,
settings: dict | None = None,
) -> models.Project:
"""Atomically expose a fully provisioned project and both DB routes."""
business_secret = _encrypt_database_secret(business_dsn)
@@ -276,6 +280,7 @@ class MetadataRepository:
map_extent=map_extent,
status="active",
map_config={},
settings=settings or {},
created_at=_utcnow(),
updated_at=_utcnow(),
)
@@ -333,6 +338,8 @@ class MetadataRepository:
setattr(project, field, updates[field])
if "map_config" in updates:
project.map_config = {**(project.map_config or {}), **updates["map_config"]}
if "settings" in updates:
project.settings = {**(project.settings or {}), **updates["settings"]}
project.updated_at = _utcnow()
await self.session.commit()
await self.session.refresh(project)
@@ -350,6 +357,7 @@ class MetadataRepository:
gs_workspace=project.gs_workspace,
map_extent=project.map_extent,
map_config=project.map_config or {},
settings=project.settings or {},
status=project.status,
)