feat: 平台同步状态记录(last_synced_at + 前端展示最后同步时间)
This commit is contained in:
+10
-6
@@ -51,15 +51,19 @@ def init_db() -> None:
|
||||
|
||||
|
||||
def _migrate_assets_db() -> None:
|
||||
"""轻量迁移:为已有 assets 表补充新增列(SQLite create_all 不会修改已有表结构)"""
|
||||
"""轻量迁移:为已有表补充新增列(SQLite create_all 不会修改已有表结构)"""
|
||||
import sqlalchemy as sa
|
||||
|
||||
with assets_engine.begin() as conn:
|
||||
if not sa.inspect(conn).has_table("assets"):
|
||||
return
|
||||
cols = {c["name"] for c in sa.inspect(conn).get_columns("assets")}
|
||||
if "external_id" not in cols:
|
||||
conn.execute(sa.text("ALTER TABLE assets ADD COLUMN external_id VARCHAR"))
|
||||
insp = sa.inspect(conn)
|
||||
if insp.has_table("assets"):
|
||||
cols = {c["name"] for c in insp.get_columns("assets")}
|
||||
if "external_id" not in cols:
|
||||
conn.execute(sa.text("ALTER TABLE assets ADD COLUMN external_id VARCHAR"))
|
||||
if insp.has_table("providers"):
|
||||
cols = {c["name"] for c in insp.get_columns("providers")}
|
||||
if "last_synced_at" not in cols:
|
||||
conn.execute(sa.text("ALTER TABLE providers ADD COLUMN last_synced_at DATETIME"))
|
||||
|
||||
|
||||
def get_session() -> Generator[Session, None, None]:
|
||||
|
||||
@@ -41,4 +41,7 @@ class Provider(SQLModel, table=True):
|
||||
)
|
||||
enabled: bool = Field(default=True, description="是否启用")
|
||||
remark: Optional[str] = Field(default=None, description="备注")
|
||||
last_synced_at: Optional[datetime] = Field(
|
||||
default=None, description="最近一次 SDK 同步时间"
|
||||
)
|
||||
created_at: datetime = Field(default_factory=datetime.utcnow, description="创建时间")
|
||||
|
||||
@@ -42,4 +42,5 @@ class ProviderUpdate(SQLModel):
|
||||
class ProviderRead(ProviderBase):
|
||||
id: int
|
||||
created_at: datetime
|
||||
last_synced_at: Optional[datetime] = None
|
||||
has_api_config: bool = False
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
"""
|
||||
|
||||
import json
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
|
||||
from fastapi import HTTPException, status
|
||||
@@ -217,4 +218,8 @@ def sync_provider(session: Session, provider_id: int) -> dict:
|
||||
except Exception as e: # noqa: BLE001
|
||||
result["account_error"] = str(e)
|
||||
|
||||
provider.last_synced_at = datetime.utcnow()
|
||||
session.add(provider)
|
||||
session.commit()
|
||||
result["last_synced_at"] = provider.last_synced_at.isoformat()
|
||||
return result
|
||||
|
||||
Reference in New Issue
Block a user