feat(blog): جداسازی دوزبانهٔ اسلاگ/کلیدواژه/نویسنده/تگ‌ها/متا + میگریشن ۰۰۰۲، رفع «دقیقه مطالعه دقیقه»، فونت مقاله ۱۵/۱۷px، جدول تیپ‌تپ در ادیتور، مسیر /en/blog با slug_en

This commit is contained in:
aramesh-site deploy
2026-10-06 10:11:55 +00:00
parent 426dc783df
commit 61a2e95278
11 changed files with 862 additions and 197 deletions
+14
View File
@@ -119,10 +119,24 @@ class Article(Base):
faqs: Mapped[list] = mapped_column(JSON, default=list)
faqs_en: Mapped[Optional[list]] = mapped_column(JSON) # NULL یعنی بدون ترجمه — برگشت به فارسی
author_id: Mapped[int | None] = mapped_column(Integer, nullable=True) # نویسندهٔ creator — برای مقاله‌های ادمین NULL
# نام نویسنده (رشتهٔ آزاد) — سربرگ مقاله و اسکیمای Article (نوع Person برای سیگنال E-E-A-T)
author: Mapped[str] = mapped_column(String(128), default="")
# draft | published — پیش‌نویس فقط برای ادمین دیده می‌شود
status: Mapped[str] = mapped_column(String(16), default="published")
# کلمه کلیدی هدف چک‌لیست سئو — راهنمای نوشتن، در سایت نمایش داده نمی‌شود
seo_keyphrase: Mapped[str] = mapped_column(String(128), default="")
# توضیحات سئوی اختصاصی مقاله — در تگ description و اسکیما، در اولویت بر چکیده
meta_description: Mapped[str] = mapped_column(Text, default="")
meta_description_en: Mapped[str] = mapped_column(Text, default="")
# نشانی انگلیسی مقاله — مسیر /en/blog/...؛ خالی یعنی همان اسلاگ فارسی
slug_en: Mapped[str] = mapped_column(String(128), default="", index=True)
# کلمه کلیدی هدف نسخه انگلیسی — چک‌لیست سئو
seo_keyphrase_en: Mapped[str] = mapped_column(String(128), default="")
# نام نویسنده نسخه انگلیسی
author_en: Mapped[str] = mapped_column(String(128), default="")
# هشتگ‌ها/برچسب‌ها — هر زبان جدا
tags: Mapped[list] = mapped_column(JSON, default=list)
tags_en: Mapped[list] = mapped_column(JSON, default=list)
class Testimonial(Base):