kanha-upadhyay's picture
fix: enforce unique constraint on email_id in user model and migration
984c8a5
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"<User id={self.id}, name={self.name}, email_id={self.email_id}>"
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,
}