mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-20 15:31:15 -05:00
It's clear that we need a way to track updates to a broadcast message.
It's also clear that we'll need some kind of audit log that captures
exactly what was sent out in a message.
This commit adds a new database table, `broadcast_event`, which maps 1:1
with CAP XML sent to the CBCs. We'll create one of these just before
sending out.
The main driver for this was that cancel and update messages need to
contain a list of references of all previous messages that they're
amending. This is of format `{sender},{identifier},{sent_timestamp}`,
and the identifier itself needs to be unique for each message.
44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
from app import db
|
|
from app.models import BroadcastMessage, BroadcastEvent
|
|
from app.dao.dao_utils import transactional
|
|
|
|
|
|
@transactional
|
|
def dao_create_broadcast_message(broadcast_message):
|
|
db.session.add(broadcast_message)
|
|
|
|
|
|
@transactional
|
|
def dao_update_broadcast_message(broadcast_message):
|
|
db.session.add(broadcast_message)
|
|
|
|
|
|
def dao_get_broadcast_message_by_id_and_service_id(broadcast_message_id, service_id):
|
|
return BroadcastMessage.query.filter(
|
|
BroadcastMessage.id == broadcast_message_id,
|
|
BroadcastMessage.service_id == service_id
|
|
).one()
|
|
|
|
|
|
def dao_get_broadcast_message_by_id(broadcast_message_id):
|
|
return BroadcastMessage.query.get(broadcast_message_id)
|
|
|
|
|
|
def dao_get_broadcast_messages_for_service(service_id):
|
|
return BroadcastMessage.query.filter(
|
|
BroadcastMessage.service_id == service_id
|
|
).order_by(BroadcastMessage.created_at)
|
|
|
|
|
|
def dao_get_earlier_events_for_broadcast_event(broadcast_event_id):
|
|
"""
|
|
This is used to build up the references list.
|
|
"""
|
|
this_event = BroadcastEvent.query.get(broadcast_event_id)
|
|
return BroadcastEvent.query.filter(
|
|
BroadcastEvent.broadcast_message_id == this_event.id,
|
|
BroadcastEvent.sent_at < this_event.sent_at
|
|
).order_by(
|
|
BroadcastEvent.sent_at.asc()
|
|
)
|