Moved over schema, db and models
This commit is contained in:
parent
7d443e57a6
commit
877a70d6e1
|
|
@ -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}
|
||||
|
|
|
|||
54
models.py
54
models.py
|
|
@ -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())
|
||||
32
schemas.py
32
schemas.py
|
|
@ -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
|
||||
Loading…
Reference in a new issue