"""Add notification_configs table. Revision ID: 044 Revises: 043 """ import sqlalchemy as sa from alembic import op from sqlalchemy.dialects.postgresql import UUID revision = '044' down_revision = '043' branch_labels = None depends_on = None # Standard events EVENTS = [ "order.submitted", "order.completed", "render.completed", "render.failed", "excel.imported", ] def upgrade(): op.create_table( 'notification_configs', sa.Column('id', UUID(as_uuid=True), primary_key=True, server_default=sa.text('gen_random_uuid()')), sa.Column('user_id', UUID(as_uuid=True), sa.ForeignKey('users.id', ondelete='CASCADE'), nullable=False), sa.Column('event_type', sa.String(100), nullable=False), sa.Column('channel', sa.String(20), nullable=False), sa.Column('enabled', sa.Boolean, nullable=False, server_default='true'), sa.Column('created_at', sa.DateTime, nullable=False, server_default=sa.text('NOW()')), ) op.create_index('ix_notification_configs_user', 'notification_configs', ['user_id']) op.create_unique_constraint( 'uq_notification_config_user_event_channel', 'notification_configs', ['user_id', 'event_type', 'channel'] ) # Seed defaults for admin user (in_app=true, email=false) for event in EVENTS: op.execute(f""" INSERT INTO notification_configs (user_id, event_type, channel, enabled) SELECT id, '{event}', 'in_app', true FROM users WHERE role = 'admin' ON CONFLICT DO NOTHING """) op.execute(f""" INSERT INTO notification_configs (user_id, event_type, channel, enabled) SELECT id, '{event}', 'email', false FROM users WHERE role = 'admin' ON CONFLICT DO NOTHING """) def downgrade(): op.drop_table('notification_configs')