47 lines
1.4 KiB
Python
47 lines
1.4 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 selectinload
|
|
from uuid import UUID
|
|
|
|
|
|
def receive_sms_messages_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_handler(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 []
|
|
|
|
|
|
def delete_sms_message_by_uuid_handler(uuid: UUID):
|
|
db = next(get_db())
|
|
query = db.query(SMSDBMessage).filter(SMSDBMessage.id == uuid).delete()
|
|
db.commit()
|
|
print(query)
|