fix: add DateTime(timezone=True) to Batch 1c auxiliary path models (9 files, 23 columns) and remove orphan monitoring_record.py

This commit is contained in:
chiguyong 2026-06-01 20:48:39 +08:00
parent 14cafa66c6
commit 792d9ebe53
10 changed files with 30 additions and 118 deletions

View File

@ -1,7 +1,7 @@
import uuid import uuid
from datetime import datetime from datetime import datetime
from sqlalchemy import String, Boolean, Float, ForeignKey, Index, func, Text from sqlalchemy import String, Boolean, Float, ForeignKey, Index, func, Text, DateTime
from sqlalchemy import Uuid, JSON from sqlalchemy import Uuid, JSON
from sqlalchemy.dialects.postgresql import JSONB from sqlalchemy.dialects.postgresql import JSONB
from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.orm import Mapped, mapped_column, relationship
@ -58,6 +58,7 @@ class Alert(Base):
Boolean, default=False, nullable=False, Boolean, default=False, nullable=False,
) )
created_at: Mapped[datetime] = mapped_column( created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(), server_default=func.now(),
nullable=False, nullable=False,
) )

View File

@ -1,7 +1,7 @@
import uuid import uuid
from datetime import datetime from datetime import datetime
from sqlalchemy import String, Boolean, Float, ForeignKey, Index, func from sqlalchemy import String, Boolean, Float, ForeignKey, Index, func, DateTime
from sqlalchemy import Uuid from sqlalchemy import Uuid
from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.orm import Mapped, mapped_column, relationship
@ -39,10 +39,12 @@ class AlertSetting(Base):
comment="阈值如评分下降超过5分触发", comment="阈值如评分下降超过5分触发",
) )
created_at: Mapped[datetime] = mapped_column( created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(), server_default=func.now(),
nullable=False, nullable=False,
) )
updated_at: Mapped[datetime] = mapped_column( updated_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(), server_default=func.now(),
onupdate=func.now(), onupdate=func.now(),
nullable=False, nullable=False,

View File

@ -1,7 +1,7 @@
import uuid import uuid
from datetime import datetime from datetime import datetime
from sqlalchemy import String, Integer, ForeignKey, Index, func, Text from sqlalchemy import String, Integer, ForeignKey, Index, func, Text, DateTime
from sqlalchemy import Uuid from sqlalchemy import Uuid
from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.orm import Mapped, mapped_column, relationship
@ -42,10 +42,12 @@ class KnowledgeBase(Base):
nullable=True, nullable=True,
) )
created_at: Mapped[datetime] = mapped_column( created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(), server_default=func.now(),
nullable=False, nullable=False,
) )
updated_at: Mapped[datetime] = mapped_column( updated_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(), server_default=func.now(),
onupdate=func.now(), onupdate=func.now(),
nullable=False, nullable=False,
@ -93,10 +95,12 @@ class KnowledgeDocument(Base):
# mapped_column("metadata") to avoid SQLAlchemy reserved keyword conflict # mapped_column("metadata") to avoid SQLAlchemy reserved keyword conflict
extra_metadata: Mapped[dict | None] = mapped_column("metadata", JSONType, nullable=True) extra_metadata: Mapped[dict | None] = mapped_column("metadata", JSONType, nullable=True)
created_at: Mapped[datetime] = mapped_column( created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(), server_default=func.now(),
nullable=False, nullable=False,
) )
updated_at: Mapped[datetime] = mapped_column( updated_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(), server_default=func.now(),
onupdate=func.now(), onupdate=func.now(),
nullable=False, nullable=False,
@ -153,6 +157,7 @@ class KnowledgeChunk(Base):
# mapped_column("metadata") to avoid SQLAlchemy reserved keyword conflict # mapped_column("metadata") to avoid SQLAlchemy reserved keyword conflict
extra_metadata: Mapped[dict | None] = mapped_column("metadata", JSONType, nullable=True) extra_metadata: Mapped[dict | None] = mapped_column("metadata", JSONType, nullable=True)
created_at: Mapped[datetime] = mapped_column( created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(), server_default=func.now(),
nullable=False, nullable=False,
) )
@ -192,6 +197,7 @@ class KnowledgeSearchLog(Base):
results_count: Mapped[int] = mapped_column(Integer, server_default="0", nullable=False) results_count: Mapped[int] = mapped_column(Integer, server_default="0", nullable=False)
latency_ms: Mapped[int] = mapped_column(Integer, server_default="0", nullable=False) latency_ms: Mapped[int] = mapped_column(Integer, server_default="0", nullable=False)
created_at: Mapped[datetime] = mapped_column( created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(), server_default=func.now(),
nullable=False, nullable=False,
) )

View File

