35 lines
1.3 KiB
Python
35 lines
1.3 KiB
Python
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")
|