import time from enum import Enum as Enumeration from sqlalchemy import JSON, Column, ForeignKey, Integer, String from sqlalchemy.orm import relationship from orm.author import Author from services.db import Base class NotificationEntity(Enumeration): REACTION = "reaction" SHOUT = "shout" FOLLOWER = "follower" class NotificationAction(Enumeration): CREATE = "create" UPDATE = "update" DELETE = "delete" SEEN = "seen" FOLLOW = "follow" UNFOLLOW = "unfollow" 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, server_default=str(int(time.time()))) entity = Column(String, nullable=False) action = Column(String, nullable=False) payload = Column(JSON, nullable=True) seen = relationship(lambda: Author, secondary="notification_seen")