Spaces:
Sleeping
Sleeping
File size: 1,463 Bytes
b2be963 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 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)
|