bifroest/app/migrations/versions/0015_speicherkontingent.py
2026-10-27 08:34:17 +01:00

34 lines
1.2 KiB
Python

"""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')