mirror of
https://github.com/GSA/notifications-api.git
synced 2026-08-25 00:33:41 -04:00
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:
@@ -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),
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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():
|
||||
|
||||
26
migrations/versions/0337_broadcast_msg_api.py
Normal file
26
migrations/versions/0337_broadcast_msg_api.py
Normal 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')
|
||||
Reference in New Issue
Block a user