diff --git a/backend/app/migrations.py b/backend/app/migrations.py index 9f7a855..ea558ef 100644 --- a/backend/app/migrations.py +++ b/backend/app/migrations.py @@ -153,6 +153,11 @@ 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 projects ALTER COLUMN location TYPE VARCHAR(256)")) + conn.execute(text("ALTER TABLE projects ALTER COLUMN location_en TYPE VARCHAR(256)")) + conn.execute(text("ALTER TABLE projects ALTER COLUMN usage TYPE VARCHAR(256)")) + conn.execute(text("ALTER TABLE projects ALTER COLUMN usage_en TYPE VARCHAR(256)")) # نام نویسنده و توضیحات سئوی اختصاصی مقاله — فیلدهایی که پنل قبلاً نمایش می‌داد ولی در دیتابیس نبودند conn.execute( text("ALTER TABLE articles ADD COLUMN IF NOT EXISTS author VARCHAR(128) NOT NULL DEFAULT ''") diff --git a/backend/app/models.py b/backend/app/models.py index 4b9d18c..32d29dc 100644 --- a/backend/app/models.py +++ b/backend/app/models.py @@ -64,8 +64,8 @@ class Project(Base): slug: Mapped[str] = mapped_column(String(128), unique=True, index=True) title: Mapped[str] = mapped_column(String(256)) title_en: Mapped[str] = mapped_column(String(256), default="") - location: Mapped[str] = mapped_column(String(128), default="") - location_en: Mapped[str] = mapped_column(String(128), default="") + location: Mapped[str] = mapped_column(String(256), default="") + location_en: Mapped[str] = mapped_column(String(256), default="") year: Mapped[str] = mapped_column(String(64), default="") year_en: Mapped[str] = mapped_column(String(64), default="") status: Mapped[str] = mapped_column(String(16), default="done") # done | progress @@ -85,12 +85,17 @@ class Project(Base): # مشخصات تکمیلی پروژه — به درخواست تیم: نوع پروژه و کاربری project_type: Mapped[str] = mapped_column(String(128), default="") project_type_en: Mapped[str] = mapped_column(String(128), default="") - usage: Mapped[str] = mapped_column(String(128), default="") - usage_en: Mapped[str] = mapped_column(String(128), default="") + usage: Mapped[str] = mapped_column(String(256), default="") + usage_en: Mapped[str] = mapped_column(String(256), default="") summary: Mapped[str] = mapped_column(Text, default="") summary_en: Mapped[str] = mapped_column(Text, default="") body: Mapped[list] = mapped_column(JSON, default=list) body_en: Mapped[list] = mapped_column(JSON, default=list) + # آخرین به‌روزرسانی رکورد — فقط برای lastmod نقشه سایت؛ ردیف‌های قدیمی NULL می‌مانند + # تا lastmod جعلی تولید نشود (با هر ذخیرهٔ پنل پر می‌شود) + updated_at: Mapped[datetime | None] = mapped_column( + DateTime(timezone=True), default=utcnow, onupdate=utcnow, nullable=True + ) class Article(Base): @@ -138,6 +143,11 @@ class Article(Base): # هشتگ‌ها/برچسب‌ها — هر زبان جدا tags: Mapped[list] = mapped_column(JSON, default=list) tags_en: Mapped[list] = mapped_column(JSON, default=list) + # آخرین به‌روزرسانی رکورد — فقط برای lastmod نقشه سایت؛ ردیف‌های قدیمی NULL می‌مانند + # تا lastmod جعلی تولید نشود (با هر ذخیرهٔ پنل پر می‌شود) + updated_at: Mapped[datetime | None] = mapped_column( + DateTime(timezone=True), default=utcnow, onupdate=utcnow, nullable=True + ) class Testimonial(Base):