mirror of
https://github.com/aljazceru/enclava.git
synced 2025-12-17 07:24:34 +01:00
251 lines
13 KiB
Python
251 lines
13 KiB
Python
"""Initial schema
|
|
|
|
Revision ID: 001
|
|
Revises:
|
|
Create Date: 2025-01-01 00:00:00.000000
|
|
|
|
"""
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
from sqlalchemy.dialects import postgresql
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision = '001'
|
|
down_revision = None
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
# Create users table
|
|
op.create_table('users',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('email', sa.String(), nullable=False),
|
|
sa.Column('username', sa.String(), nullable=False),
|
|
sa.Column('hashed_password', sa.String(), nullable=False),
|
|
sa.Column('full_name', sa.String(), nullable=True),
|
|
sa.Column('is_active', sa.Boolean(), nullable=True),
|
|
sa.Column('is_superuser', sa.Boolean(), nullable=True),
|
|
sa.Column('is_verified', sa.Boolean(), nullable=True),
|
|
sa.Column('role', sa.String(), nullable=True),
|
|
sa.Column('permissions', sa.JSON(), nullable=True),
|
|
sa.Column('avatar_url', sa.String(), nullable=True),
|
|
sa.Column('bio', sa.Text(), nullable=True),
|
|
sa.Column('company', sa.String(), nullable=True),
|
|
sa.Column('website', sa.String(), nullable=True),
|
|
sa.Column('created_at', sa.DateTime(), nullable=True),
|
|
sa.Column('updated_at', sa.DateTime(), nullable=True),
|
|
sa.Column('last_login', sa.DateTime(), nullable=True),
|
|
sa.Column('preferences', sa.JSON(), nullable=True),
|
|
sa.Column('notification_settings', sa.JSON(), nullable=True),
|
|
sa.PrimaryKeyConstraint('id')
|
|
)
|
|
op.create_index(op.f('ix_users_email'), 'users', ['email'], unique=True)
|
|
op.create_index(op.f('ix_users_id'), 'users', ['id'], unique=False)
|
|
op.create_index(op.f('ix_users_username'), 'users', ['username'], unique=True)
|
|
|
|
# Create api_keys table
|
|
op.create_table('api_keys',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('name', sa.String(), nullable=False),
|
|
sa.Column('key_hash', sa.String(), nullable=False),
|
|
sa.Column('key_prefix', sa.String(), nullable=False),
|
|
sa.Column('user_id', sa.Integer(), nullable=False),
|
|
sa.Column('is_active', sa.Boolean(), nullable=True),
|
|
sa.Column('permissions', sa.JSON(), nullable=True),
|
|
sa.Column('scopes', sa.JSON(), nullable=True),
|
|
sa.Column('rate_limit_per_minute', sa.Integer(), nullable=True),
|
|
sa.Column('rate_limit_per_hour', sa.Integer(), nullable=True),
|
|
sa.Column('rate_limit_per_day', sa.Integer(), nullable=True),
|
|
sa.Column('allowed_models', sa.JSON(), nullable=True),
|
|
sa.Column('allowed_endpoints', sa.JSON(), nullable=True),
|
|
sa.Column('allowed_ips', sa.JSON(), nullable=True),
|
|
sa.Column('description', sa.Text(), nullable=True),
|
|
sa.Column('tags', sa.JSON(), nullable=True),
|
|
sa.Column('created_at', sa.DateTime(), nullable=True),
|
|
sa.Column('updated_at', sa.DateTime(), nullable=True),
|
|
sa.Column('last_used_at', sa.DateTime(), nullable=True),
|
|
sa.Column('expires_at', sa.DateTime(), nullable=True),
|
|
sa.Column('total_requests', sa.Integer(), nullable=True),
|
|
sa.Column('total_tokens', sa.Integer(), nullable=True),
|
|
sa.Column('total_cost', sa.Integer(), nullable=True),
|
|
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
|
|
sa.PrimaryKeyConstraint('id')
|
|
)
|
|
op.create_index(op.f('ix_api_keys_id'), 'api_keys', ['id'], unique=False)
|
|
op.create_index(op.f('ix_api_keys_key_hash'), 'api_keys', ['key_hash'], unique=True)
|
|
op.create_index(op.f('ix_api_keys_key_prefix'), 'api_keys', ['key_prefix'], unique=False)
|
|
|
|
# Create budgets table
|
|
op.create_table('budgets',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('name', sa.String(), nullable=False),
|
|
sa.Column('description', sa.String(), nullable=True),
|
|
sa.Column('user_id', sa.Integer(), nullable=False),
|
|
sa.Column('limit_amount', sa.Float(), nullable=False),
|
|
sa.Column('currency', sa.String(), nullable=True),
|
|
sa.Column('period', sa.String(), nullable=True),
|
|
sa.Column('current_usage', sa.Float(), nullable=True),
|
|
sa.Column('remaining_amount', sa.Float(), nullable=True),
|
|
sa.Column('status', sa.String(), nullable=True),
|
|
sa.Column('is_active', sa.Boolean(), nullable=True),
|
|
sa.Column('alert_thresholds', sa.JSON(), nullable=True),
|
|
sa.Column('alerts_sent', sa.JSON(), nullable=True),
|
|
sa.Column('auto_suspend_on_exceed', sa.Boolean(), nullable=True),
|
|
sa.Column('auto_notify_on_exceed', sa.Boolean(), nullable=True),
|
|
sa.Column('period_start', sa.DateTime(), nullable=False),
|
|
sa.Column('period_end', sa.DateTime(), nullable=False),
|
|
sa.Column('allowed_models', sa.JSON(), nullable=True),
|
|
sa.Column('allowed_endpoints', sa.JSON(), nullable=True),
|
|
sa.Column('user_groups', sa.JSON(), nullable=True),
|
|
sa.Column('tags', sa.JSON(), nullable=True),
|
|
sa.Column('metadata', sa.JSON(), nullable=True),
|
|
sa.Column('created_at', sa.DateTime(), nullable=True),
|
|
sa.Column('updated_at', sa.DateTime(), nullable=True),
|
|
sa.Column('last_reset_at', sa.DateTime(), nullable=True),
|
|
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
|
|
sa.PrimaryKeyConstraint('id')
|
|
)
|
|
op.create_index(op.f('ix_budgets_id'), 'budgets', ['id'], unique=False)
|
|
|
|
# Create usage_tracking table
|
|
op.create_table('usage_tracking',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('request_id', sa.String(), nullable=False),
|
|
sa.Column('session_id', sa.String(), nullable=True),
|
|
sa.Column('user_id', sa.Integer(), nullable=False),
|
|
sa.Column('api_key_id', sa.Integer(), nullable=True),
|
|
sa.Column('endpoint', sa.String(), nullable=False),
|
|
sa.Column('method', sa.String(), nullable=False),
|
|
sa.Column('user_agent', sa.String(), nullable=True),
|
|
sa.Column('ip_address', sa.String(), nullable=True),
|
|
sa.Column('model_name', sa.String(), nullable=True),
|
|
sa.Column('provider', sa.String(), nullable=True),
|
|
sa.Column('model_version', sa.String(), nullable=True),
|
|
sa.Column('request_data', sa.JSON(), nullable=True),
|
|
sa.Column('response_data', sa.JSON(), nullable=True),
|
|
sa.Column('prompt_tokens', sa.Integer(), nullable=True),
|
|
sa.Column('completion_tokens', sa.Integer(), nullable=True),
|
|
sa.Column('total_tokens', sa.Integer(), nullable=True),
|
|
sa.Column('cost_per_token', sa.Float(), nullable=True),
|
|
sa.Column('total_cost', sa.Float(), nullable=True),
|
|
sa.Column('currency', sa.String(), nullable=True),
|
|
sa.Column('response_time', sa.Float(), nullable=True),
|
|
sa.Column('queue_time', sa.Float(), nullable=True),
|
|
sa.Column('processing_time', sa.Float(), nullable=True),
|
|
sa.Column('status', sa.String(), nullable=True),
|
|
sa.Column('status_code', sa.Integer(), nullable=True),
|
|
sa.Column('error_message', sa.Text(), nullable=True),
|
|
sa.Column('error_type', sa.String(), nullable=True),
|
|
sa.Column('modules_used', sa.JSON(), nullable=True),
|
|
sa.Column('interceptor_chain', sa.JSON(), nullable=True),
|
|
sa.Column('tags', sa.JSON(), nullable=True),
|
|
sa.Column('metadata', sa.JSON(), nullable=True),
|
|
sa.Column('created_at', sa.DateTime(), nullable=True),
|
|
sa.Column('started_at', sa.DateTime(), nullable=True),
|
|
sa.Column('completed_at', sa.DateTime(), nullable=True),
|
|
sa.Column('cache_hit', sa.Boolean(), nullable=True),
|
|
sa.Column('cache_key', sa.String(), nullable=True),
|
|
sa.Column('rate_limit_remaining', sa.Integer(), nullable=True),
|
|
sa.Column('rate_limit_reset', sa.DateTime(), nullable=True),
|
|
sa.ForeignKeyConstraint(['api_key_id'], ['api_keys.id'], ),
|
|
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
|
|
sa.PrimaryKeyConstraint('id')
|
|
)
|
|
op.create_index(op.f('ix_usage_tracking_id'), 'usage_tracking', ['id'], unique=False)
|
|
op.create_index(op.f('ix_usage_tracking_request_id'), 'usage_tracking', ['request_id'], unique=True)
|
|
op.create_index(op.f('ix_usage_tracking_session_id'), 'usage_tracking', ['session_id'], unique=False)
|
|
|
|
# Create audit_logs table
|
|
op.create_table('audit_logs',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('user_id', sa.Integer(), nullable=True),
|
|
sa.Column('action', sa.String(), nullable=False),
|
|
sa.Column('resource_type', sa.String(), nullable=False),
|
|
sa.Column('resource_id', sa.String(), nullable=True),
|
|
sa.Column('description', sa.Text(), nullable=False),
|
|
sa.Column('details', sa.JSON(), nullable=True),
|
|
sa.Column('ip_address', sa.String(), nullable=True),
|
|
sa.Column('user_agent', sa.String(), nullable=True),
|
|
sa.Column('session_id', sa.String(), nullable=True),
|
|
sa.Column('request_id', sa.String(), nullable=True),
|
|
sa.Column('severity', sa.String(), nullable=True),
|
|
sa.Column('category', sa.String(), nullable=True),
|
|
sa.Column('success', sa.Boolean(), nullable=True),
|
|
sa.Column('error_message', sa.Text(), nullable=True),
|
|
sa.Column('tags', sa.JSON(), nullable=True),
|
|
sa.Column('metadata', sa.JSON(), nullable=True),
|
|
sa.Column('old_values', sa.JSON(), nullable=True),
|
|
sa.Column('new_values', sa.JSON(), nullable=True),
|
|
sa.Column('created_at', sa.DateTime(), nullable=True),
|
|
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
|
|
sa.PrimaryKeyConstraint('id')
|
|
)
|
|
op.create_index(op.f('ix_audit_logs_created_at'), 'audit_logs', ['created_at'], unique=False)
|
|
op.create_index(op.f('ix_audit_logs_id'), 'audit_logs', ['id'], unique=False)
|
|
|
|
# Create modules table
|
|
op.create_table('modules',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('name', sa.String(), nullable=False),
|
|
sa.Column('display_name', sa.String(), nullable=False),
|
|
sa.Column('description', sa.Text(), nullable=True),
|
|
sa.Column('module_type', sa.String(), nullable=True),
|
|
sa.Column('category', sa.String(), nullable=True),
|
|
sa.Column('version', sa.String(), nullable=False),
|
|
sa.Column('author', sa.String(), nullable=True),
|
|
sa.Column('license', sa.String(), nullable=True),
|
|
sa.Column('status', sa.String(), nullable=True),
|
|
sa.Column('is_enabled', sa.Boolean(), nullable=True),
|
|
sa.Column('is_core', sa.Boolean(), nullable=True),
|
|
sa.Column('config_schema', sa.JSON(), nullable=True),
|
|
sa.Column('config_values', sa.JSON(), nullable=True),
|
|
sa.Column('default_config', sa.JSON(), nullable=True),
|
|
sa.Column('dependencies', sa.JSON(), nullable=True),
|
|
sa.Column('conflicts', sa.JSON(), nullable=True),
|
|
sa.Column('install_path', sa.String(), nullable=True),
|
|
sa.Column('entry_point', sa.String(), nullable=True),
|
|
sa.Column('interceptor_chains', sa.JSON(), nullable=True),
|
|
sa.Column('execution_order', sa.Integer(), nullable=True),
|
|
sa.Column('api_endpoints', sa.JSON(), nullable=True),
|
|
sa.Column('required_permissions', sa.JSON(), nullable=True),
|
|
sa.Column('security_level', sa.String(), nullable=True),
|
|
sa.Column('tags', sa.JSON(), nullable=True),
|
|
sa.Column('metadata', sa.JSON(), nullable=True),
|
|
sa.Column('last_error', sa.Text(), nullable=True),
|
|
sa.Column('error_count', sa.Integer(), nullable=True),
|
|
sa.Column('last_started', sa.DateTime(), nullable=True),
|
|
sa.Column('last_stopped', sa.DateTime(), nullable=True),
|
|
sa.Column('request_count', sa.Integer(), nullable=True),
|
|
sa.Column('success_count', sa.Integer(), nullable=True),
|
|
sa.Column('error_count_runtime', sa.Integer(), nullable=True),
|
|
sa.Column('created_at', sa.DateTime(), nullable=True),
|
|
sa.Column('updated_at', sa.DateTime(), nullable=True),
|
|
sa.Column('installed_at', sa.DateTime(), nullable=True),
|
|
sa.PrimaryKeyConstraint('id')
|
|
)
|
|
op.create_index(op.f('ix_modules_id'), 'modules', ['id'], unique=False)
|
|
op.create_index(op.f('ix_modules_name'), 'modules', ['name'], unique=True)
|
|
|
|
|
|
def downgrade() -> None:
|
|
op.drop_index(op.f('ix_modules_name'), table_name='modules')
|
|
op.drop_index(op.f('ix_modules_id'), table_name='modules')
|
|
op.drop_table('modules')
|
|
op.drop_index(op.f('ix_audit_logs_id'), table_name='audit_logs')
|
|
op.drop_index(op.f('ix_audit_logs_created_at'), table_name='audit_logs')
|
|
op.drop_table('audit_logs')
|
|
op.drop_index(op.f('ix_usage_tracking_session_id'), table_name='usage_tracking')
|
|
op.drop_index(op.f('ix_usage_tracking_request_id'), table_name='usage_tracking')
|
|
op.drop_index(op.f('ix_usage_tracking_id'), table_name='usage_tracking')
|
|
op.drop_table('usage_tracking')
|
|
op.drop_index(op.f('ix_budgets_id'), table_name='budgets')
|
|
op.drop_table('budgets')
|
|
op.drop_index(op.f('ix_api_keys_key_prefix'), table_name='api_keys')
|
|
op.drop_index(op.f('ix_api_keys_key_hash'), table_name='api_keys')
|
|
op.drop_index(op.f('ix_api_keys_id'), table_name='api_keys')
|
|
op.drop_table('api_keys')
|
|
op.drop_index(op.f('ix_users_username'), table_name='users')
|
|
op.drop_index(op.f('ix_users_id'), table_name='users')
|
|
op.drop_index(op.f('ix_users_email'), table_name='users')
|
|
op.drop_table('users') |