04/09 update: redesign user's roles

This commit is contained in:
2026-04-09 17:36:32 -04:00
parent 857372f781
commit dba4cc8b96
29 changed files with 194 additions and 114 deletions
@@ -0,0 +1,68 @@
"""Phase 11: Rename supervisor role to director
Revision ID: phase11_director_role
Revises: phase10_customer_password_setup
Create Date: 2026-04-09
Changes
-------
1. Adds 'director' to the users.role ENUM.
2. Migrates all existing role='supervisor' users to role='director'.
3. Removes 'supervisor' from the ENUM once no rows use it.
4. Migrates notification_matrix rows keyed role_key='supervisor''director'.
"""
from alembic import op
import sqlalchemy as sa
revision = 'phase11_director_role'
down_revision = 'phase10_customer_password_setup'
branch_labels = None
depends_on = None
def upgrade():
# Step 1 — Expand ENUM to include both values (required before UPDATE)
op.execute(
"ALTER TABLE users MODIFY COLUMN role "
"ENUM('admin','supervisor','director','inspector','project_manager','customer') "
"NOT NULL"
)
# Step 2 — Migrate all supervisor users to director
op.execute("UPDATE users SET role = 'director' WHERE role = 'supervisor'")
# Step 3 — Remove 'supervisor' from the ENUM now that no rows reference it
op.execute(
"ALTER TABLE users MODIFY COLUMN role "
"ENUM('admin','director','inspector','project_manager','customer') "
"NOT NULL"
)
# Step 4 — Migrate notification_matrix role_key rows
op.execute(
"UPDATE notification_matrix SET role_key = 'director' WHERE role_key = 'supervisor'"
)
def downgrade():
# Step 1 — Expand ENUM to allow supervisor again
op.execute(
"ALTER TABLE users MODIFY COLUMN role "
"ENUM('admin','supervisor','director','inspector','project_manager','customer') "
"NOT NULL"
)
# Step 2 — Revert director users back to supervisor
op.execute("UPDATE users SET role = 'supervisor' WHERE role = 'director'")
# Step 3 — Remove 'director' from the ENUM
op.execute(
"ALTER TABLE users MODIFY COLUMN role "
"ENUM('admin','supervisor','inspector','project_manager','customer') "
"NOT NULL"
)
# Step 4 — Revert notification_matrix role_key rows
op.execute(
"UPDATE notification_matrix SET role_key = 'supervisor' WHERE role_key = 'director'"
)