Merge pull request #3090 from alphagov/migration-allow-broadcasts-created-by-api

Allow broadcast messages to be created with API key
This commit is contained in:
Chris Hill-Scott
2021-01-15 14:05:11 +00:00
committed by GitHub
4 changed files with 63 additions and 15 deletions

View File

@@ -36,7 +36,12 @@ from app.hashing import (
check_hash
)
from app import db, encryption
from app.utils import DATETIME_FORMAT, DATETIME_FORMAT_NO_TIMEZONE, get_dt_string_or_none
from app.utils import (
DATETIME_FORMAT,
DATETIME_FORMAT_NO_TIMEZONE,
get_dt_string_or_none,
get_uuid_string_or_none,
)
from app.history_meta import Versioned
@@ -2245,7 +2250,7 @@ class BroadcastMessage(db.Model):
cancelled_at = db.Column(db.DateTime, nullable=True)
updated_at = db.Column(db.DateTime, nullable=True, onupdate=datetime.datetime.utcnow)
created_by_id = db.Column(UUID(as_uuid=True), db.ForeignKey('users.id'), nullable=False)
created_by_id = db.Column(UUID(as_uuid=True), db.ForeignKey('users.id'), nullable=True)
approved_by_id = db.Column(UUID(as_uuid=True), db.ForeignKey('users.id'), nullable=True)
cancelled_by_id = db.Column(UUID(as_uuid=True), db.ForeignKey('users.id'), nullable=True)
@@ -2253,6 +2258,13 @@ class BroadcastMessage(db.Model):
approved_by = db.relationship('User', foreign_keys=[approved_by_id])
cancelled_by = db.relationship('User', foreign_keys=[cancelled_by_id])
api_key_id = db.Column(UUID(as_uuid=True), db.ForeignKey('api_keys.id'), nullable=True)
api_key = db.relationship('ApiKey')
reference = db.Column(db.String(255), nullable=True)
CheckConstraint("created_by_id is not null or api_key_id is not null")
@property
def personalisation(self):
if self._personalisation:
@@ -2266,6 +2278,7 @@ class BroadcastMessage(db.Model):
def serialize(self):
return {
'id': str(self.id),
'reference': self.reference,
'service_id': str(self.service_id),
@@ -2288,9 +2301,9 @@ class BroadcastMessage(db.Model):
'cancelled_at': get_dt_string_or_none(self.cancelled_at),
'updated_at': get_dt_string_or_none(self.updated_at),
'created_by_id': str(self.created_by_id),
'approved_by_id': str(self.approved_by_id),
'cancelled_by_id': str(self.cancelled_by_id),
'created_by_id': get_uuid_string_or_none(self.created_by_id),
'approved_by_id': get_uuid_string_or_none(self.approved_by_id),
'cancelled_by_id': get_uuid_string_or_none(self.cancelled_by_id),
}

View File

@@ -150,5 +150,9 @@ def get_dt_string_or_none(val):
return val.strftime(DATETIME_FORMAT) if val else None
def get_uuid_string_or_none(val):
return str(val) if val else None
def format_sequential_number(sequential_number):
return format(sequential_number, "x").zfill(8)

View File

@@ -7,6 +7,7 @@ Create Date: 2020-12-04 15:06:22.544803
"""
from alembic import op
import sqlalchemy as sa
from notifications_utils.template import BroadcastMessageTemplate
from sqlalchemy.dialects import postgresql
from sqlalchemy.orm.session import Session
@@ -17,18 +18,22 @@ down_revision = '0335_broadcast_msg_content'
def upgrade():
session = Session(bind=op.get_bind())
broadcast_messages = session.query(BroadcastMessage).filter(BroadcastMessage.content == None)
conn = op.get_bind()
for broadcast_message in broadcast_messages:
broadcast_message.content = broadcast_message.template._as_utils_template_with_personalisation(
broadcast_message.personalisation
).content_with_placeholders_filled_in
session.commit()
op.alter_column('broadcast_message', 'content', nullable=False)
results = conn.execute(sa.text("""
UPDATE
broadcast_message
SET
content = templates_history.content
FROM
templates_history
WHERE
broadcast_message.content is NULL and
broadcast_message.template_id = templates_history.id and
broadcast_message.template_version = templates_history.version
;
"""))
def downgrade():

View File

@@ -0,0 +1,26 @@
"""
Revision ID: 0337_broadcast_msg_api
Revises: 0336_broadcast_msg_content_2
Create Date: 2020-12-04 15:06:22.544803
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
revision = '0337_broadcast_msg_api'
down_revision = '0336_broadcast_msg_content_2'
def upgrade():
op.alter_column('broadcast_message', 'created_by_id', nullable=True)
op.add_column('broadcast_message', sa.Column('api_key_id', postgresql.UUID(), nullable=True))
op.create_foreign_key(None, 'broadcast_message', 'api_keys', ['api_key_id'], ['id'])
op.add_column('broadcast_message', sa.Column('reference', sa.String(length=255), nullable=True))
def downgrade():
op.alter_column('broadcast_message', 'created_by_id', nullable=False)
op.drop_column('broadcast_message', 'api_key_id')
op.add_column('broadcast_message', 'reference')