from enum import Enum as Enumeration from sqlalchemy import JSON as JSONType from sqlalchemy import Column, ForeignKey, Integer, String from sqlalchemy.orm import relationship from orm.author import Author from services.db import Base import time 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(JSONType, nullable=True) seen = relationship(lambda: Author, secondary="notification_seen")