diff --git a/api/models/call_log_event.py b/api/models/call_log_event.py index 6ab866c..14ed7c2 100644 --- a/api/models/call_log_event.py +++ b/api/models/call_log_event.py @@ -1,8 +1,18 @@ from api.mixins import TimestampMixin from api import db +from flask_sqlalchemy.query import Query as BaseQuery + + +class CallLogEventQuery(BaseQuery): + def call_sid_exist(self, form_data): + return ( + self.filter(CallLogEvent.call_sid == form_data["CallSid"]).first() + is not None + ) class CallLogEvent(TimestampMixin, db.Model): + query_class = CallLogEventQuery __tablename__ = "call_log_event" id = db.Column(db.Integer, primary_key=True) call_sid = db.Column(db.String(255)) diff --git a/api/models/system_phone.py b/api/models/system_phone.py index 2efc934..65ece13 100644 --- a/api/models/system_phone.py +++ b/api/models/system_phone.py @@ -1,8 +1,20 @@ from api.mixins import TimestampMixin from api import db +from flask_sqlalchemy.query import Query as BaseQuery + + +class SystemPhoneQuery(BaseQuery): + def system_phone_exists(self, url_decoded_system_phone): + return ( + self.filter( + SystemPhone.phone.contains(url_decoded_system_phone[-10:]) + ).first() + is not None + ) class SystemPhone(TimestampMixin, db.Model): + query_class = SystemPhoneQuery __tablename__ = "system_phone" id = db.Column(db.Integer, primary_key=True) phone = db.Column(db.String(50)) diff --git a/api/services/call_log_event_service.py b/api/services/call_log_event_service.py index bac1cd4..8fefc75 100644 --- a/api/services/call_log_event_service.py +++ b/api/services/call_log_event_service.py @@ -1,6 +1,5 @@ # This file is treated as service layer -from flask import request -from api import helpers, models, db +from api import helpers, models from datetime import datetime from utils.loggingutils import logger import traceback diff --git a/api/services/handle_event_service.py b/api/services/handle_event_service.py index e394bfa..65dc091 100644 --- a/api/services/handle_event_service.py +++ b/api/services/handle_event_service.py @@ -1,6 +1,5 @@ import requests -from flask import request -from api import models, db, app +from api import models, app from . import user_service as user from . import registration_service as registration from . import call_log_event_service as call_log_event @@ -10,18 +9,16 @@ class HandleEventService: def handle_event_service(self, form_data): - call_sid_exist = db.session.query( - db.exists().where(models.CallLogEvent.call_sid == form_data["CallSid"]) - ).scalar() + call_sid_exist = models.CallLogEvent.query.call_sid_exist(form_data) if call_sid_exist: return url_decoded_system_phone = requests.utils.unquote(form_data["To"]) - system_phone_exists = db.session.query( - db.exists().where(models.SystemPhone.phone == url_decoded_system_phone) - ).scalar() + system_phone_exists = models.SystemPhone.query.system_phone_exists( + url_decoded_system_phone + ) if not system_phone_exists: return diff --git a/api/services/registration_service.py b/api/services/registration_service.py index dc0e2e6..785a966 100644 --- a/api/services/registration_service.py +++ b/api/services/registration_service.py @@ -8,7 +8,7 @@ class RegistrationService: # Create a registartion def create_registration(self, data): system_phone_data = models.SystemPhone.query.filter_by( - phone=data["to_number"] + phone=data["to_number"][-10:] ).first() if not system_phone_data: diff --git a/main.py b/main.py index feb4841..fffc1ad 100644 --- a/main.py +++ b/main.py @@ -1,15 +1,22 @@ -# from pprint import pprint -from api import models, app, db, services -from flask import jsonify, request +from api import app, services, helpers +from flask import jsonify import json from utils.loggingutils import logger def callback(request): with app.app_context(): + json_data = None + form_data = None + if request.method == "POST": - json_data = request.get_json() - form_data = request.form + content_type = request.headers.get("Content-Type") + + if content_type == "application/json": + json_data = request.get_json() + else: + form_data = request.form + transaction_log_service = services.TransactionLogService() try: @@ -50,8 +57,7 @@ def retry_failed_webhook(transaction_log_service): payload["log_created_on"] = log.created_on log.processed = process_form_data(payload) log.attempts += 1 - db.session.add(log) - db.session.commit() + helpers.save(log) def process_form_data(form_data):