dak.c2s/backend/alembic/versions/005_add_disclosure_requests.py
CCS Admin bb13ec80a2 feat: add DisclosureRequest model and migration
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 16:02:52 +00:00

72 lines
2.3 KiB
Python

"""add disclosure_requests table
Revision ID: 005_disclosure
Revises: 5717043d0f9d
Create Date: 2026-02-26 14:00:00.000000
"""
from typing import Sequence, Union
from alembic import op
# revision identifiers, used by Alembic.
revision: str = "005_disclosure"
down_revision: Union[str, None] = "5717043d0f9d"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
op.execute(
"""
CREATE TABLE disclosure_requests (
id INT AUTO_INCREMENT PRIMARY KEY,
case_id INT NOT NULL,
requester_id INT NOT NULL,
reason VARCHAR(500) NOT NULL,
status VARCHAR(20) NOT NULL DEFAULT 'pending',
reviewed_by INT NULL,
reviewed_at DATETIME NULL,
expires_at DATETIME NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_dr_case FOREIGN KEY (case_id) REFERENCES cases(id),
CONSTRAINT fk_dr_requester FOREIGN KEY (requester_id) REFERENCES users(id),
CONSTRAINT fk_dr_reviewer FOREIGN KEY (reviewed_by) REFERENCES users(id),
CONSTRAINT chk_dr_status CHECK (status IN ('pending', 'approved', 'rejected')),
INDEX idx_dr_case_status (case_id, status),
INDEX idx_dr_requester (requester_id),
INDEX idx_dr_status (status)
)
"""
)
# Update Notification CHECK constraint to include disclosure types
op.execute("ALTER TABLE notifications DROP CONSTRAINT chk_notif")
op.execute(
"""
ALTER TABLE notifications ADD CONSTRAINT chk_notif CHECK (
notification_type IN (
'new_cases_uploaded','icd_entered','icd_uploaded',
'report_ready','coding_completed','disclosure_request','disclosure_resolved'
)
)
"""
)
def downgrade() -> None:
# Restore original Notification CHECK constraint
op.execute("ALTER TABLE notifications DROP CONSTRAINT chk_notif")
op.execute(
"""
ALTER TABLE notifications ADD CONSTRAINT chk_notif CHECK (
notification_type IN (
'new_cases_uploaded','icd_entered','icd_uploaded',
'report_ready','coding_completed'
)
)
"""
)
op.execute("DROP TABLE disclosure_requests")