feat: add storage cleanup mechanism with soft delete and auto scheduler
- Add soft delete (deleted_at column) to preserve task records for statistics - Implement cleanup service to delete old files while keeping DB records - Add automatic cleanup scheduler (configurable interval, default 24h) - Add admin endpoints: storage stats, cleanup trigger, scheduler status - Update task service with admin views (include deleted/files_deleted) - Add frontend storage management UI in admin dashboard - Add i18n translations for storage management 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
"""add_deleted_at_to_tasks
|
||||
|
||||
Revision ID: f3d499f5d0cf
|
||||
Revises: g2b3c4d5e6f7
|
||||
Create Date: 2025-12-14 12:17:25.176482
|
||||
|
||||
"""
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = 'f3d499f5d0cf'
|
||||
down_revision: Union[str, None] = 'g2b3c4d5e6f7'
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
"""Add deleted_at column for soft delete support."""
|
||||
op.add_column(
|
||||
'tool_ocr_tasks',
|
||||
sa.Column('deleted_at', sa.DateTime(), nullable=True,
|
||||
comment='Soft delete timestamp - NULL means not deleted')
|
||||
)
|
||||
op.create_index('ix_tool_ocr_tasks_deleted_at', 'tool_ocr_tasks', ['deleted_at'])
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
"""Remove deleted_at column."""
|
||||
op.drop_index('ix_tool_ocr_tasks_deleted_at', table_name='tool_ocr_tasks')
|
||||
op.drop_column('tool_ocr_tasks', 'deleted_at')
|
||||
Reference in New Issue
Block a user