124 lines
6.4 KiB
Python
124 lines
6.4 KiB
Python
"""accounting, vaultcreation, ofac
|
|
|
|
Revision ID: 509010f13e8b
|
|
Revises: 86afa7b6415d
|
|
Create Date: 2025-01-03 19:11:22.073682
|
|
|
|
"""
|
|
from typing import Sequence, Union
|
|
|
|
import sqlalchemy as sa
|
|
from alembic import op
|
|
from sqlalchemy.dialects import postgresql
|
|
|
|
import dexorder.database
|
|
import dexorder.database.column_types
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision: str = '509010f13e8b'
|
|
down_revision: Union[str, None] = '86afa7b6415d'
|
|
branch_labels: Union[str, Sequence[str], None] = None
|
|
depends_on: Union[str, Sequence[str], None] = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
op.execute("ALTER TYPE transactionjobstate ADD VALUE 'Declined'")
|
|
op.create_table('accounting',
|
|
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
|
|
sa.Column('time', sa.DateTime(), nullable=False),
|
|
sa.Column('account', sa.String(), nullable=False),
|
|
sa.Column('category', sa.Enum('Transfer', 'Income', 'Expense', 'Trade', 'Special', name='accountingcategory'), nullable=False),
|
|
sa.Column('subcategory', sa.Enum('OrderFee', 'GasFee', 'FillFee', 'Admin', 'TransactionGas', 'VaultCreation', 'Execution', 'FeeAdjustment', 'InitialBalance', name='accountingsubcategory'), nullable=True),
|
|
sa.Column('token', sa.String(), nullable=False),
|
|
sa.Column('amount', dexorder.database.column_types.DecimalNumeric(), nullable=False),
|
|
sa.Column('value', dexorder.database.column_types.DecimalNumeric(), nullable=True),
|
|
sa.Column('chain_id', sa.Integer(), nullable=False),
|
|
sa.Column('tx_id', sa.String(), nullable=True),
|
|
sa.Column('note', sa.String(), nullable=True),
|
|
sa.PrimaryKeyConstraint('id')
|
|
)
|
|
op.create_index(op.f('ix_accounting_category'), 'accounting', ['category'], unique=False)
|
|
op.create_index(op.f('ix_accounting_subcategory'), 'accounting', ['subcategory'], unique=False)
|
|
op.create_index(op.f('ix_accounting_time'), 'accounting', ['time'], unique=False)
|
|
op.create_index(op.f('ix_accounting_token'), 'accounting', ['token'], unique=False)
|
|
op.create_index(op.f('ix_accounting_account'), 'accounting', ['account'], unique=False)
|
|
op.create_index(op.f('ix_accounting_chain_id'), 'accounting', ['chain_id'], unique=False)
|
|
op.create_table('ofac',
|
|
sa.Column('address', sa.String(), nullable=False),
|
|
sa.PrimaryKeyConstraint('address')
|
|
)
|
|
op.create_table('ofacalerts',
|
|
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
|
|
sa.Column('time', sa.DateTime(), nullable=False),
|
|
sa.Column('address', sa.String(), nullable=False),
|
|
sa.Column('ip', sa.String(), nullable=True),
|
|
sa.PrimaryKeyConstraint('id')
|
|
)
|
|
op.create_table('vaultcreationrequest',
|
|
sa.Column('chain', dexorder.database.column_types.Blockchain(), nullable=False),
|
|
sa.Column('owner', sa.String(), nullable=False),
|
|
sa.Column('num', sa.Integer(), nullable=False),
|
|
sa.Column('time', sa.DateTime(), nullable=False),
|
|
sa.Column('ipaddr', postgresql.INET(), nullable=False),
|
|
sa.Column('vault', sa.String(), nullable=True),
|
|
sa.PrimaryKeyConstraint('chain', 'owner', 'num')
|
|
)
|
|
op.create_index('ix_vault_address_not_null', 'vaultcreationrequest', ['vault'], unique=False, postgresql_where='vault IS NOT NULL')
|
|
op.create_table('account',
|
|
sa.Column('chain', dexorder.database.column_types.Blockchain(), nullable=False),
|
|
sa.Column('address', sa.String(), nullable=False),
|
|
sa.Column('kind', sa.Enum('Admin', 'OrderFee', 'GasFee', 'FillFee', 'Execution', name='accountkind'), nullable=False),
|
|
sa.Column('balances', dexorder.database.column_types.Balances(astext_type=sa.Text()), server_default='{}', nullable=False),
|
|
sa.PrimaryKeyConstraint('chain', 'address')
|
|
)
|
|
op.create_index(op.f('ix_account_kind'), 'account', ['kind'], unique=False)
|
|
|
|
op.create_table('reconciliation',
|
|
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
|
|
sa.Column('chain', dexorder.database.column_types.Blockchain(), nullable=False),
|
|
sa.Column('address', sa.String(), nullable=False),
|
|
sa.Column('accounting_id', sa.Integer(), nullable=False),
|
|
sa.Column('height', sa.Integer(), nullable=False),
|
|
sa.Column('balances', dexorder.database.column_types.Balances(astext_type=sa.Text()), server_default='{}', nullable=False),
|
|
sa.ForeignKeyConstraint(['chain', 'address'], ['account.chain', 'account.address'], ondelete='CASCADE'),
|
|
sa.PrimaryKeyConstraint('id')
|
|
)
|
|
op.create_index(op.f('ix_reconciliation_accounting_id'), 'reconciliation', ['accounting_id'], unique=False)
|
|
op.create_index(op.f('ix_reconciliation_address'), 'reconciliation', ['address'], unique=False)
|
|
op.create_index(op.f('ix_reconciliation_chain'), 'reconciliation', ['chain'], unique=False)
|
|
op.create_index(op.f('ix_reconciliation_height'), 'reconciliation', ['height'], unique=False)
|
|
|
|
op.create_table('tosacceptance',
|
|
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
|
|
sa.Column('ipaddr', sa.String(), nullable=False),
|
|
sa.Column('time', sa.DateTime(), nullable=False),
|
|
sa.Column('version', sa.DateTime(), nullable=False),
|
|
sa.PrimaryKeyConstraint('id')
|
|
)
|
|
|
|
|
|
|
|
def downgrade() -> None:
|
|
op.drop_table('tosacceptance')
|
|
op.drop_index(op.f('ix_reconciliation_height'), table_name='reconciliation')
|
|
op.drop_index(op.f('ix_reconciliation_chain'), table_name='reconciliation')
|
|
op.drop_index(op.f('ix_reconciliation_address'), table_name='reconciliation')
|
|
op.drop_index(op.f('ix_reconciliation_accounting_id'), table_name='reconciliation')
|
|
op.drop_table('reconciliation')
|
|
op.drop_index(op.f('ix_account_kind'), table_name='account')
|
|
op.drop_table('account')
|
|
op.drop_index('ix_vault_address_not_null', table_name='vaultcreationrequest', postgresql_where='vault IS NOT NULL')
|
|
op.drop_table('vaultcreationrequest')
|
|
op.drop_table('ofacalerts')
|
|
op.drop_table('ofac')
|
|
op.drop_index(op.f('ix_accounting_chain_id'), table_name='accounting')
|
|
op.drop_index(op.f('ix_accounting_account'), table_name='accounting')
|
|
op.drop_index(op.f('ix_accounting_token'), table_name='accounting')
|
|
op.drop_index(op.f('ix_accounting_time'), table_name='accounting')
|
|
op.drop_index(op.f('ix_accounting_subcategory'), table_name='accounting')
|
|
op.drop_index(op.f('ix_accounting_category'), table_name='accounting')
|
|
op.drop_table('accounting')
|
|
op.execute('drop type accountkind') # enum type
|
|
op.execute('drop type accountingcategory') # enum type
|
|
op.execute('drop type accountingsubcategory') # enum type
|