Spaces:
Sleeping
Sleeping
| from datetime import datetime, timezone | |
| from sqlalchemy import Column, Integer, String, Boolean, JSON, DateTime | |
| from app.db.base import Base | |
| class HomeSection(Base): | |
| __tablename__ = "home_sections" | |
| id = Column(Integer, primary_key=True, autoincrement=True) | |
| title_ar = Column(String(255), nullable=False) | |
| title_en = Column(String(255), nullable=False) | |
| subtitle_ar = Column(String(500), nullable=True) | |
| subtitle_en = Column(String(500), nullable=True) | |
| # Types: "AUTOMATIC" (based on rule) or "MANUAL" (specific product IDs) | |
| section_type = Column(String(50), default="AUTOMATIC", nullable=False) | |
| # JSON rule for automatic: {"sort_by": "created_at", "limit": 8, "has_discount": true, "category_id": 1} | |
| rule = Column(JSON, nullable=True) | |
| # List of product IDs for manual: [1001, 1002, 1003] | |
| selected_product_ids = Column(JSON, nullable=True) | |
| display_order = Column(Integer, default=0, nullable=False) | |
| is_active = Column(Boolean, default=True, nullable=False) | |
| # UI styling | |
| color_theme = Column(String(50), default="emerald", nullable=False) # emerald, amber, red, blue, etc. | |
| icon = Column(String(50), nullable=True) # Emoji or icon name | |
| created_at = Column(DateTime, default=lambda: datetime.now(timezone.utc), nullable=False) | |
| updated_at = Column(DateTime, default=lambda: datetime.now(timezone.utc), onupdate=lambda: datetime.now(timezone.utc), nullable=False) | |