Files
notifications-api/app/dao/inbound_numbers_dao.py
2024-12-20 08:09:19 -08:00

62 lines
1.9 KiB
Python

from sqlalchemy import and_, select, update
from app import db
from app.dao.dao_utils import autocommit
from app.models import InboundNumber
def dao_get_inbound_numbers():
stmt = select(InboundNumber).order_by(InboundNumber.updated_at)
return db.session.execute(stmt).scalars().all()
def dao_get_available_inbound_numbers():
stmt = select(InboundNumber).where(
InboundNumber.active, InboundNumber.service_id.is_(None)
)
return db.session.execute(stmt).scalars().all()
def dao_get_inbound_number_for_service(service_id):
stmt = select(InboundNumber).where(InboundNumber.service_id == service_id)
return db.session.execute(stmt).scalars().first()
def dao_get_inbound_number(inbound_number_id):
stmt = select(InboundNumber).where(InboundNumber.id == inbound_number_id)
return db.session.execute(stmt).scalars().first()
@autocommit
def dao_set_inbound_number_to_service(service_id, inbound_number):
inbound_number.service_id = service_id
db.session.add(inbound_number)
@autocommit
def dao_set_inbound_number_active_flag(service_id, active):
stmt = select(InboundNumber).where(InboundNumber.service_id == service_id)
inbound_number = db.session.execute(stmt).scalars().first()
inbound_number.active = active
db.session.add(inbound_number)
@autocommit
def dao_allocate_number_for_service(service_id, inbound_number_id):
stmt = (
update(InboundNumber)
.where(
and_(
InboundNumber.id == inbound_number_id, # noqa
InboundNumber.active == True, # noqa
InboundNumber.service_id == None, # noqa
)
)
.values({"service_id": service_id})
)
result = db.session.execute(stmt)
if result.rowcount == 0:
raise Exception("Inbound number: {} is not available".format(inbound_number_id))
return db.session.get(InboundNumber, inbound_number_id)