"""Create project health table Revision ID: 009 Revises: 008 Create Date: 2025-01-04 """ from alembic import op import sqlalchemy as sa # revision identifiers, used by Alembic. revision = '009' down_revision = '008' branch_labels = None depends_on = None def upgrade() -> None: # Create project_health table op.create_table( 'pjctrl_project_health', sa.Column('id', sa.String(36), primary_key=True), sa.Column('project_id', sa.String(36), sa.ForeignKey('pjctrl_projects.id', ondelete='CASCADE'), nullable=False, unique=True), sa.Column('health_score', sa.Integer, server_default='100', nullable=False), sa.Column('risk_level', sa.Enum('low', 'medium', 'high', 'critical', name='risk_level_enum'), server_default='low', nullable=False), sa.Column('schedule_status', sa.Enum('on_track', 'at_risk', 'delayed', name='schedule_status_enum'), server_default='on_track', nullable=False), sa.Column('resource_status', sa.Enum('adequate', 'constrained', 'overloaded', name='resource_status_enum'), server_default='adequate', nullable=False), sa.Column('last_updated', sa.DateTime, server_default=sa.func.now(), nullable=False), ) # Create indexes op.create_index('idx_project_health_project', 'pjctrl_project_health', ['project_id']) op.create_index('idx_project_health_risk', 'pjctrl_project_health', ['risk_level']) def downgrade() -> None: op.drop_index('idx_project_health_risk', table_name='pjctrl_project_health') op.drop_index('idx_project_health_project', table_name='pjctrl_project_health') op.drop_table('pjctrl_project_health') op.execute("DROP TYPE IF EXISTS risk_level_enum") op.execute("DROP TYPE IF EXISTS schedule_status_enum") op.execute("DROP TYPE IF EXISTS resource_status_enum")