from sqlalchemy import Boolean, Column, Enum, Float, Integer, String from sqlalchemy.dialects.postgresql import JSONB from sqlalchemy_json import mutable_json_type from server.constants.messages import PushMessagePriority, PushMessageStatus from server.db.models.base import Base from server.db.models.core import AppRelatedMixin class MessageMixin(AppRelatedMixin): id = Column(Integer, primary_key=True, autoincrement=True) public = Column(Boolean, default=True, nullable=False) ttl = Column(Integer) message_id = Column(Integer, nullable=True, default=None) event_id = Column(Integer, nullable=True, default=None) account_id = Column(Integer, nullable=True, default=None) external_id = Column(String(80), nullable=True, default=None) meta = Column(mutable_json_type(dbtype=JSONB, nested=True), nullable=True, default=None) data = Column(mutable_json_type(dbtype=JSONB, nested=True), nullable=True, default=None) class Message(MessageMixin, Base): __tablename__ = "messages" class FeedMessage(MessageMixin, Base): __tablename__ = "feed_messages" status = Column(Boolean, nullable=False, default=True) # 1=new class PushMessage(MessageMixin, Base): __tablename__ = "push_messages" device_id = Column(Integer, nullable=True, default=None) receipt = Column(String(255), nullable=True, default=None) status = Column(Enum(PushMessageStatus), default=PushMessageStatus.PROCESSING, nullable=False) receipt_id = Column(String(80), default=None) to = Column(String(255), nullable=False) title = Column(String(255), nullable=True) body = Column(String, nullable=True) sound = Column(String(50), nullable=True) ttl = Column(Integer, nullable=True) expiration = Column(Float, nullable=True) priority = Column(Enum(PushMessagePriority), nullable=True) badge = Column(Integer, nullable=True) category = Column(String(255), nullable=True) channel_id = Column(String(255), nullable=True) display_in_foreground = Column(Boolean, nullable=False, default=False) class Event(AppRelatedMixin, Base): __tablename__ = "events" id = Column(Integer, primary_key=True, autoincrement=True) ttl = Column(Integer) code = Column(String(50), nullable=False) public = Column(Boolean, default=True, nullable=False) event_id = Column(Integer, nullable=True, default=None) external_id = Column(String(80), nullable=True, default=None) meta = Column(mutable_json_type(dbtype=JSONB, nested=True), nullable=True, default=None) data = Column(mutable_json_type(dbtype=JSONB, nested=True), nullable=True, default=None)