diff --git a/backend/app/models/attribution_record.py b/backend/app/models/attribution_record.py index 5e8f9dc..a288334 100644 --- a/backend/app/models/attribution_record.py +++ b/backend/app/models/attribution_record.py @@ -1,7 +1,7 @@ import uuid from datetime import datetime -from sqlalchemy import String, Float, Integer, ForeignKey, Index, func, Text +from sqlalchemy import String, Float, Integer, DateTime, ForeignKey, Index, func, Text from sqlalchemy import Uuid from sqlalchemy.orm import Mapped, mapped_column, relationship @@ -37,18 +37,20 @@ class AttributionRecord(Base): attribution_window_days: Mapped[int] = mapped_column( Integer, server_default="28", nullable=False, ) - published_at: Mapped[datetime | None] = mapped_column(nullable=True) - window_end_at: Mapped[datetime | None] = mapped_column(nullable=True) + published_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) + window_end_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) status: Mapped[str] = mapped_column( String(20), server_default="tracking", nullable=False, ) attributed_dimensions: Mapped[dict | None] = mapped_column(JSONType, nullable=True) roi_percentage: Mapped[float | None] = mapped_column(Float, 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/brand.py b/backend/app/models/brand.py index bd56c30..60e44f8 100644 --- a/backend/app/models/brand.py +++ b/backend/app/models/brand.py @@ -40,13 +40,15 @@ class Brand(Base): platforms: Mapped[list] = mapped_column(JSONType, default=list, nullable=False) frequency: Mapped[str] = mapped_column(String(20), default="weekly", nullable=False) status: Mapped[str] = mapped_column(String(20), default="active", nullable=False) - last_queried_at: Mapped[datetime | None] = mapped_column(DateTime, nullable=True) - next_query_at: Mapped[datetime | None] = mapped_column(DateTime, nullable=True) + last_queried_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) + next_query_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/brand_knowledge.py b/backend/app/models/brand_knowledge.py index cca0887..0c3057a 100644 --- a/backend/app/models/brand_knowledge.py +++ b/backend/app/models/brand_knowledge.py @@ -1,7 +1,7 @@ import uuid from datetime import datetime -from sqlalchemy import String, Integer, Boolean, ForeignKey, Index, func, Text +from sqlalchemy import String, Integer, Boolean, DateTime, ForeignKey, Index, func, Text from sqlalchemy import Uuid from sqlalchemy.orm import Mapped, mapped_column, relationship @@ -32,10 +32,12 @@ class BrandKnowledge(Base): 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, @@ -81,6 +83,7 @@ class Keyword(Base): competition_level: Mapped[str | None] = mapped_column(String(20), 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, ) diff --git a/backend/app/models/citation_record.py b/backend/app/models/citation_record.py index 2bfca19..c691ef5 100644 --- a/backend/app/models/citation_record.py +++ b/backend/app/models/citation_record.py @@ -1,7 +1,7 @@ import uuid from datetime import datetime -from sqlalchemy import String, Boolean, Integer, Float, ForeignKey, Index, func, Text +from sqlalchemy import String, Boolean, Integer, Float, DateTime, ForeignKey, Index, func, Text from sqlalchemy import Uuid, JSON from sqlalchemy.orm import Mapped, mapped_column, relationship @@ -65,6 +65,7 @@ class CitationRecord(Base): comment="AI回答原始文本(去掉data_source标记后的纯文本)", ) queried_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), server_default=func.now(), nullable=False, ) diff --git a/backend/app/models/competitor.py b/backend/app/models/competitor.py index 46e9814..edb5a5d 100644 --- a/backend/app/models/competitor.py +++ b/backend/app/models/competitor.py @@ -37,6 +37,7 @@ class Competitor(Base): name: Mapped[str] = mapped_column(String(50), nullable=False) aliases: Mapped[list] = mapped_column(JSONType, default=list, nullable=False) created_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), server_default=func.now(), nullable=False, ) diff --git a/backend/app/models/competitor_insight.py b/backend/app/models/competitor_insight.py index b5b1582..3595e61 100644 --- a/backend/app/models/competitor_insight.py +++ b/backend/app/models/competitor_insight.py @@ -1,7 +1,7 @@ import uuid from datetime import datetime -from sqlalchemy import String, Float, Integer, ForeignKey, Index, func +from sqlalchemy import String, Float, Integer, DateTime, ForeignKey, Index, func from sqlalchemy import Uuid from sqlalchemy.dialects.postgresql import JSONB from sqlalchemy.orm import Mapped, mapped_column @@ -49,10 +49,12 @@ class CompetitorInsight(Base): confidence: Mapped[str] = mapped_column(String(20), default="medium", nullable=False) period_days: Mapped[int] = mapped_column(Integer, default=30, 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, diff --git a/backend/app/models/content.py b/backend/app/models/content.py index 8075c38..4c0d47e 100644 --- a/backend/app/models/content.py +++ b/backend/app/models/content.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 @@ -40,10 +40,12 @@ class Content(Base): ) current_version: Mapped[int] = mapped_column(Integer, server_default="1", 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, @@ -98,6 +100,7 @@ class ContentVersion(Base): nullable=True, ) created_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), server_default=func.now(), nullable=False, ) @@ -137,6 +140,7 @@ class ContentReview(Base): status: Mapped[str] = mapped_column(String(20), nullable=False) comments: Mapped[str | None] = mapped_column(Text, nullable=True) created_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), server_default=func.now(), nullable=False, ) diff --git a/backend/app/models/distribution.py b/backend/app/models/distribution.py index 9c1d142..b228f50 100644 --- a/backend/app/models/distribution.py +++ b/backend/app/models/distribution.py @@ -2,7 +2,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 @@ -38,10 +38,12 @@ class DistributionSchedule(Base): 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/geo_plan.py b/backend/app/models/geo_plan.py index 23c5f04..bfbd84e 100644 --- a/backend/app/models/geo_plan.py +++ b/backend/app/models/geo_plan.py @@ -1,7 +1,7 @@ import uuid from datetime import datetime -from sqlalchemy import String, Integer, Text, ForeignKey, Index, func +from sqlalchemy import String, Integer, Text, DateTime, ForeignKey, Index, func from sqlalchemy import Uuid from sqlalchemy.orm import Mapped, mapped_column, relationship @@ -41,10 +41,12 @@ class GeoPlan(Base): 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, @@ -92,12 +94,14 @@ class GeoPlanAction(Base): sort_order: Mapped[int] = mapped_column( Integer, server_default="0", nullable=False, ) - completed_at: Mapped[datetime | None] = mapped_column(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, ) updated_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False, diff --git a/backend/app/models/query.py b/backend/app/models/query.py index d13478a..9ef182a 100644 --- a/backend/app/models/query.py +++ b/backend/app/models/query.py @@ -1,7 +1,7 @@ import uuid from datetime import datetime -from sqlalchemy import String, ForeignKey, Index, func +from sqlalchemy import String, DateTime, ForeignKey, Index, func from sqlalchemy import Uuid, JSON from sqlalchemy.orm import Mapped, mapped_column, relationship @@ -27,13 +27,15 @@ class Query(Base): platforms: Mapped[list] = mapped_column(JSON, nullable=False, default=lambda: ["wenxin", "kimi"]) frequency: Mapped[str] = mapped_column(String(20), default="weekly") status: Mapped[str] = mapped_column(String(20), default="active") - last_queried_at: Mapped[datetime | None] = mapped_column(nullable=True) - next_query_at: Mapped[datetime | None] = mapped_column(nullable=True) + last_queried_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) + next_query_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/suggestion.py b/backend/app/models/suggestion.py index 01efaeb..d48bbad 100644 --- a/backend/app/models/suggestion.py +++ b/backend/app/models/suggestion.py @@ -49,10 +49,12 @@ class Suggestion(Base): comment="状态: pending/in_progress/completed/dismissed", ) generated_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,