from datetime import datetime from typing import Optional, List from sqlalchemy import Column, Integer, String, Boolean, DateTime, ForeignKey, Text, JSON from sqlalchemy.orm import relationship from backend.database import Base class Channel(Base): __tablename__ = "channels" id = Column(Integer, primary_key=True, index=True) name = Column(String, unique=True, nullable=False, index=True) type = Column(String, nullable=False) config = Column(JSON, default=dict) tags = Column(JSON, default=list) is_active = Column(Boolean, default=True) created_at = Column(DateTime, default=datetime.utcnow) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) notifications = relationship("Notification", back_populates="channel") class Notification(Base): __tablename__ = "notifications" id = Column(Integer, primary_key=True, index=True) channel_id = Column(Integer, ForeignKey("channels.id")) title = Column(String, nullable=True) body = Column(Text, nullable=False) priority = Column(String, default="normal") status = Column(String, default="pending") error_msg = Column(Text, nullable=True) sent_at = Column(DateTime, nullable=True) created_at = Column(DateTime, default=datetime.utcnow) channel = relationship("Channel", back_populates="notifications")