""" Modelo de ContentCalendar - Calendario de publicación. """ from datetime import datetime from sqlalchemy import Column, Integer, String, Time, Boolean, DateTime from sqlalchemy.dialects.postgresql import ARRAY from app.core.database import Base class ContentCalendar(Base): """Modelo para el calendario de contenido.""" __tablename__ = "content_calendar" id = Column(Integer, primary_key=True, index=True) # Programación day_of_week = Column(Integer, nullable=False) # 0=Lunes, 6=Domingo time = Column(Time, nullable=False) # Hora de publicación # Tipo de contenido content_type = Column(String(50), nullable=False) # Tipos: tip_tech, dato_curioso, producto, servicio, etc. # Plataformas platforms = Column(ARRAY(String), nullable=False) # Ejemplo: ["x", "threads", "instagram"] # Configuración is_active = Column(Boolean, default=True) requires_approval = Column(Boolean, default=False) # Restricciones opcionales category_filter = Column(String(100), nullable=True) # Solo tips de esta categoría priority = Column(Integer, default=0) # Mayor = más prioritario # Descripción description = Column(String(255), nullable=True) # Ejemplo: "Tip tech diario matutino" # Timestamps created_at = Column(DateTime, default=datetime.utcnow) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) def __repr__(self): return f"" def to_dict(self): """Convertir a diccionario.""" days = ["Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"] return { "id": self.id, "day_of_week": self.day_of_week, "day_name": days[self.day_of_week] if 0 <= self.day_of_week <= 6 else "Desconocido", "time": self.time.strftime("%H:%M") if self.time else None, "content_type": self.content_type, "platforms": self.platforms, "is_active": self.is_active, "requires_approval": self.requires_approval, "category_filter": self.category_filter, "priority": self.priority, "description": self.description, "created_at": self.created_at.isoformat() if self.created_at else None }