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 配置
|
||||||
# ============================================================
|
# ============================================================
|
||||||
REDIS_URL=redis://localhost:6379/0
|
REDIS_URL=redis://localhost:6380/0
|
||||||
|
|
||||||
# 是否启用Redis缓存
|
# 是否启用Redis缓存
|
||||||
ENABLE_REDIS=true
|
ENABLE_REDIS=true
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,7 @@ path_separator = os
|
||||||
# database URL. This is consumed by the user-maintained env.py script only.
|
# 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
|
# other means of configuring database URLs may be customized within the env.py
|
||||||
# file.
|
# 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]
|
[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', '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('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:
|
def downgrade() -> None:
|
||||||
op.alter_column('users', 'lastLoginAt', type_=sa.DateTime(), existing_type=sa.DateTime(timezone=True))
|
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', '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('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...
|
platform: Mapped[str] = mapped_column(String(50)) # wechat/zhihu/xiaohongshu...
|
||||||
published_url: Mapped[str | None] = mapped_column(String(500), nullable=True)
|
published_url: Mapped[str | None] = mapped_column(String(500), nullable=True)
|
||||||
status: Mapped[str] = mapped_column(String(20), default="draft") # draft/published/archived
|
status: Mapped[str] = mapped_column(String(20), default="draft") # draft/published/archived
|
||||||
published_at: Mapped[datetime | None] = mapped_column(DateTime, nullable=True)
|
published_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True)
|
||||||
created_at: Mapped[datetime] = mapped_column(DateTime, server_default=func.now())
|
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
|
||||||
|
|
||||||
metrics: Mapped[list["ContentMetrics"]] = relationship(back_populates="publish_record")
|
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()))
|
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"))
|
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)
|
views: Mapped[int] = mapped_column(Integer, default=0)
|
||||||
|
|
@ -60,4 +60,6 @@ class OptimizationInsight(Base):
|
||||||
recommendation: Mapped[str] = mapped_column(Text)
|
recommendation: Mapped[str] = mapped_column(Text)
|
||||||
severity: Mapped[str] = mapped_column(String(20), default="info") # info/warning/success
|
severity: Mapped[str] = mapped_column(String(20), default="info") # info/warning/success
|
||||||
applied: Mapped[bool] = mapped_column(Boolean, default=False)
|
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_PASSWORD: postgres123
|
||||||
POSTGRES_DB: geo_platform
|
POSTGRES_DB: geo_platform
|
||||||
ports:
|
ports:
|
||||||
- "5432:5432"
|
- "5433:5432"
|
||||||
volumes:
|
volumes:
|
||||||
- postgres_data:/var/lib/postgresql/data
|
- postgres_data:/var/lib/postgresql/data
|
||||||
- ./backend/init-db.sh:/docker-entrypoint-initdb.d/01-install-pgvector.sh
|
- ./backend/init-db.sh:/docker-entrypoint-initdb.d/01-install-pgvector.sh
|
||||||
|
|
@ -32,7 +32,7 @@ services:
|
||||||
container_name: geo_redis
|
container_name: geo_redis
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
ports:
|
||||||
- "6379:6379"
|
- "6380:6379"
|
||||||
volumes:
|
volumes:
|
||||||
- redis_data:/data
|
- redis_data:/data
|
||||||
healthcheck:
|
healthcheck:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue