This commit is contained in:
Leon
2025-07-15 22:54:35 +02:00
commit f7eda17284
89 changed files with 18535 additions and 0 deletions

View File

@@ -0,0 +1 @@
"""SQLAlchemy models for the database."""

View File

@@ -0,0 +1,21 @@
import datetime
from sqlalchemy import Column, DateTime, ForeignKey, Integer, String, Text
from sqlalchemy.orm import relationship
from app.core.database import Base
class Entry(Base):
"""Represents an entry (e.g., an email) associated with a newsletter."""
__tablename__ = "entries"
id = Column(Integer, primary_key=True, index=True)
newsletter_id = Column(Integer, ForeignKey("newsletters.id"))
subject = Column(String)
body = Column(Text)
received_at = Column(
DateTime(timezone=True), default=datetime.datetime.now(datetime.UTC)
)
newsletter = relationship("Newsletter", back_populates="entries")

View File

@@ -0,0 +1,31 @@
from sqlalchemy import Boolean, Column, ForeignKey, Integer, String
from sqlalchemy.orm import relationship
from app.core.database import Base
class Newsletter(Base):
"""Represents a newsletter, which can have multiple senders and entries."""
__tablename__ = "newsletters"
id = Column(Integer, primary_key=True, index=True)
name = Column(String)
is_active = Column(Boolean, default=True)
senders = relationship(
"Sender", back_populates="newsletter", cascade="all, delete-orphan"
)
entries = relationship(
"Entry", back_populates="newsletter", cascade="all, delete-orphan"
)
class Sender(Base):
"""Represents an email sender associated with a newsletter."""
__tablename__ = "senders"
id = Column(Integer, primary_key=True, index=True)
email = Column(String, unique=True, index=True, nullable=False)
newsletter_id = Column(Integer, ForeignKey("newsletters.id"), nullable=False)
newsletter = relationship("Newsletter", back_populates="senders")

View File

@@ -0,0 +1,18 @@
from sqlalchemy import Boolean, Column, Integer, String
from app.core.database import Base
class Settings(Base):
"""Represents application settings, including IMAP configuration."""
__tablename__ = "settings"
id = Column(Integer, primary_key=True, index=True)
imap_server = Column(String, index=True, nullable=True, default="")
imap_username = Column(String, nullable=True, default="")
imap_password = Column(String, nullable=True)
search_folder = Column(String, default="INBOX")
move_to_folder = Column(String, nullable=True)
mark_as_read = Column(Boolean, default=False)
email_check_interval = Column(Integer, default=15) # Interval in minutes
auto_add_new_senders = Column(Boolean, default=False)