
- Created Alembic migrations for SQLite database - Set up database initialization on app startup - Fixed linting issues with Ruff - Updated README with comprehensive documentation - Configured startup tasks and health checks
80 lines
3.1 KiB
Python
80 lines
3.1 KiB
Python
"""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') |