from enum import Enum as Enumeration import time from sqlalchemy import Boolean, Column, Enum, Integer, ForeignKey, JSON as JSONType from sqlalchemy.orm import relationship # from sqlalchemy.dialects.postgresql import JSONB from orm.author import Author from services.db import Base class NotificationEntity(Enumeration): REACTION = 1 SHOUT = 2 FOLLOWER = 3 class NotificationAction(Enumeration): CREATE = 1 UPDATE = 2 DELETE = 3 SEEN = 4 FOLLOW = 5 UNFOLLOW = 6 class NotificationSeen(Base): __tablename__ = "notification_seen" viewer = Column(ForeignKey("author.id")) notification = Column(ForeignKey("notification.id")) class Notification(Base): __tablename__ = "notification" created_at = Column(Integer, default=lambda: int(time.time())) entity = Column(Enum(NotificationEntity), nullable=False) action = Column(Enum(NotificationAction), nullable=False) payload = Column(JSONType, nullable=True) seen = relationship(lambda: Author, secondary="notification_seen")