Neda/Back/alembic/versions/36ed70229177_add_owner_id_to_group.py
2026-03-28 20:49:16 +03:30

58 lines
1.8 KiB
Python

"""add owner_id to group
Revision ID: 36ed70229177
Revises: b5ace31192c3
Create Date: 2026-03-28 13:26:31.817104
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision: str = '36ed70229177'
down_revision: Union[str, Sequence[str], None] = 'b5ace31192c3'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
"""Upgrade schema."""
# 1. Add column as nullable
op.add_column('groups', sa.Column('owner_id', sa.UUID(), nullable=True))
op.create_index(op.f('ix_groups_owner_id'), 'groups', ['owner_id'], unique=False)
op.create_foreign_key(None, 'groups', 'users', ['owner_id'], ['id'], ondelete='CASCADE')
# 2. Update existing groups with an owner (using the first manager or any member)
op.execute("""
UPDATE groups g
SET owner_id = (
SELECT user_id
FROM group_members
WHERE group_id = g.id
ORDER BY (CASE WHEN role::text = 'MANAGER' THEN 0 ELSE 1 END), user_id
LIMIT 1
)
""")
# 3. For any group that still has NULL (unlikely), set to the first user in the system
op.execute("""
UPDATE groups
SET owner_id = (SELECT id FROM users LIMIT 1)
WHERE owner_id IS NULL
""")
# 4. Set NOT NULL constraint
op.alter_column('groups', 'owner_id', nullable=False)
def downgrade() -> None:
"""Downgrade schema."""
# ### commands auto generated by Alembic - please adjust! ###
op.drop_constraint(None, 'groups', type_='foreignkey')
op.drop_index(op.f('ix_groups_owner_id'), table_name='groups')
op.drop_column('groups', 'owner_id')
# ### end Alembic commands ###