fix: add DateTime(timezone=True) to analytics.py (4 columns), update migration and port config
- analytics.py: 4 DateTime columns now timezone-aware (99 total, 0 remaining) - Migration script updated with publish_records, content_metrics, optimization_insights - Docker Compose: db port 5433, redis port 6380 (avoid conflicts with fischerx) - .env files: DATABASE_URL and REDIS_URL updated to new ports - alembic.ini: updated to localhost:5433
This commit is contained in:
parent
eabd23d093
commit
d5f752f419
|
|
@ -55,12 +55,12 @@ ENABLE_LLM=true
|
|||
# ============================================================
|
||||
# 数据库配置
|
||||
# ============================================================
|
||||
DATABASE_URL=postgresql+asyncpg://postgres:postgres123@localhost:5432/geo_platform
|
||||
DATABASE_URL=postgresql+asyncpg://postgres:postgres123@localhost:5433/geo_platform
|
||||
|
||||
# ============================================================
|
||||
# Redis 配置
|
||||
# ============================================================
|
||||
REDIS_URL=redis://localhost:6379/0
|
||||
REDIS_URL=redis://localhost:6380/0
|
||||
|
||||
# 是否启用Redis缓存
|
||||
ENABLE_REDIS=true
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ path_separator = os
|
|||
# database URL. This is consumed by the user-maintained env.py script only.
|
||||
# other means of configuring database URLs may be customized within the env.py
|
||||
# file.
|
||||
sqlalchemy.url = postgresql+asyncpg://postgres:postgres123@db:5432/geo_platform
|
||||
sqlalchemy.url = postgresql+asyncpg://postgres:postgres123@127.0.0.1:5433/geo_platform
|
||||
|
||||
|
||||
[post_write_hooks]
|
||||
|
|
|
|||
|
|
@ -141,6 +141,11 @@ def upgrade() -> None:
|
|||
op.alter_column('diagnosis_records', 'created_at', type_=sa.DateTime(timezone=True), existing_type=sa.DateTime(), postgresql_using='created_at AT TIME ZONE \'UTC\'')
|
||||
op.alter_column('diagnosis_records', 'completed_at', type_=sa.DateTime(timezone=True), existing_type=sa.DateTime(), postgresql_using='completed_at AT TIME ZONE \'UTC\'')
|
||||
|
||||
op.alter_column('publish_records', 'published_at', type_=sa.DateTime(timezone=True), existing_type=sa.DateTime(), postgresql_using='published_at AT TIME ZONE \'UTC\'')
|
||||
op.alter_column('publish_records', 'created_at', type_=sa.DateTime(timezone=True), existing_type=sa.DateTime(), postgresql_using='created_at AT TIME ZONE \'UTC\'')
|
||||
op.alter_column('content_metrics', 'recorded_at', type_=sa.DateTime(timezone=True), existing_type=sa.DateTime(), postgresql_using='recorded_at AT TIME ZONE \'UTC\'')
|
||||
op.alter_column('optimization_insights', 'created_at', type_=sa.DateTime(timezone=True), existing_type=sa.DateTime(), postgresql_using='created_at AT TIME ZONE \'UTC\'')
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
op.alter_column('users', 'lastLoginAt', type_=sa.DateTime(), existing_type=sa.DateTime(timezone=True))
|
||||
|
|
@ -266,3 +271,8 @@ def downgrade() -> None:
|
|||
|
||||
op.alter_column('diagnosis_records', 'created_at', type_=sa.DateTime(), existing_type=sa.DateTime(timezone=True))
|
||||
op.alter_column('diagnosis_records', 'completed_at', type_=sa.DateTime(), existing_type=sa.DateTime(timezone=True))
|
||||
|
||||
op.alter_column('publish_records', 'published_at', type_=sa.DateTime(), existing_type=sa.DateTime(timezone=True))
|
||||
op.alter_column('publish_records', 'created_at', type_=sa.DateTime(), existing_type=sa.DateTime(timezone=True))
|
||||
op.alter_column('content_metrics', 'recorded_at', type_=sa.DateTime(), existing_type=sa.DateTime(timezone=True))
|
||||
op.alter_column('optimization_insights', 'created_at', type_=sa.DateTime(), existing_type=sa.DateTime(timezone=True))
|
||||
|
|
|
|||
|
|
@ -16,8 +16,8 @@ class PublishRecord(Base):
|
|||
platform: Mapped[str] = mapped_column(String(50)) # wechat/zhihu/xiaohongshu...
|
||||
published_url: Mapped[str | None] = mapped_column(String(500), nullable=True)
|
||||
status: Mapped[str] = mapped_column(String(20), default="draft") # draft/published/archived
|
||||
published_at: Mapped[datetime | None] = mapped_column(DateTime, nullable=True)
|
||||
created_at: Mapped[datetime] = mapped_column(DateTime, server_default=func.now())
|
||||
published_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True)
|
||||
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
|
||||
|
||||
metrics: Mapped[list["ContentMetrics"]] = relationship(back_populates="publish_record")
|
||||
|
||||
|
|
@ -27,7 +27,7 @@ class ContentMetrics(Base):
|
|||
|
||||
id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
|
||||
publish_record_id: Mapped[str] = mapped_column(String(36), ForeignKey("publish_records.id"))
|
||||
recorded_at: Mapped[datetime] = mapped_column(DateTime, server_default=func.now())
|
||||
recorded_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
|
||||
|
||||
# 互动指标
|
||||
views: Mapped[int] = mapped_column(Integer, default=0)
|
||||
|
|
@ -60,4 +60,6 @@ class OptimizationInsight(Base):
|
|||
recommendation: Mapped[str] = mapped_column(Text)
|
||||
severity: Mapped[str] = mapped_column(String(20), default="info") # info/warning/success
|
||||
applied: Mapped[bool] = mapped_column(Boolean, default=False)
|
||||
created_at: Mapped[datetime] = mapped_column(DateTime, server_default=func.now())
|
||||
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ services:
|
|||
POSTGRES_PASSWORD: postgres123
|
||||
POSTGRES_DB: geo_platform
|
||||
ports:
|
||||
- "5432:5432"
|
||||
- "5433:5432"
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
- ./backend/init-db.sh:/docker-entrypoint-initdb.d/01-install-pgvector.sh
|
||||
|
|
@ -32,7 +32,7 @@ services:
|
|||
container_name: geo_redis
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "6379:6379"
|
||||
- "6380:6379"
|
||||
volumes:
|
||||
- redis_data:/data
|
||||
healthcheck:
|
||||
|
|
|
|||
Loading…
Reference in New Issue