66 lines
1.7 KiB
Python
66 lines
1.7 KiB
Python
"""add ownership and SLA deadlines to data quality issues
|
|
|
|
Revision ID: f43d829ab610
|
|
Revises: d1f83bc64170
|
|
"""
|
|
|
|
import sqlalchemy as sa
|
|
|
|
from alembic import op
|
|
|
|
revision = "f43d829ab610"
|
|
down_revision = "d1f83bc64170"
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
op.add_column(
|
|
"data_quality_issues",
|
|
sa.Column("due_at", sa.DateTime(timezone=True), nullable=True),
|
|
)
|
|
op.add_column(
|
|
"data_quality_issues",
|
|
sa.Column("assigned_to_user_id", sa.Uuid(), nullable=True),
|
|
)
|
|
op.create_foreign_key(
|
|
"fk_data_quality_issues_assigned_user",
|
|
"data_quality_issues",
|
|
"users",
|
|
["assigned_to_user_id"],
|
|
["id"],
|
|
ondelete="SET NULL",
|
|
)
|
|
op.create_index("ix_data_quality_issues_due_at", "data_quality_issues", ["due_at"])
|
|
op.create_index(
|
|
"ix_data_quality_issues_assigned_to_user_id",
|
|
"data_quality_issues",
|
|
["assigned_to_user_id"],
|
|
)
|
|
op.execute(
|
|
"""
|
|
UPDATE data_quality_issues
|
|
SET due_at = detected_at + CASE severity
|
|
WHEN 'high' THEN interval '4 hours'
|
|
WHEN 'low' THEN interval '3 days'
|
|
ELSE interval '1 day'
|
|
END
|
|
WHERE status = 'open' AND due_at IS NULL
|
|
"""
|
|
)
|
|
|
|
|
|
def downgrade() -> None:
|
|
op.drop_index(
|
|
"ix_data_quality_issues_assigned_to_user_id",
|
|
table_name="data_quality_issues",
|
|
)
|
|
op.drop_index("ix_data_quality_issues_due_at", table_name="data_quality_issues")
|
|
op.drop_constraint(
|
|
"fk_data_quality_issues_assigned_user",
|
|
"data_quality_issues",
|
|
type_="foreignkey",
|
|
)
|
|
op.drop_column("data_quality_issues", "assigned_to_user_id")
|
|
op.drop_column("data_quality_issues", "due_at")
|