accounting

This commit is contained in:
tim
2025-01-16 20:15:43 -04:00
parent 48fdfeeb3f
commit adebbb833c
38 changed files with 1133 additions and 210 deletions

View File

@@ -0,0 +1,93 @@
"""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_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('accounts',
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_accounts_kind'), 'accounts', ['kind'], unique=False)
def downgrade() -> None:
op.drop_index(op.f('ix_accounting_account'), table_name='accounting')
op.drop_index(op.f('ix_accounts_kind'), table_name='accounts')
op.drop_table('accounts')
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.execute('drop sequence ofacalerts_id_seq') # autoincrement sequence
op.drop_table('ofac')
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 sequence accounting_id_seq') # autoincrement sequence
op.execute('drop type accountkind') # enum type
op.execute('drop type accountingcategory') # enum type
op.execute('drop type accountingsubcategory') # enum type