Files
backend/alembic/versions/509010f13e8b_accounting_vaultcreation_ofac.py

124 lines
6.3 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', 'VaultCreation', 'Execution', '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