feat(brand): لوگوی اختصاصی نسخهٔ انگلیسی — ستون logo_en، میگریشن ۰۰۰۳، لوکالایز و فیلد پنل (کد از قبل در تولید اجرا می‌شد)
CI / tests (push) Canceled after 0s
CI / images (push) Canceled after 0s

This commit is contained in:
aramesh-site deploy
2026-10-09 19:36:09 +00:00
parent dfbb61f75f
commit 353d4639b4
6 changed files with 37 additions and 1 deletions
+1
View File
@@ -32,6 +32,7 @@ class Brand(Base):
name: Mapped[str] = mapped_column(String(128), default="") name: Mapped[str] = mapped_column(String(128), default="")
name_en: Mapped[str] = mapped_column(String(128), default="") name_en: Mapped[str] = mapped_column(String(128), default="")
logo: Mapped[str] = mapped_column(Text, default="") logo: Mapped[str] = mapped_column(Text, default="")
logo_en: Mapped[str] = mapped_column(Text, default="")
hero: Mapped[str] = mapped_column(Text, default="") hero: Mapped[str] = mapped_column(Text, default="")
contact_bg: Mapped[str] = mapped_column(Text, default="") contact_bg: Mapped[str] = mapped_column(Text, default="")
phone: Mapped[str] = mapped_column(String(64), default="") phone: Mapped[str] = mapped_column(String(64), default="")
+2
View File
@@ -23,6 +23,7 @@ class BrandOut(ORMModel):
name: str name: str
name_en: str = "" name_en: str = ""
logo: str logo: str
logo_en: str = ""
hero: str hero: str
contact_bg: str contact_bg: str
phone: str phone: str
@@ -443,6 +444,7 @@ class BrandIn(BaseModel):
name: str = "" name: str = ""
name_en: str = "" name_en: str = ""
logo: str = "" logo: str = ""
logo_en: str = ""
hero: str = "" hero: str = ""
contact_bg: str = "" contact_bg: str = ""
phone: str = "" phone: str = ""
@@ -0,0 +1,31 @@
"""لوگوی انگلیسی برند — ستون logo_en در جدول brand.
نسخهٔ انگلیسی سایت لوگوی اختصاصی خودش را دارد؛ فیلد مشترک logo برای هر دو
زبان کافی نبود. بازگشت به فارسی با خالی‌بودن ستون انجام می‌شود.
Revision ID: 0003
Revises: 0002
Create Date: 2026-10-01
"""
from typing import Sequence, Union
import sqlalchemy as sa
from alembic import op
revision: str = "0003"
down_revision: Union[str, None] = "0002"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
cols = sa.inspect(op.get_bind()).get_columns("brand")
existing = {c["name"] for c in cols}
if "logo_en" not in existing:
op.add_column("brand", sa.Column("logo_en", sa.Text(), nullable=False, server_default=""))
def downgrade() -> None:
cols = sa.inspect(op.get_bind()).get_columns("brand")
if "logo_en" in {c["name"] for c in cols}:
op.drop_column("brand", "logo_en")
+1 -1
View File
@@ -211,7 +211,7 @@ export const ENTITIES: Record<string, EntityConfig> = {
brand: { brand: {
resource: 'brand', dataKey: 'brand', title: 'برند و تماس', kind: 'singleton', resource: 'brand', dataKey: 'brand', title: 'برند و تماس', kind: 'singleton',
titleKey: 'name', titleKey: 'name',
fields: [F('name', 'نام برند'), F('logo', 'لوگو', 'image', undefined, true), F('hero', 'تصویر هیرو', 'image', undefined, true), F('contact_bg', 'پس‌زمینه بخش تماس', 'image', undefined, true), F('phone', 'تلفن نمایشی', 'text', undefined, true), F('phone_href', 'لینک تلفن', 'text', undefined, true), F('email', 'ایمیل', 'text', undefined, true), F('address', 'نشانی', 'textarea')], fields: [F('name', 'نام برند'), F('logo', 'لوگو', 'image'), F('hero', 'تصویر هیرو', 'image', undefined, true), F('contact_bg', 'پس‌زمینه بخش تماس', 'image', undefined, true), F('phone', 'تلفن نمایشی', 'text', undefined, true), F('phone_href', 'لینک تلفن', 'text', undefined, true), F('email', 'ایمیل', 'text', undefined, true), F('address', 'نشانی', 'textarea')],
defaults: {}, defaults: {},
}, },
hero: { hero: {
+1
View File
@@ -12,6 +12,7 @@ export type BrandInfo = {
name: string name: string
name_en?: string name_en?: string
logo: string logo: string
logo_en?: string
hero: string hero: string
contact_bg: string contact_bg: string
phone: string phone: string
+1
View File
@@ -19,6 +19,7 @@ export function localizeSite(data: SiteData, lang: Lang): SiteData {
brand: { brand: {
...data.brand, ...data.brand,
name: s(data.brand.name, data.brand.name_en), name: s(data.brand.name, data.brand.name_en),
logo: s(data.brand.logo, data.brand.logo_en),
address: s(data.brand.address, data.brand.address_en), address: s(data.brand.address, data.brand.address_en),
}, },
nav: data.nav.map((n) => ({ ...n, label: s(n.label, n.label_en) })), nav: data.nav.map((n) => ({ ...n, label: s(n.label, n.label_en) })),