from enum import Enum as PyEnum from sqlalchemy import Column, DateTime, Enum, ForeignKey, Integer, String, func from sqlalchemy.orm import relationship from ._base import Base class ContentDeliveryFrequency(PyEnum): DAILY = "DAILY" WEEKLY = "WEEKLY" BI_WEEKLY = "BI_WEEKLY" MONTHLY = "MONTHLY" class User(Base): __tablename__ = "users" id = Column(Integer, primary_key=True, autoincrement=True, nullable=False) name = Column(String, nullable=False) content_delivery_frequency = Column( Enum(ContentDeliveryFrequency), nullable=False, default=ContentDeliveryFrequency.WEEKLY, ) slack_id = Column(String, nullable=True) slack_team_id = Column( Integer, ForeignKey("slack_teams.id"), nullable=True, ) email_id = Column(String, nullable=False, unique=True) last_message_sent_at = Column(DateTime, nullable=True) next_content_delivery_date = Column(DateTime, nullable=True) created_at = Column(DateTime, nullable=False, default=func.now()) slack_team = relationship("SlackTeam", back_populates="users") files = relationship("File", back_populates="user", cascade="all, delete-orphan") personalized_contents = relationship( "PersonalizedContent", back_populates="user", cascade="all, delete-orphan" ) def __repr__(self): return f"" def to_dict(self): return { "id": self.id, "name": self.name, "content_delivery_frequency": self.content_delivery_frequency, "slack_id": self.slack_id, "slack_team_id": self.slack_team_id, "email_id": self.email_id, "last_message_sent_at": self.last_message_sent_at, "next_content_delivery_date": self.next_content_delivery_date, "created_at": self.created_at, }