Moved over schema, db and models

This commit is contained in:
Carlos Rivas 2024-08-21 12:54:46 -07:00
parent 7d443e57a6
commit 877a70d6e1
3 changed files with 87 additions and 1 deletions

View file

@ -2,7 +2,7 @@ from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
SQLITE_DATABASE_URL = "sqlite:///./flosms.db"
SQLITE_DATABASE_URL = "sqlite:///./flowsms.db"
engine = create_engine(
SQLITE_DATABASE_URL, echo=True, connect_args={"check_same_thread": False}

View file

@ -0,0 +1,54 @@
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)
messages: Mapped[List["SMSMessage"]] = relationship()
created_at = Column(TIMESTAMP(timezone=True), nullable=False, server_default=func.now())
updated_at = Column(TIMESTAMP(timezone=True), default=None, onupdate=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")
metadata: Mapped["SMSMetadata"] = relationship(back_populates="message")
created_at = Column(TIMESTAMP(timezone=True), nullable=False, server_default=func.now())
updated_at = Column(TIMESTAMP(timezone=True), default=None, onupdate=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())
updated_at = Column(TIMESTAMP(timezone=True), default=None, onupdate=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="metadata")
created_at = Column(TIMESTAMP(timezone=True), nullable=False, server_default=func.now())
updated_at = Column(TIMESTAMP(timezone=True), default=None, onupdate=func.now())

View file

@ -0,0 +1,32 @@
from pydantic import BaseModel, Field
from datetime import datetime
class SMSAttributes(BaseModel):
amount_display: str
amount_nanodollars: str
message: str = Field(alias="body")
direction: str
from_number: str = Field(alias="from")
is_mms: bool
message_callback_url: str
message_encoding: int
message_type: str
status: str
timestamp: datetime
to_number: str = Field(alias="to")
class SMSData(BaseModel):
attributes: SMSAttributes
sms_type: str = Field(alias="type")
sms_id: str = Field(alias="id")
class SMSMessage(BaseModel):
data: SMSData
class Config:
from_attributes = True
arbitrary_types_allowed = True
populate_by_name = True