92 lines
3.7 KiB
Python
92 lines
3.7 KiB
Python
"""Migration for emr_integrations
|
|
|
|
Revision ID: auto
|
|
Revises: None
|
|
Create Date: auto
|
|
"""
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
from sqlalchemy.dialects import postgresql
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision = 'auto'
|
|
down_revision = None
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
def upgrade() -> None:
|
|
op.create_table(
|
|
'emr_integrations',
|
|
sa.Column('id', postgresql.UUID(as_uuid=True), primary_key=True, nullable=False),
|
|
sa.Column('organization_id', postgresql.UUID(as_uuid=True), nullable=False),
|
|
sa.Column('emr_system', sa.String(100), nullable=False),
|
|
sa.Column('emr_version', sa.String(50), nullable=True),
|
|
sa.Column('integration_type', sa.String(50), nullable=False),
|
|
sa.Column('fhir_base_url', sa.String(500), nullable=True),
|
|
sa.Column('api_endpoint', sa.String(500), nullable=True),
|
|
sa.Column('auth_type', sa.String(50), nullable=False),
|
|
sa.Column('client_id', sa.String(255), nullable=True),
|
|
sa.Column('client_secret_encrypted', sa.Text(), nullable=True),
|
|
sa.Column('api_key_encrypted', sa.Text(), nullable=True),
|
|
sa.Column('token_url', sa.String(500), nullable=True),
|
|
sa.Column('scopes', postgresql.JSONB(), nullable=True),
|
|
sa.Column('approval_status', sa.String(50), nullable=True),
|
|
sa.Column('approval_date', sa.Date(), nullable=True),
|
|
sa.Column('epic_approval_months_estimate', sa.Integer(), nullable=True),
|
|
sa.Column('data_mappings', postgresql.JSONB(), nullable=True),
|
|
sa.Column('supported_resources', postgresql.JSONB(), nullable=True),
|
|
sa.Column('last_sync_at', sa.DateTime(timezone=True), nullable=True),
|
|
sa.Column('last_sync_status', sa.String(50), nullable=True),
|
|
sa.Column('last_error_message', sa.Text(), nullable=True),
|
|
sa.Column('retry_count', sa.Integer(), nullable=True),
|
|
sa.Column('rate_limit_per_minute', sa.Integer(), nullable=True),
|
|
sa.Column('use_mock_data', sa.Boolean(), nullable=True),
|
|
sa.Column('configuration_notes', sa.Text(), nullable=True),
|
|
sa.Column('connection_status', sa.String(50), server_default='disconnected', nullable=False),
|
|
sa.Column('created_by_id', postgresql.UUID(as_uuid=True), nullable=True),
|
|
sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=False),
|
|
sa.Column('updated_at', sa.DateTime(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP'), onupdate=sa.text('CURRENT_TIMESTAMP'), nullable=False),
|
|
)
|
|
|
|
op.create_index(
|
|
'idx_emr_integrations_organization_id',
|
|
'emr_integrations',
|
|
['organization_id'],
|
|
|
|
)
|
|
op.create_index(
|
|
'idx_emr_integrations_emr_system',
|
|
'emr_integrations',
|
|
['emr_system'],
|
|
|
|
)
|
|
op.create_index(
|
|
'idx_emr_integrations_connection_status',
|
|
'emr_integrations',
|
|
['connection_status'],
|
|
|
|
)
|
|
op.create_index(
|
|
'idx_emr_integrations_approval_status',
|
|
'emr_integrations',
|
|
['approval_status'],
|
|
|
|
)
|
|
op.create_index(
|
|
'idx_emr_integrations_last_sync_at',
|
|
'emr_integrations',
|
|
['last_sync_at'],
|
|
|
|
)
|
|
|
|
def downgrade() -> None:
|
|
|
|
op.drop_index('idx_emr_integrations_organization_id', table_name='emr_integrations')
|
|
op.drop_index('idx_emr_integrations_emr_system', table_name='emr_integrations')
|
|
op.drop_index('idx_emr_integrations_connection_status', table_name='emr_integrations')
|
|
op.drop_index('idx_emr_integrations_approval_status', table_name='emr_integrations')
|
|
op.drop_index('idx_emr_integrations_last_sync_at', table_name='emr_integrations')
|
|
|
|
op.drop_table('emr_integrations')
|
|
|