From 2a04148ea1c00d92385c5f48370efd0125748203 Mon Sep 17 00:00:00 2001 From: Pea Tyczynska Date: Wed, 2 Dec 2020 15:59:41 +0000 Subject: [PATCH] Add sequential numbering for broadcast messages We need that to send broadcast messages using proprietary IBAG format that Vodafone currently uses. --- app/models.py | 19 ++++++++ .../versions/0334_broadcast_message_number.py | 48 +++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 migrations/versions/0334_broadcast_message_number.py diff --git a/app/models.py b/app/models.py index 4edf8fac5..494842b6b 100644 --- a/app/models.py +++ b/app/models.py @@ -6,6 +6,7 @@ from flask import url_for, current_app from sqlalchemy.ext.declarative import declared_attr from sqlalchemy.ext.associationproxy import association_proxy from sqlalchemy.ext.hybrid import hybrid_property +from sqlalchemy.schema import Sequence from sqlalchemy.dialects.postgresql import ( UUID, JSON, @@ -2483,6 +2484,24 @@ class BroadcastProviderMessage(db.Model): UniqueConstraint(broadcast_event_id, provider) +class BroadcastProviderMessageNumber(db.Model): + """ + To send IBAG messages via the CBC proxy to Nokia CBC appliances, Notify must generate and store a numeric + message_number alongside the message ID (GUID). + Subsequent messages (Update, Cancel) in IBAG format must reference the original message_number & message_id. + This model relates broadcast_provider_message_id to that numeric message_number. + """ + __tablename__ = 'broadcast_provider_message_number' + + sequence = Sequence('broadcast_provider_message_number_seq') + broadcast_provider_message_number = db.Column( + db.Integer, sequence, server_default=sequence.next_value(), primary_key=True + ) + broadcast_provider_message_id = db.Column( + UUID(as_uuid=True), db.ForeignKey('broadcast_provider_message.id'), nullable=False + ) + + class ServiceBroadcastProviderRestriction(db.Model): """ Most services don't send broadcasts. Of those that do, most send to all broadcast providers. diff --git a/migrations/versions/0334_broadcast_message_number.py b/migrations/versions/0334_broadcast_message_number.py new file mode 100644 index 000000000..0e1fd04fb --- /dev/null +++ b/migrations/versions/0334_broadcast_message_number.py @@ -0,0 +1,48 @@ +""" + +Revision ID: 0334_broadcast_message_number +Revises: 0333_service_broadcast_provider +Create Date: 2020-12-04 15:06:22.544803 + +""" +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import postgresql + +revision = '0334_broadcast_message_number' +down_revision = '0333_service_broadcast_provider' + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.execute("create sequence broadcast_provider_message_number_seq") + op.create_table( + 'broadcast_provider_message_number', + sa.Column( + 'broadcast_provider_message_number', + sa.Integer(), + server_default=sa.text("nextval('broadcast_provider_message_number_seq')"), + nullable=False + ), + sa.Column('broadcast_provider_message_id', postgresql.UUID(as_uuid=True), nullable=False), + sa.ForeignKeyConstraint(['broadcast_provider_message_id'], ['broadcast_provider_message.id'], ), + sa.PrimaryKeyConstraint('broadcast_provider_message_number') + ) + op.execute( + """ + INSERT INTO + broadcast_provider_message_number (broadcast_provider_message_id) + SELECT + id + FROM + broadcast_provider_message + """ + ) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('broadcast_provider_message_number') + op.execute("drop sequence broadcast_provider_message_number_seq") + # ### end Alembic commands ###