@ -83,10 +83,12 @@ class KnowledgeEntity(Base):
# 元数据 # 元数据
created_at: Mapped[datetime] = mapped_column( created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(), server_default=func.now(),
nullable=False, nullable=False,
) )
updated_at: Mapped[datetime] = mapped_column( updated_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(), server_default=func.now(),
onupdate=func.now(), onupdate=func.now(),
nullable=False, nullable=False,
@ -151,6 +153,7 @@ class KnowledgeRelation(Base):
# 元数据 # 元数据
created_at: Mapped[datetime] = mapped_column( created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(), server_default=func.now(),
nullable=False, nullable=False,
) )

View File

@ -1,7 +1,7 @@
import uuid import uuid
from datetime import datetime from datetime import datetime
from sqlalchemy import String, Integer, ForeignKey, Index, func, Text from sqlalchemy import String, Integer, ForeignKey, Index, func, Text, DateTime
from sqlalchemy import Uuid from sqlalchemy import Uuid
from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.orm import Mapped, mapped_column, relationship
@ -31,10 +31,12 @@ class LifecycleProject(Base):
nullable=True, nullable=True,
) )
created_at: Mapped[datetime] = mapped_column( created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(), server_default=func.now(),
nullable=False, nullable=False,
) )
updated_at: Mapped[datetime] = mapped_column( updated_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(), server_default=func.now(),
onupdate=func.now(), onupdate=func.now(),
nullable=False, nullable=False,
@ -73,8 +75,8 @@ class ProjectStage(Base):
) )
stage_number: Mapped[int] = mapped_column(Integer, nullable=False) stage_number: Mapped[int] = mapped_column(Integer, nullable=False)
status: Mapped[str] = mapped_column(String(20), server_default="pending", nullable=False) status: Mapped[str] = mapped_column(String(20), server_default="pending", nullable=False)
started_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(nullable=True) completed_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True)
notes: Mapped[str | None] = mapped_column(Text, nullable=True) notes: Mapped[str | None] = mapped_column(Text, nullable=True)
metrics: Mapped[dict | None] = mapped_column(JSONType, nullable=True) metrics: Mapped[dict | None] = mapped_column(JSONType, nullable=True)

View File

@ -1,108 +0,0 @@
import uuid
from datetime import datetime
from sqlalchemy import String, Integer, Float, ForeignKey, Index, func
from sqlalchemy import Uuid
from sqlalchemy.orm import Mapped, mapped_column, relationship
from app.database import Base, JSONType
class MonitoringRecord(Base):
__tablename__ = "monitoring_records"
id: Mapped[uuid.UUID] = mapped_column(
Uuid(as_uuid=True),
primary_key=True,
default=uuid.uuid4,
)
user_id: Mapped[str] = mapped_column(
String(36),
ForeignKey("users.id", ondelete="CASCADE"),
nullable=False,
)
brand_id: Mapped[uuid.UUID] = mapped_column(
Uuid(as_uuid=True),
ForeignKey("brands.id", ondelete="CASCADE"),
nullable=False,
)
content_id: Mapped[uuid.UUID | None] = mapped_column(
Uuid(as_uuid=True),
ForeignKey("contents.id", ondelete="SET NULL"),
nullable=True,
)
query_id: Mapped[uuid.UUID | None] = mapped_column(
Uuid(as_uuid=True),
ForeignKey("queries.id", ondelete="SET NULL"),
nullable=True,
)
task_type: Mapped[str] = mapped_column(String(50), nullable=False)
status: Mapped[str] = mapped_column(
String(20), server_default="pending", nullable=False,
)
baseline_data: Mapped[dict | None] = mapped_column(JSONType, nullable=True)
current_data: Mapped[dict | None] = mapped_column(JSONType, nullable=True)
change_report: Mapped[dict | None] = mapped_column(JSONType, nullable=True)
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)
created_at: Mapped[datetime] = mapped_column(
server_default=func.now(),
nullable=False,
)
updated_at: Mapped[datetime] = mapped_column(
server_default=func.now(),
onupdate=func.now(),
nullable=False,
)
brand: Mapped["Brand"] = relationship("Brand")
user: Mapped["User"] = relationship("User")
__table_args__ = (
Index("idx_monitoring_records_user_id", "user_id"),
Index("idx_monitoring_records_brand_id", "brand_id"),
Index("idx_monitoring_records_status", "status"),
Index("idx_monitoring_records_next_check_at", "next_check_at"),
)
class ContentBaseline(Base):
__tablename__ = "content_baselines"
id: Mapped[uuid.UUID] = mapped_column(
Uuid(as_uuid=True),
primary_key=True,
default=uuid.uuid4,
)
brand_id: Mapped[uuid.UUID] = mapped_column(
Uuid(as_uuid=True),
ForeignKey("brands.id", ondelete="CASCADE"),
nullable=False,
)
content_id: Mapped[uuid.UUID | None] = mapped_column(
Uuid(as_uuid=True),
ForeignKey("contents.id", ondelete="SET NULL"),
nullable=True,
)
citation_count: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
positive_ratio: Mapped[float] = mapped_column(Float, nullable=False, default=0.0)
avg_rank: Mapped[float] = mapped_column(Float, nullable=False, default=0.0)
platform_data: Mapped[dict | None] = mapped_column(JSONType, nullable=True)
recorded_at: Mapped[datetime] = mapped_column(
server_default=func.now(),
nullable=False,
)
created_at: Mapped[datetime] = mapped_column(
server_default=func.now(),
nullable=False,
)
brand: Mapped["Brand"] = relationship("Brand")
__table_args__ = (
Index("idx_content_baselines_brand_id", "brand_id"),
Index("idx_content_baselines_content_id", "content_id"),
)

