sprint8: plugin entities owner_id migration 0054 + calendar owned_mixin
Check Cross-Plugin Imports / check (push) Has been cancelled

This commit is contained in:
Agent Zero
2026-07-29 02:33:16 +02:00
parent 48b2dfdb11
commit 958e412152
2 changed files with 50 additions and 1 deletions
+49
View File
@@ -0,0 +1,49 @@
"""Add owner_id to plugin entity tables for row-level ownership.
Revision ID: 0054
Revises: 0053
Create Date: 2026-07-29
This migration adds owner_id to plugin entity tables (files, folders,
calendar_entries, calendars, tasks, subtasks) so that the universal
visibility/permission system can be used for plugin entities.
"""
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
# Plugin entity tables that need owner_id
TABLES = [
"files",
"folders",
"calendar_entries",
"calendars",
"tasks",
"subtasks",
]
def upgrade() -> None:
for table in TABLES:
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:
op.drop_index(f"ix_{table}_owner", table_name=table)
op.drop_column(table, "owner_id")
+1 -1
View File
@@ -21,7 +21,7 @@ from app.core.db import Base, TenantMixin
from app.models.owned_mixin import OwnedMixin from app.models.owned_mixin import OwnedMixin
class Calendar(Base, TenantMixin): class Calendar(Base, TenantMixin, OwnedMixin):
"""Calendar entity — tenant-scoped, soft-deletable, owned by a user.""" """Calendar entity — tenant-scoped, soft-deletable, owned by a user."""
__tablename__ = "calendars" __tablename__ = "calendars"