From 02ee072251a3b1ac24d468c84cb730655e4f77b5 Mon Sep 17 00:00:00 2001 From: Ken Tsang Date: Mon, 6 Nov 2017 18:19:02 +0000 Subject: [PATCH] Refactor inbound sms dao Added function for paginated results --- app/dao/inbound_sms_dao.py | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/app/dao/inbound_sms_dao.py b/app/dao/inbound_sms_dao.py index 18060cced..5bbc9a3a9 100644 --- a/app/dao/inbound_sms_dao.py +++ b/app/dao/inbound_sms_dao.py @@ -2,7 +2,8 @@ from datetime import ( timedelta, datetime ) - +from flask import current_app +from sqlalchemy import desc from app import db from app.dao.dao_utils import transactional @@ -31,6 +32,34 @@ def dao_get_inbound_sms_for_service(service_id, limit=None, user_number=None): return q.all() +def dao_get_paginated_inbound_sms_for_service( + service_id, + user_number=None, + older_than=None, + page=1, + page_size=None +): + if page_size is None: + page_size = current_app.config['PAGE_SIZE'] + + filters = [InboundSms.service_id == service_id] + + if older_than is not None: + older_than_created_at = db.session.query( + InboundSms.created_at).filter(InboundSms.id == older_than).as_scalar() + filters.append(InboundSms.created_at < older_than_created_at) + + if user_number: + filters.append(InboundSms.user_number == user_number) + + query = InboundSms.query.filter(*filters) + + return query.order_by(desc(InboundSms.created_at)).paginate( + page=page, + per_page=page_size + ).items + + def dao_count_inbound_sms_for_service(service_id): return InboundSms.query.filter( InboundSms.service_id == service_id