"""Add dashboard_configs table. Revision ID: 046 Revises: 045 """ import sqlalchemy as sa from alembic import op from sqlalchemy.dialects.postgresql import UUID, JSONB revision = '046' down_revision = '045' branch_labels = None depends_on = None def upgrade(): op.create_table( 'dashboard_configs', sa.Column('id', UUID(as_uuid=True), primary_key=True, server_default=sa.text('gen_random_uuid()')), sa.Column('tenant_id', UUID(as_uuid=True), sa.ForeignKey('tenants.id', ondelete='CASCADE'), nullable=True), sa.Column('user_id', UUID(as_uuid=True), sa.ForeignKey('users.id', ondelete='CASCADE'), nullable=True), sa.Column('widgets', JSONB, nullable=False, server_default=sa.text("'[]'::jsonb")), sa.Column('is_tenant_default', sa.Boolean, nullable=False, server_default='false'), sa.Column('created_at', sa.DateTime, nullable=False, server_default=sa.text('NOW()')), sa.Column('updated_at', sa.DateTime, nullable=False, server_default=sa.text('NOW()')), ) # Unique: one config per user op.create_index( 'uq_dashboard_config_user', 'dashboard_configs', ['user_id'], unique=True, postgresql_where=sa.text('user_id IS NOT NULL'), ) # Unique: one tenant-default per tenant op.create_index( 'uq_dashboard_config_tenant_default', 'dashboard_configs', ['tenant_id'], unique=True, postgresql_where=sa.text('is_tenant_default = true'), ) def downgrade(): op.drop_index('uq_dashboard_config_tenant_default', table_name='dashboard_configs') op.drop_index('uq_dashboard_config_user', table_name='dashboard_configs') op.drop_table('dashboard_configs')