View File

@ -1,7 +1,7 @@
import uuid import uuid
from datetime import datetime from datetime import datetime
from sqlalchemy import String, Integer, ForeignKey, Index, func, Text from sqlalchemy import String, Integer, ForeignKey, Index, func, Text, DateTime
from sqlalchemy import Uuid from sqlalchemy import Uuid
from sqlalchemy.dialects.postgresql import JSONB from sqlalchemy.dialects.postgresql import JSONB
from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.orm import Mapped, mapped_column, relationship
@ -24,10 +24,12 @@ class Organization(Base):
plan: Mapped[str] = mapped_column(String(20), server_default="free", nullable=False) plan: Mapped[str] = mapped_column(String(20), server_default="free", nullable=False)
max_members: Mapped[int] = mapped_column(Integer, server_default="5", nullable=False) max_members: Mapped[int] = mapped_column(Integer, server_default="5", nullable=False)
created_at: Mapped[datetime] = mapped_column( created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(), server_default=func.now(),
nullable=False, nullable=False,
) )
updated_at: Mapped[datetime] = mapped_column( updated_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(), server_default=func.now(),
onupdate=func.now(), onupdate=func.now(),
nullable=False, nullable=False,
@ -84,6 +86,7 @@ class OrgMember(Base):
) )
role: Mapped[str] = mapped_column(String(20), server_default="viewer", nullable=False) role: Mapped[str] = mapped_column(String(20), server_default="viewer", nullable=False)
joined_at: Mapped[datetime] = mapped_column( joined_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(), server_default=func.now(),
nullable=False, nullable=False,
) )

View File

@ -1,7 +1,7 @@
import uuid import uuid
from datetime import datetime from datetime import datetime
from sqlalchemy import String, Boolean, ForeignKey, Index, func, Text from sqlalchemy import String, Boolean, ForeignKey, Index, func, Text, DateTime
from sqlalchemy import Uuid from sqlalchemy import Uuid
from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.orm import Mapped, mapped_column, relationship
@ -24,6 +24,7 @@ class PlatformRule(Base):
severity: Mapped[str] = mapped_column(String(20), nullable=False) severity: Mapped[str] = mapped_column(String(20), nullable=False)
is_active: Mapped[bool] = mapped_column(Boolean, server_default="true", nullable=False) is_active: Mapped[bool] = mapped_column(Boolean, server_default="true", nullable=False)
updated_at: Mapped[datetime] = mapped_column( updated_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(), server_default=func.now(),
onupdate=func.now(), onupdate=func.now(),
nullable=False, nullable=False,

View File

@ -1,7 +1,7 @@
import uuid import uuid
from datetime import datetime from datetime import datetime
from sqlalchemy import String, Integer, Index, func from sqlalchemy import String, Integer, Index, func, DateTime
from sqlalchemy import Uuid from sqlalchemy import Uuid
from sqlalchemy.orm import Mapped, mapped_column from sqlalchemy.orm import Mapped, mapped_column
@ -22,7 +22,7 @@ class PlatformRuleVersion(Base):
rule_data: Mapped[dict] = mapped_column(JSONType, nullable=False) rule_data: Mapped[dict] = mapped_column(JSONType, nullable=False)
change_summary: Mapped[str | None] = mapped_column(String(500), nullable=True) change_summary: Mapped[str | None] = mapped_column(String(500), nullable=True)
created_by: Mapped[str | None] = mapped_column(String(100), nullable=True) created_by: Mapped[str | None] = mapped_column(String(100), nullable=True)
created_at: Mapped[datetime] = mapped_column(server_default=func.now()) created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
__table_args__ = ( __table_args__ = (
Index("idx_rule_versions_rule_id", "rule_id"), Index("idx_rule_versions_rule_id", "rule_id"),

View File

@ -52,10 +52,12 @@ class SchemaSuggestion(Base):
JSONType, nullable=True, JSONType, nullable=True,
) )
created_at: Mapped[datetime] = mapped_column( created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(), server_default=func.now(),
nullable=False, nullable=False,
) )
updated_at: Mapped[datetime] = mapped_column( updated_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(), server_default=func.now(),
onupdate=func.now(), onupdate=func.now(),
nullable=False, nullable=False,