flowsms/service.py

39 lines
1.2 KiB
Python

from database import get_db
from dtos import to_db, to_db_existing_contact
from models import SMSContact, SMSMessage as SMSDBMessage
from schemas import SMSMessage
from sqlalchemy.orm import joinedload, selectinload
def inbound_sms_handler(message: SMSMessage) -> None:
db = next(get_db())
payload = None
sms_contact_exists = db.query(SMSContact).filter(SMSContact.phone_number == message.data.attributes.to_number).first()
if sms_contact_exists:
payload = to_db_existing_contact(message)
payload.to_number = sms_contact_exists.id
else:
payload = to_db(message)
db.add(payload)
db.commit()
db.refresh(payload)
def retrieve_sms_messages_by_phone_number(number: str, include_cost: bool, include_metadata: bool) -> SMSContact:
db = next(get_db())
query = db.query(SMSContact).filter(SMSContact.phone_number == number)
if include_cost:
query = query.options(selectinload(SMSContact.messages).selectinload(SMSDBMessage.cost))
if include_metadata:
query = query.options(selectinload(SMSContact.messages).selectinload(SMSDBMessage.sms_metadata))
response = query.first()
if response is not None:
return response.messages
return []