Add dynamic query of including cost and/or metadata

This commit is contained in:
Carlos Rivas 2024-08-22 09:59:14 -07:00
parent df203943ac
commit edcbc866cb
2 changed files with 17 additions and 10 deletions

7
app.py
View file

@ -9,7 +9,6 @@ from loggerino import timestamp_log_config
from os import getenv from os import getenv
from schemas import SMSMessage from schemas import SMSMessage
from service import inbound_sms_handler, retrieve_sms_messages_by_phone_number from service import inbound_sms_handler, retrieve_sms_messages_by_phone_number
from sqlalchemy.orm import Session, joinedload
from uvicorn.config import LOGGING_CONFIG from uvicorn.config import LOGGING_CONFIG
@ -46,9 +45,9 @@ async def receive_sms_message(message: SMSMessage):
@app.get('/sms-message/{number}') @app.get('/sms-message/{number}')
def get_sms_messages_by_phone_number(number: str, limit: int = 10, page: int = 1): def get_sms_messages_by_phone_number(number: str, cost: bool = False, metadata: bool = False):
contact = retrieve_sms_messages_by_phone_number(number, limit, page) contact = retrieve_sms_messages_by_phone_number(number, cost, metadata)
return {'status': 'success', 'results': len(contact.messages), 'response': contact} return {'status': 'success', 'results': len(contact), 'response': contact}
if __name__ == "__main__": if __name__ == "__main__":

View file

@ -2,7 +2,7 @@ from database import get_db
from dtos import to_db, to_db_existing_contact from dtos import to_db, to_db_existing_contact
from models import SMSContact, SMSMessage as SMSDBMessage from models import SMSContact, SMSMessage as SMSDBMessage
from schemas import SMSMessage from schemas import SMSMessage
from sqlalchemy.orm import joinedload from sqlalchemy.orm import joinedload, selectinload
def inbound_sms_handler(message: SMSMessage) -> None: def inbound_sms_handler(message: SMSMessage) -> None:
@ -22,9 +22,17 @@ def inbound_sms_handler(message: SMSMessage) -> None:
db.refresh(payload) db.refresh(payload)
def retrieve_sms_messages_by_phone_number(number: str, include_cost: bool, include_metadata: bool) -> SMSContact:
def retrieve_sms_messages_by_phone_number(number: str, limit: int , page: int) -> SMSContact:
db = next(get_db()) db = next(get_db())
skip = (page - 1) * limit query = db.query(SMSContact).filter(SMSContact.phone_number == number)
messages = db.query(SMSContact).filter(SMSContact.phone_number == number).options(joinedload(SMSContact.messages)).limit(limit).offset(skip).first()
return messages 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 []