feat(articles): تاریخ انتشار خودکار توسط سرور در لحظهٔ انتشار

problem: ستون date نمایشی دستی پر می‌شد و از لحظهٔ واقعی انتشار جدا می‌افتاد.
- ستون published_at (timestamptz) + مهاجرت idempotent؛ مقالات منتشرشدهٔ قدیمی
  از updated_at عقب‌گرد پر می‌شوند
- _apply_publish_timestamp در PUT و PATCH: در گذار draft→published مقدار
  published_at ثبت می‌شود؛ ستون date/date_en فقط اگر خالی باشد از آن پر می‌شود
  (تاریخ درستِ موجود را خراب نمی‌کند)
- پنل: فیلد «تاریخ انتشار» فقط‌خواندنی شد (نمایش شمسی؛ پیش از انتشار: «در لحظهٔ
  انتشار ثبت می‌شود»)
- ArticleOut: published_at نمایان شد
This commit is contained in:
aramesh-site deploy
2026-10-25 20:03:23 +00:00
parent aa13d41b6d
commit fb8b8bbd61
5 changed files with 82 additions and 28 deletions
+4
View File
@@ -153,6 +153,10 @@ def run_ddl_migrations() -> None:
conn.execute(
text("ALTER TABLE articles ADD COLUMN IF NOT EXISTS seo_keyphrase VARCHAR(128) NOT NULL DEFAULT ''")
)
# لحظهٔ انتشار مقاله — تاریخ نمایشی از آن مشتق می‌شود (نه دستی)
conn.execute(text("ALTER TABLE articles ADD COLUMN IF NOT EXISTS published_at TIMESTAMP WITH TIME ZONE"))
# عقب‌گرد یک‌باره: مقالات منتشرشده‌ای که تاریخ ندارند، از updated_at پر می‌شوند
conn.execute(text("UPDATE articles SET published_at = COALESCE(updated_at, NOW()) WHERE status='published' AND published_at IS NULL"))
# نشانی/کاربری پروژه: نشانی انگلیسی (ترانویسی) از ۱۲۸ نویسه بلندتر می‌شود
conn.execute(text("ALTER TABLE projects ALTER COLUMN location TYPE VARCHAR(256)"))
conn.execute(text("ALTER TABLE projects ALTER COLUMN location_en TYPE VARCHAR(256)"))