51 lines
2.3 KiB
Python
51 lines
2.3 KiB
Python
from database import Base
|
|
from sqlalchemy import TIMESTAMP, Column, String, DateTime, Boolean, ForeignKey
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
from sqlalchemy.sql import func
|
|
from typing import List
|
|
from uuid import uuid4, UUID
|
|
|
|
|
|
class SMSContact(Base):
|
|
__tablename__ = 'contact'
|
|
id: Mapped[UUID] = mapped_column(primary_key=True, default=uuid4)
|
|
phone_number = Column(String, nullable=False, unique=True)
|
|
messages: Mapped[List["SMSMessage"]] = relationship()
|
|
created_at = Column(TIMESTAMP(timezone=True), nullable=False, server_default=func.now())
|
|
|
|
|
|
class SMSMessage(Base):
|
|
__tablename__ = 'message'
|
|
id: Mapped[UUID] = mapped_column(primary_key=True, default=uuid4)
|
|
from_number = Column(String, nullable=False)
|
|
to_number: Mapped[UUID] = mapped_column(ForeignKey("contact.id"))
|
|
direction = Column(String, nullable=False)
|
|
is_mms = Column(Boolean, nullable=False)
|
|
message = Column(String, nullable=False)
|
|
timestamp = Column(DateTime, nullable=False)
|
|
cost: Mapped["SMSCost"] = relationship(back_populates="message")
|
|
sms_metadata: Mapped["SMSMetadata"] = relationship(back_populates="message")
|
|
created_at = Column(TIMESTAMP(timezone=True), nullable=False, server_default=func.now())
|
|
|
|
|
|
class SMSCost(Base):
|
|
__tablename__ = 'cost'
|
|
id: Mapped[UUID] = mapped_column(primary_key=True, default=uuid4)
|
|
amount_display = Column(String, nullable=False)
|
|
amount_nanodollars = Column(String, nullable=False)
|
|
message_id: Mapped[UUID] = mapped_column(ForeignKey("message.id"))
|
|
message: Mapped["SMSMessage"] = relationship(back_populates="cost")
|
|
created_at = Column(TIMESTAMP(timezone=True), nullable=False, server_default=func.now())
|
|
|
|
|
|
class SMSMetadata(Base):
|
|
__tablename__ = 'metadata'
|
|
id: Mapped[UUID] = mapped_column(primary_key=True, default=uuid4)
|
|
message_callback_url = Column(String, nullable=False)
|
|
message_encoding = Column(String, nullable=False)
|
|
message_type = Column(String, nullable=False)
|
|
status = Column(String, nullable=False)
|
|
message_id: Mapped[UUID] = mapped_column(ForeignKey("message.id"))
|
|
message: Mapped["SMSMessage"] = relationship(back_populates="sms_metadata")
|
|
created_at = Column(TIMESTAMP(timezone=True), nullable=False, server_default=func.now())
|