From 14cafa66c6bc0e0dbf32ce27c61decf1e4b21c3f Mon Sep 17 00:00:00 2001 From: chiguyong Date: Mon, 1 Jun 2026 20:41:31 +0800 Subject: [PATCH] fix: add DateTime(timezone=True) to Batch 1b agent framework path models (7 files, 28 columns) --- backend/app/models/agent.py | 15 ++++++++++----- backend/app/models/api_key.py | 4 +++- backend/app/models/detection_task.py | 6 ++++-- backend/app/models/monitoring.py | 9 ++++++--- backend/app/models/query_task.py | 7 ++++--- backend/app/models/trend_insight.py | 8 +++++--- backend/app/models/usage_record.py | 3 ++- 7 files changed, 34 insertions(+), 18 deletions(-) diff --git a/backend/app/models/agent.py b/backend/app/models/agent.py index 6cbe199..eb0ea97 100644 --- a/backend/app/models/agent.py +++ b/backend/app/models/agent.py @@ -1,7 +1,7 @@ import uuid from datetime import datetime -from sqlalchemy import String, Integer, ForeignKey, Index, func, Text +from sqlalchemy import String, Integer, DateTime, ForeignKey, Index, func, Text from sqlalchemy import Uuid from sqlalchemy.orm import Mapped, mapped_column, relationship @@ -24,12 +24,14 @@ class AgentRegistry(Base): endpoint: Mapped[str | None] = mapped_column(String(500), nullable=True) status: Mapped[str] = mapped_column(String(20), server_default="offline", nullable=False) capabilities: Mapped[dict | None] = mapped_column(JSONType, nullable=True) - last_heartbeat: Mapped[datetime | None] = mapped_column(nullable=True) + last_heartbeat: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) created_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), server_default=func.now(), nullable=False, ) updated_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False, @@ -70,6 +72,7 @@ class AgentConfig(Base): config_value: Mapped[dict] = mapped_column(JSONType, nullable=False) description: Mapped[str | None] = mapped_column(String(500), nullable=True) updated_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False, @@ -128,10 +131,11 @@ class AgentTask(Base): ForeignKey("lifecycle_projects.id", ondelete="SET NULL"), nullable=True, ) - scheduled_at: Mapped[datetime | None] = mapped_column(nullable=True) - started_at: Mapped[datetime | None] = mapped_column(nullable=True) - completed_at: Mapped[datetime | None] = mapped_column(nullable=True) + scheduled_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) + started_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) + completed_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) created_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), server_default=func.now(), nullable=False, ) @@ -185,6 +189,7 @@ class AgentTaskLog(Base): message: Mapped[str] = mapped_column(Text, nullable=False) extra_metadata: Mapped[dict | None] = mapped_column("metadata", JSONType, nullable=True) created_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), server_default=func.now(), nullable=False, ) diff --git a/backend/app/models/api_key.py b/backend/app/models/api_key.py index efff1fb..bd835c3 100644 --- a/backend/app/models/api_key.py +++ b/backend/app/models/api_key.py @@ -27,12 +27,14 @@ class APIKey(Base): key_source: Mapped[str] = mapped_column(String(10), default="user") status: Mapped[str] = mapped_column(String(20), default="active") priority: Mapped[int] = mapped_column(default=0) - last_verified_at: Mapped[datetime | None] = mapped_column(DateTime, nullable=True) + last_verified_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) created_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), server_default=func.now(), nullable=False, ) updated_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False, diff --git a/backend/app/models/detection_task.py b/backend/app/models/detection_task.py index 957500f..aecd5e3 100644 --- a/backend/app/models/detection_task.py +++ b/backend/app/models/detection_task.py @@ -39,15 +39,17 @@ class DetectionTask(Base): queries: Mapped[list] = mapped_column(JSONType, default=list, nullable=False) competitor_names: Mapped[list | None] = mapped_column(JSONType, nullable=True) is_active: Mapped[bool] = mapped_column(Boolean, default=True, nullable=False) - last_run_at: Mapped[datetime | None] = mapped_column(DateTime, nullable=True) + last_run_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) next_run_at: Mapped[datetime | None] = mapped_column( - DateTime, nullable=True, default=lambda: datetime.now(timezone.utc) + DateTime(timezone=True), nullable=True, default=lambda: datetime.now(timezone.utc) ) created_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), server_default=func.now(), nullable=False, ) updated_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False, diff --git a/backend/app/models/monitoring.py b/backend/app/models/monitoring.py index 93f193e..912495f 100644 --- a/backend/app/models/monitoring.py +++ b/backend/app/models/monitoring.py @@ -1,7 +1,7 @@ import uuid from datetime import datetime -from sqlalchemy import String, Integer, Float, ForeignKey, Index, func +from sqlalchemy import String, Integer, Float, DateTime, ForeignKey, Index, func from sqlalchemy import Uuid from sqlalchemy.orm import Mapped, mapped_column, relationship @@ -39,16 +39,18 @@ class MonitoringRecord(Base): check_interval_hours: Mapped[int] = mapped_column( Integer, server_default="24", nullable=False, ) - last_checked_at: Mapped[datetime | None] = mapped_column(nullable=True) - next_check_at: Mapped[datetime | None] = mapped_column(nullable=True) + last_checked_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) + next_check_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) status: Mapped[str] = mapped_column( String(20), server_default="active", nullable=False, ) created_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), server_default=func.now(), nullable=False, ) updated_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False, @@ -87,6 +89,7 @@ class ContentBaseline(Base): rank_position: Mapped[int | None] = mapped_column(Integer, nullable=True) snapshot_data: Mapped[dict | None] = mapped_column(JSONType, nullable=True) recorded_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), server_default=func.now(), nullable=False, ) diff --git a/backend/app/models/query_task.py b/backend/app/models/query_task.py index 2fd2285..6996e24 100644 --- a/backend/app/models/query_task.py +++ b/backend/app/models/query_task.py @@ -1,7 +1,7 @@ import uuid from datetime import datetime -from sqlalchemy import String, ForeignKey, Index, func, Text +from sqlalchemy import String, DateTime, ForeignKey, Index, func, Text from sqlalchemy import Uuid from sqlalchemy.orm import Mapped, mapped_column, relationship @@ -25,11 +25,12 @@ class QueryTask(Base): status: Mapped[str] = mapped_column(String(20), default="pending") error_message: Mapped[str | None] = mapped_column(Text, nullable=True) scheduled_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), server_default=func.now(), nullable=False, ) - started_at: Mapped[datetime | None] = mapped_column(nullable=True) - completed_at: Mapped[datetime | None] = mapped_column(nullable=True) + started_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) + completed_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) query: Mapped["Query"] = relationship("Query", back_populates="query_tasks") diff --git a/backend/app/models/trend_insight.py b/backend/app/models/trend_insight.py index 35d3929..67eeffd 100644 --- a/backend/app/models/trend_insight.py +++ b/backend/app/models/trend_insight.py @@ -1,7 +1,7 @@ import uuid from datetime import datetime -from sqlalchemy import String, Integer, Float, ForeignKey, Index, func, Text +from sqlalchemy import String, Integer, Float, DateTime, ForeignKey, Index, func, Text from sqlalchemy import Uuid, JSON from sqlalchemy.orm import Mapped, mapped_column @@ -24,8 +24,8 @@ class TrendInsight(Base): trend_type: Mapped[str] = mapped_column(String(20), nullable=False) keyword: Mapped[str | None] = mapped_column(String(200), nullable=True) platform: Mapped[str | None] = mapped_column(String(50), nullable=True) - period_start: Mapped[datetime] = mapped_column(nullable=False) - period_end: Mapped[datetime] = mapped_column(nullable=False) + period_start: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False) + period_end: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False) data_points: Mapped[list | None] = mapped_column(JSON, nullable=True) change_rate: Mapped[float | None] = mapped_column(Float, nullable=True) absolute_change: Mapped[int | None] = mapped_column(Integer, nullable=True) @@ -37,10 +37,12 @@ class TrendInsight(Base): String(20), nullable=False, server_default="info", ) created_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), server_default=func.now(), nullable=False, ) updated_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False, diff --git a/backend/app/models/usage_record.py b/backend/app/models/usage_record.py index 0dac114..a77a80b 100644 --- a/backend/app/models/usage_record.py +++ b/backend/app/models/usage_record.py @@ -51,11 +51,12 @@ class UsageRecord(Base): default=dict, ) timestamp: Mapped[datetime] = mapped_column( - DateTime, + DateTime(timezone=True), default=func.now(), index=True, ) created_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), server_default=func.now(), nullable=False, )