"""Speicherkontingent je Workspace und Größe der DuckDB-Datei je Upload Revision ID: 0015 Revises: 0014 Erstellt: 2026-10-22 12:33:38.744411 """ from pathlib import Path import sqlalchemy as sa from alembic import op revision = '0015' down_revision = '0014' branch_labels = None depends_on = None def upgrade() -> None: op.add_column('uploads', sa.Column('stored_size', sa.BigInteger(), server_default='0', nullable=False)) op.add_column('workspaces', sa.Column('storage_limit_mb', sa.Integer(), nullable=True)) # Bestand: Größe der DuckDB-Datei, wenn sie hier liegt, sonst die Größe der hochgeladenen Datei from app.core.config import get_settings root = Path(get_settings().upload_dir) connection = op.get_bind() for upload_id, workspace_id, size in connection.execute(sa.text("SELECT id, workspace_id, size FROM uploads")): path = root / str(workspace_id) / f"{upload_id}.duckdb" stored = path.stat().st_size if path.is_file() else size connection.execute(sa.text("UPDATE uploads SET stored_size = :s WHERE id = :i"), {"s": stored, "i": upload_id}) def downgrade() -> None: op.drop_column('workspaces', 'storage_limit_mb') op.drop_column('uploads', 'stored_size')