diff --git a/src/alembic/versions/2cf2279e48ef_initial_schema.py b/src/alembic/versions/2cf2279e48ef_initial_schema.py index 5bef2cd..1c9cf90 100644 --- a/src/alembic/versions/2cf2279e48ef_initial_schema.py +++ b/src/alembic/versions/2cf2279e48ef_initial_schema.py @@ -26,7 +26,7 @@ def upgrade() -> None: sa.Column('id', sa.String(length=43), nullable=False), sa.Column('return_to', sa.Text(), nullable=False), sa.Column('expires_at', sa.DateTime(timezone=True), nullable=False), - sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=False), + sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.func.now(), nullable=False), sa.PrimaryKeyConstraint('id', name=op.f('pk_auth_redirect')) ) op.create_table('election', @@ -61,7 +61,7 @@ def upgrade() -> None: sa.Column('image_id', sa.Integer(), autoincrement=True, nullable=False), sa.Column('storage_key', sa.Text(), nullable=False), sa.Column('original_filename', sa.Text(), nullable=False), - sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=False), + sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.func.now(), nullable=False), sa.PrimaryKeyConstraint('image_id', name=op.f('pk_image_asset')), sa.UniqueConstraint('storage_key', name=op.f('uq_image_asset_storage_key')) ) @@ -141,7 +141,7 @@ def upgrade() -> None: sa.Column('multiple_allowed', sa.Boolean(), nullable=True), sa.Column('effective_from', sa.Date(), nullable=False), sa.Column('effective_to', sa.Date(), nullable=True), - postgresql.ExcludeConstraint((sa.column('position_id'), '='), (sa.text("daterange(effective_from, effective_to, '[]')"), '&&'), using='gist', name='no_overlapping_versions'), + postgresql.ExcludeConstraint((sa.column('position_id'), '='), (sa.func.daterange(sa.column('effective_from'), sa.column('effective_to'), '[]'), '&&'), using='gist', name='no_overlapping_versions'), sa.CheckConstraint("CASE WHEN type = 'executive' THEN multiple_allowed IS NOT NULL WHEN type IN ('elected_representative', 'appointed_representative') THEN multiple_allowed IS NULL ELSE FALSE END", name=op.f('ck_officer_position_version_multiple_allowed_by_type')), sa.CheckConstraint('effective_to IS NULL OR effective_to >= effective_from', name=op.f('ck_officer_position_version_effective_end_after_start')), sa.ForeignKeyConstraint(['position_id'], ['officer_position.id'], name=op.f('fk_officer_position_version_position_id_officer_position')), @@ -151,7 +151,7 @@ def upgrade() -> None: sa.Column('computing_id', sa.String(length=16), nullable=False), sa.Column('role', sa.Enum('access', 'admin', 'exec', 'officer', 'user', 'event', 'election', name='role_valid', native_enum=False, create_constraint=True), nullable=False), sa.Column('added_by', sa.String(length=16), nullable=True), - sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=False), + sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.func.now(), nullable=False), sa.CheckConstraint("added_by IS NULL OR added_by ~ '^[a-z0-9]+$'", name=op.f('ck_site_user_role_added_by_format')), sa.CheckConstraint("computing_id ~ '^[a-z0-9]+$' AND computing_id = lower(computing_id)", name=op.f('ck_site_user_role_computing_id_format')), sa.ForeignKeyConstraint(['added_by'], ['site_user.computing_id'], name=op.f('fk_site_user_role_added_by_site_user'), ondelete='SET NULL'), @@ -162,7 +162,7 @@ def upgrade() -> None: op.create_table('user_session', sa.Column('session_hash', sa.LargeBinary(length=32), nullable=False), sa.Column('computing_id', sa.String(length=16), nullable=False), - sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=False), + sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.func.now(), nullable=False), sa.Column('expires_at', sa.DateTime(timezone=True), nullable=False), sa.CheckConstraint("computing_id ~ '^[a-z0-9]+$' AND computing_id = lower(computing_id)", name=op.f('ck_user_session_computing_id_format')), sa.ForeignKeyConstraint(['computing_id'], ['site_user.computing_id'], name=op.f('fk_user_session_computing_id_site_user')), diff --git a/src/alembic/versions/d9a62b4f013e_auth_references_user_uid.py b/src/alembic/versions/d9a62b4f013e_auth_references_user_uid.py index 1fc8126..e712e39 100644 --- a/src/alembic/versions/d9a62b4f013e_auth_references_user_uid.py +++ b/src/alembic/versions/d9a62b4f013e_auth_references_user_uid.py @@ -7,6 +7,7 @@ from collections.abc import Sequence import sqlalchemy as sa + from alembic import op revision: str = "d9a62b4f013e" @@ -16,21 +17,18 @@ def upgrade() -> None: + users = sa.table("site_user", sa.column("computing_id", sa.String(16)), sa.column("uid", sa.Uuid())) for table in ("user_session", "site_user_role"): op.add_column(table, sa.Column("uid", sa.Uuid(), nullable=True)) - op.execute(sa.text( - f"UPDATE {table} AS target SET uid = users.uid " - "FROM site_user AS users WHERE target.computing_id = users.computing_id" - )) + target = sa.table(table, sa.column("computing_id", sa.String(16)), sa.column("uid", sa.Uuid())) + op.execute(target.update().where(target.c.computing_id == users.c.computing_id).values(uid=users.c.uid)) op.alter_column(table, "uid", existing_type=sa.Uuid(), nullable=False) op.drop_constraint(op.f(f"fk_{table}_computing_id_site_user"), table, type_="foreignkey") op.drop_constraint(op.f(f"ck_{table}_computing_id_format"), table, type_="check") op.add_column("site_user_role", sa.Column("added_by_uid", sa.Uuid(), nullable=True)) - op.execute(sa.text( - "UPDATE site_user_role AS target SET added_by_uid = users.uid " - "FROM site_user AS users WHERE target.added_by = users.computing_id" - )) + roles = sa.table("site_user_role", sa.column("added_by", sa.String(16)), sa.column("added_by_uid", sa.Uuid())) + op.execute(roles.update().where(roles.c.added_by == users.c.computing_id).values(added_by_uid=users.c.uid)) op.drop_constraint(op.f("fk_site_user_role_added_by_site_user"), "site_user_role", type_="foreignkey") op.drop_constraint(op.f("ck_site_user_role_added_by_format"), "site_user_role", type_="check") op.drop_column("site_user_role", "added_by") @@ -44,30 +42,38 @@ def upgrade() -> None: op.create_primary_key(op.f("pk_site_user_role"), "site_user_role", ["uid", "role"]) op.create_index(op.f("ix_user_session_uid"), "user_session", ["uid"]) op.create_foreign_key( - op.f("fk_site_user_role_added_by_site_user"), "site_user_role", "site_user", - ["added_by"], ["uid"], ondelete="SET NULL", + op.f("fk_site_user_role_added_by_site_user"), + "site_user_role", + "site_user", + ["added_by"], + ["uid"], + ondelete="SET NULL", ) def downgrade() -> None: + users = sa.table("site_user", sa.column("computing_id", sa.String(16)), sa.column("uid", sa.Uuid())) for table in ("user_session", "site_user_role"): op.add_column(table, sa.Column("computing_id", sa.String(16), nullable=True)) - op.execute(sa.text( - f"UPDATE {table} AS target SET computing_id = users.computing_id " - "FROM site_user AS users WHERE target.uid = users.uid" - )) + target = sa.table(table, sa.column("computing_id", sa.String(16)), sa.column("uid", sa.Uuid())) + op.execute(target.update().where(target.c.uid == users.c.uid).values(computing_id=users.c.computing_id)) op.alter_column(table, "computing_id", existing_type=sa.String(16), nullable=False) op.drop_constraint(op.f(f"fk_{table}_uid_site_user"), table, type_="foreignkey") op.add_column("site_user_role", sa.Column("added_by_computing_id", sa.String(16), nullable=True)) - op.execute(sa.text( - "UPDATE site_user_role AS target SET added_by_computing_id = users.computing_id " - "FROM site_user AS users WHERE target.added_by = users.uid" - )) + roles = sa.table( + "site_user_role", + sa.column("added_by", sa.Uuid()), + sa.column("added_by_computing_id", sa.String(16)), + ) + op.execute(roles.update().where(roles.c.added_by == users.c.uid).values(added_by_computing_id=users.c.computing_id)) op.drop_constraint(op.f("fk_site_user_role_added_by_site_user"), "site_user_role", type_="foreignkey") op.drop_column("site_user_role", "added_by") op.alter_column( - "site_user_role", "added_by_computing_id", new_column_name="added_by", existing_type=sa.String(16), + "site_user_role", + "added_by_computing_id", + new_column_name="added_by", + existing_type=sa.String(16), ) op.drop_constraint(op.f("pk_site_user_role"), "site_user_role", type_="primary") @@ -75,18 +81,29 @@ def downgrade() -> None: for table in ("user_session", "site_user_role"): op.drop_column(table, "uid") op.create_foreign_key( - op.f(f"fk_{table}_computing_id_site_user"), table, "site_user", ["computing_id"], ["computing_id"], + op.f(f"fk_{table}_computing_id_site_user"), + table, + "site_user", + ["computing_id"], + ["computing_id"], ) op.create_check_constraint( - op.f(f"ck_{table}_computing_id_format"), table, + op.f(f"ck_{table}_computing_id_format"), + table, "computing_id ~ '^[a-z0-9]+$' AND computing_id = lower(computing_id)", ) op.create_primary_key(op.f("pk_site_user_role"), "site_user_role", ["computing_id", "role"]) op.create_index(op.f("ix_user_session_computing_id"), "user_session", ["computing_id"]) op.create_foreign_key( - op.f("fk_site_user_role_added_by_site_user"), "site_user_role", "site_user", - ["added_by"], ["computing_id"], ondelete="SET NULL", + op.f("fk_site_user_role_added_by_site_user"), + "site_user_role", + "site_user", + ["added_by"], + ["computing_id"], + ondelete="SET NULL", ) op.create_check_constraint( - op.f("ck_site_user_role_added_by_format"), "site_user_role", "added_by IS NULL OR added_by ~ '^[a-z0-9]+$'", + op.f("ck_site_user_role_added_by_format"), + "site_user_role", + "added_by IS NULL OR added_by ~ '^[a-z0-9]+$'", )