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.ext.declarative import declarative_base
|
||||||
from sqlalchemy.orm import sessionmaker
|
from sqlalchemy.orm import sessionmaker
|
||||||
|
|
||||||
SQLITE_DATABASE_URL = "sqlite:///./flosms.db"
|
SQLITE_DATABASE_URL = "sqlite:///./flowsms.db"
|
||||||
|
|
||||||
engine = create_engine(
|
engine = create_engine(
|
||||||
SQLITE_DATABASE_URL, echo=True, connect_args={"check_same_thread": False}
|
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