flowsms/models.py
2024-08-22 00:49:09 -07:00

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())