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)