from enum import Enum as Enumeration import time from sqlalchemy import Column, Enum, Integer, ForeignKey, JSON as JSONType from sqlalchemy.orm import relationship 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")