From edcbc866cb83b083115321df5ebecbf074f804d5 Mon Sep 17 00:00:00 2001 From: Carlos Rivas Date: Thu, 22 Aug 2024 09:59:14 -0700 Subject: [PATCH] Add dynamic query of including cost and/or metadata --- app.py | 7 +++---- service.py | 20 ++++++++++++++------ 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/app.py b/app.py index 50b6f8c..53ebf1c 100644 --- a/app.py +++ b/app.py @@ -9,7 +9,6 @@ from loggerino import timestamp_log_config from os import getenv from schemas import SMSMessage from service import inbound_sms_handler, retrieve_sms_messages_by_phone_number -from sqlalchemy.orm import Session, joinedload from uvicorn.config import LOGGING_CONFIG @@ -46,9 +45,9 @@ async def receive_sms_message(message: SMSMessage): @app.get('/sms-message/{number}') -def get_sms_messages_by_phone_number(number: str, limit: int = 10, page: int = 1): - contact = retrieve_sms_messages_by_phone_number(number, limit, page) - return {'status': 'success', 'results': len(contact.messages), 'response': contact} +def get_sms_messages_by_phone_number(number: str, cost: bool = False, metadata: bool = False): + contact = retrieve_sms_messages_by_phone_number(number, cost, metadata) + return {'status': 'success', 'results': len(contact), 'response': contact} if __name__ == "__main__": diff --git a/service.py b/service.py index 9219e44..30fab8e 100644 --- a/service.py +++ b/service.py @@ -2,7 +2,7 @@ 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 +from sqlalchemy.orm import joinedload, selectinload def inbound_sms_handler(message: SMSMessage) -> None: @@ -22,9 +22,17 @@ def inbound_sms_handler(message: SMSMessage) -> None: db.refresh(payload) - -def retrieve_sms_messages_by_phone_number(number: str, limit: int , page: int) -> SMSContact: +def retrieve_sms_messages_by_phone_number(number: str, include_cost: bool, include_metadata: bool) -> SMSContact: db = next(get_db()) - skip = (page - 1) * limit - messages = db.query(SMSContact).filter(SMSContact.phone_number == number).options(joinedload(SMSContact.messages)).limit(limit).offset(skip).first() - return messages + 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 []