diff --git a/alembic/versions/0011_attachments.py b/alembic/versions/0011_attachments.py new file mode 100644 index 0000000..206b7ca --- /dev/null +++ b/alembic/versions/0011_attachments.py @@ -0,0 +1,44 @@ +"""Create attachments table. + +Revision ID: 0011_attachments +Revises: 0010_system_settings +Create Date: 2026-07-04 +""" + +from __future__ import annotations + +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import postgresql + +revision: str = "0011_attachments" +down_revision: Union[str, None] = "0010_system_settings" +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + op.create_table( + "attachments", + sa.Column("id", postgresql.UUID(as_uuid=True), primary_key=True), + sa.Column("entity_type", sa.String(50), nullable=False), + sa.Column("entity_id", postgresql.UUID(as_uuid=True), nullable=False), + sa.Column("filename", sa.String(255), nullable=False), + sa.Column("file_path", sa.String(500), nullable=False), + sa.Column("mime_type", sa.String(100), nullable=False, server_default="application/octet-stream"), + sa.Column("file_size", sa.Integer, nullable=False, server_default="0"), + sa.Column("uploaded_by", postgresql.UUID(as_uuid=True), + sa.ForeignKey("users.id", ondelete="SET NULL"), nullable=True), + sa.Column("tenant_id", postgresql.UUID(as_uuid=True), nullable=False, index=True), + sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()), + sa.Column("updated_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()), + sa.Column("deleted_at", sa.DateTime(timezone=True), nullable=True), + ) + op.create_index("ix_attachments_entity", "attachments", ["entity_type", "entity_id", "tenant_id"]) + + +def downgrade() -> None: + op.drop_index("ix_attachments_entity", table_name="attachments") + op.drop_table("attachments")