"""Initial schema Revision ID: 001 Revises: Create Date: 2023-06-05 """ from alembic import op import sqlalchemy as sa # revision identifiers, used by Alembic. revision = '001' down_revision = None branch_labels = None depends_on = None def upgrade(): # Create arbitrage_opportunities table op.create_table( 'arbitrage_opportunities', sa.Column('id', sa.Integer(), primary_key=True, index=True), sa.Column('created_at', sa.DateTime(), default=sa.func.current_timestamp(), index=True), sa.Column('token_address', sa.String(), index=True), sa.Column('token_symbol', sa.String(), index=True), sa.Column('source_dex', sa.String(), index=True), sa.Column('target_dex', sa.String(), index=True), sa.Column('source_price', sa.Float()), sa.Column('target_price', sa.Float()), sa.Column('price_difference', sa.Float()), sa.Column('price_difference_percent', sa.Float(), index=True), sa.Column('estimated_profit_usd', sa.Float()), sa.Column('estimated_profit_token', sa.Float()), sa.Column('max_trade_amount_usd', sa.Float()), sa.Column('max_trade_amount_token', sa.Float()), sa.Column('slippage_estimate', sa.Float()), sa.Column('fees_estimate', sa.Float()), sa.Column('is_viable', sa.Boolean(), default=False, index=True), sa.Column('was_executed', sa.Boolean(), default=False, index=True) ) # Create trades table op.create_table( 'trades', sa.Column('id', sa.Integer(), primary_key=True, index=True), sa.Column('created_at', sa.DateTime(), default=sa.func.current_timestamp(), index=True), sa.Column('opportunity_id', sa.Integer(), sa.ForeignKey("arbitrage_opportunities.id"), index=True), sa.Column('token_address', sa.String(), index=True), sa.Column('token_symbol', sa.String(), index=True), sa.Column('source_dex', sa.String()), sa.Column('target_dex', sa.String()), sa.Column('input_amount', sa.Float()), sa.Column('input_amount_usd', sa.Float()), sa.Column('output_amount', sa.Float()), sa.Column('output_amount_usd', sa.Float()), sa.Column('profit_amount', sa.Float()), sa.Column('profit_amount_usd', sa.Float()), sa.Column('profit_percent', sa.Float()), sa.Column('tx_signature', sa.String(), unique=True, index=True, nullable=True), sa.Column('tx_status', sa.String(), index=True), sa.Column('tx_error', sa.Text(), nullable=True) ) # Create system_events table op.create_table( 'system_events', sa.Column('id', sa.Integer(), primary_key=True, index=True), sa.Column('timestamp', sa.DateTime(), default=sa.func.current_timestamp(), index=True), sa.Column('event_type', sa.String(), index=True), sa.Column('component', sa.String(), index=True), sa.Column('message', sa.Text()), sa.Column('details', sa.Text(), nullable=True) ) def downgrade(): op.drop_table('trades') op.drop_table('system_events') op.drop_table('arbitrage_opportunities')