Files
leocrm/alembic/versions/0054_plugin_owner_id.py
T

63 lines
1.5 KiB
Python

"""Add owner_id to plugin entity tables for row-level ownership.
Revision ID: 0054
Revises: 0053
Create Date: 2026-07-29
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects.postgresql import UUID as PGUUID
revision = "0054"
down_revision = "0053"
branch_labels = None
depends_on = None
# Tables that need owner_id
TABLES = [
"files",
"folders",
"calendar_entries",
"calendars",
"tasks",
"subtasks",
]
def upgrade() -> None:
# Check which columns already exist before adding
conn = op.get_bind()
for table in TABLES:
# Check if column already exists
result = conn.execute(
sa.text(
"SELECT column_name FROM information_schema.columns "
"WHERE table_name = :table AND column_name = 'owner_id'"
),
{"table": table},
)
if result.fetchone() is None:
op.add_column(
table,
sa.Column(
"owner_id",
PGUUID(as_uuid=True),
sa.ForeignKey("users.id", ondelete="SET NULL"),
nullable=True,
),
)
op.create_index(f"ix_{table}_owner", table, ["owner_id"])
def downgrade() -> None:
for table in TABLES:
try:
op.drop_index(f"ix_{table}_owner", table_name=table)
except Exception:
pass
try:
op.drop_column(table, "owner_id")
except Exception:
pass