diff --git a/dg_osm/db/core.py b/dg_osm/db/core.py deleted file mode 100644 index e69de29..0000000 diff --git a/dg_osm/db/models.py b/dg_osm/db/models.py new file mode 100644 index 0000000..b6a4796 --- /dev/null +++ b/dg_osm/db/models.py @@ -0,0 +1,50 @@ +from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship +from sqlalchemy import Boolean, ForeignKey, String +from typing import Optional, List + +class Base(DeclarativeBase): + pass + +class MailServer(Base): + __tablename__ = 'mail_server' + id: Mapped[int] = mapped_column(primary_key=True) + name: Mapped[str] = mapped_column(String(100)) + description: Mapped[Optional[str]] + host: Mapped[str] = mapped_column(String(255)) + port: Mapped[int] + # TODO: do not store password in plain text in the db! Ideally nor the username. + username: Mapped[str] = mapped_column(String(255)) + password: Mapped[str] = mapped_column(String(255)) + messages: Mapped[List['Message']] = relationship(back_populates='mail_server', cascade='all, delete-orphan') + + +class ContactList(Base): + __tablename__ = 'contact_list' + id: Mapped[int] = mapped_column(primary_key=True) + name: Mapped[str] = mapped_column(String(100)) + description: Mapped[Optional[str]] + is_live: Mapped[bool] = mapped_column(Boolean, default=False) + short_name: Mapped[str] = mapped_column(String(20)) + full_name: Mapped[str] = mapped_column(String(255)) + email_address: Mapped[str] = mapped_column(String(255)) + contact_lists_test: Mapped[List['Message']] = relationship(back_populates='contact_list', cascade='all, delete-orphan') + contact_lists_live: Mapped[List['Message']] = relationship(back_populates='contact_list', cascade='all, delete-orphan') + + +class Message(Base): + __tablename__ = 'message' + id: Mapped[int] = mapped_column(primary_key=True) + description: Mapped[str] = mapped_column(String(255)) + notes: Mapped[[Optional[str]]] + is_complete: Mapped[bool] = mapped_column(Boolean, default=False) + mail_server_id: Mapped[int] = mapped_column(ForeignKey('mail_server.id')) + mail_server: Mapped['MailServer'] = relationship(back_populates='messages') + test_contacts_id: Mapped[int] = mapped_column(ForeignKey('contact_list.id')) + test_contacts: Mapped['ContactList'] = relationship(back_populates='contact_lists_test') + live_contacts_id: Mapped[int] = mapped_column(ForeignKey('contact_list.id')) + live_contacts: Mapped['ContactList'] = relationship(back_populates='contact_lists_live') + sent: Mapped[Optional[str]] + from_name: Mapped[str] = mapped_column(String(255)) + from_address: Mapped[str] = mapped_column(String(255)) + subject_line: Mapped[str] = mapped_column(String(255)) + message_body: Mapped[str]