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 []