"""Initial Revision ID: dae12d7f4ddf Revises: Create Date: 2025-10-28 22:06:45.637836+00:00 """ from typing import Sequence, Union from alembic import op import sqlalchemy as sa # revision identifiers, used by Alembic. revision: str = "dae12d7f4ddf" down_revision: Union[str, Sequence[str], None] = None branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: """Upgrade schema.""" # ### commands auto generated by Alembic - please adjust! ### op.create_table( "devices", sa.Column("id", sa.Text(), nullable=False), sa.Column("name", sa.Text(), nullable=False), sa.Column("location", sa.Text(), nullable=True), sa.Column("is_active", sa.Boolean(), nullable=True), sa.PrimaryKeyConstraint("id"), ) op.create_table( "telemetry", sa.Column("time", sa.DateTime(timezone=True), nullable=False), sa.Column("device_id", sa.Text(), nullable=False), sa.Column("metric", sa.Text(), nullable=False), sa.Column("value", sa.Float(), nullable=False), sa.Column("unit", sa.Text(), nullable=True), sa.ForeignKeyConstraint( ["device_id"], ["devices.id"], ), sa.PrimaryKeyConstraint("time", "device_id", "metric"), ) op.create_index( "idx_telemetry_device_time", "telemetry", ["device_id", "time"], unique=False ) # Convert telemetry table to TimescaleDB hypertable op.execute("SELECT create_hypertable('telemetry', 'time', if_not_exists => TRUE);") # ### end Alembic commands ### def downgrade() -> None: """Downgrade schema.""" # ### commands auto generated by Alembic - please adjust! ### # Note: TimescaleDB hypertables cannot be easily converted back to regular tables # The table will be dropped entirely, which removes the hypertable as well op.drop_index("idx_telemetry_device_time", table_name="telemetry") op.drop_table("telemetry") op.drop_table("devices") # ### end Alembic commands ###