"""recent-tables

Revision ID: 9d1894ff8a05
Revises: 
Create Date: 2025-11-04 06:54:42.907063

"""
from typing import Sequence, Union

from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision: str = '9d1894ff8a05'
down_revision: Union[str, Sequence[str], None] = None
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
    """Upgrade schema."""
    # ### commands auto generated by Alembic - please adjust! ###
    op.create_table('cdns',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('label', sa.Text(), nullable=True),
    sa.Column('host', sa.Text(), nullable=False),
    sa.Column('root', sa.Text(), nullable=False),
    sa.Column('path', sa.Text(), nullable=False),
    sa.Column('is_active', sa.Boolean(), nullable=False),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_cdns_id'), 'cdns', ['id'], unique=False)
    op.create_table('payment_methods_ach_details',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('account_number', sa.Text(), nullable=True),
    sa.Column('routing_number', sa.Text(), nullable=True),
    sa.Column('account_name', sa.String(length=255), nullable=True),
    sa.Column('bank_name', sa.String(length=255), nullable=True),
    sa.Column('owner_type', sa.String(length=255), nullable=True),
    sa.Column('account_type', sa.String(length=255), nullable=True),
    sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=False),
    sa.Column('reference_id', sa.Text(), nullable=True),
    sa.Column('is_default', sa.Boolean(), nullable=False),
    sa.Column('last_used_at', sa.DateTime(), nullable=True),
    sa.Column('is_autosaved', sa.Boolean(), nullable=False),
    sa.PrimaryKeyConstraint('id'),
    sa.UniqueConstraint('reference_id')
    )
    op.create_index(op.f('ix_payment_methods_ach_details_id'), 'payment_methods_ach_details', ['id'], unique=False)
    op.create_table('payment_methods_card_details',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('card_number', sa.String(length=255), nullable=True),
    sa.Column('brand', sa.String(length=255), nullable=True),
    sa.Column('cvv', sa.String(length=255), nullable=True),
    sa.Column('funding', sa.String(length=50), nullable=True),
    sa.Column('expire_month', sa.String(length=255), nullable=True),
    sa.Column('expire_year', sa.String(length=255), nullable=True),
    sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=False),
    sa.Column('reference_id', sa.Text(), nullable=True),
    sa.Column('is_default', sa.Boolean(), nullable=False),
    sa.Column('last_used_at', sa.DateTime(), nullable=True),
    sa.Column('is_autosaved', sa.Boolean(), nullable=False),
    sa.PrimaryKeyConstraint('id'),
    sa.UniqueConstraint('reference_id')
    )
    op.create_index(op.f('ix_payment_methods_card_details_id'), 'payment_methods_card_details', ['id'], unique=False)
    op.create_table('payment_methods_cheque_details',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('cheque_number', sa.Text(), nullable=True),
    sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=False),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_payment_methods_cheque_details_id'), 'payment_methods_cheque_details', ['id'], unique=False)
    op.create_table('site_settings',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('key', sa.String(length=255), nullable=True),
    sa.Column('value', sa.Text(), nullable=True),
    sa.Column('label', sa.Text(), nullable=True),
    sa.Column('group', sa.String(length=255), nullable=True),
    sa.Column('field_type', sa.String(length=50), nullable=True),
    sa.Column('field_options', sa.JSON(), nullable=True),
    sa.Column('is_visible', sa.Boolean(), nullable=True),
    sa.Column('is_required', sa.Boolean(), nullable=True),
    sa.Column('is_encrypted', sa.Boolean(), nullable=True),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_site_settings_id'), 'site_settings', ['id'], unique=False)
    op.create_table('users',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('email', sa.String(length=255), nullable=False),
    sa.Column('username', sa.String(length=100), nullable=False),
    sa.Column('hashed_password', sa.String(length=255), nullable=False),
    sa.Column('first_name', sa.String(length=100), nullable=True),
    sa.Column('last_name', sa.String(length=100), nullable=True),
    sa.Column('full_name', sa.String(length=200), nullable=True),
    sa.Column('is_active', sa.Boolean(), nullable=False),
    sa.Column('is_verified', sa.Boolean(), nullable=False),
    sa.Column('is_superuser', sa.Boolean(), nullable=False),
    sa.Column('phone_number', sa.String(length=20), nullable=True),
    sa.Column('phone', sa.String(length=20), nullable=True),
    sa.Column('middle_name', sa.String(length=100), nullable=True),
    sa.Column('user_id', sa.String(length=50), nullable=True),
    sa.Column('bio', sa.Text(), nullable=True),
    sa.Column('avatar_url', sa.String(length=500), nullable=True),
    sa.Column('deleted_at', sa.DateTime(timezone=True), nullable=True),
    sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=False),
    sa.Column('updated_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=False),
    sa.Column('last_login', sa.DateTime(timezone=True), nullable=True),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_users_email'), 'users', ['email'], unique=True)
    op.create_index(op.f('ix_users_id'), 'users', ['id'], unique=False)
    op.create_index(op.f('ix_users_user_id'), 'users', ['user_id'], unique=True)
    op.create_index(op.f('ix_users_username'), 'users', ['username'], unique=True)
    op.create_table('auth_sessions',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('user_id', sa.Integer(), nullable=False),
    sa.Column('access_token', sa.Text(), nullable=False),
    sa.Column('refresh_token', sa.Text(), nullable=True),
    sa.Column('device_info', sa.Text(), nullable=True),
    sa.Column('ip_address', sa.String(length=45), nullable=True),
    sa.Column('user_agent', sa.Text(), nullable=True),
    sa.Column('access_token_expires_at', sa.DateTime(timezone=True), nullable=False),
    sa.Column('refresh_token_expires_at', sa.DateTime(timezone=True), nullable=True),
    sa.Column('is_active', sa.Boolean(), nullable=False),
    sa.Column('is_revoked', sa.Boolean(), nullable=False),
    sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=False),
    sa.Column('updated_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True),
    sa.Column('revoked_at', sa.DateTime(timezone=True), nullable=True),
    sa.Column('last_activity_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True),
    sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_auth_sessions_access_token'), 'auth_sessions', ['access_token'], unique=True)
    op.create_index(op.f('ix_auth_sessions_id'), 'auth_sessions', ['id'], unique=False)
    op.create_index(op.f('ix_auth_sessions_is_active'), 'auth_sessions', ['is_active'], unique=False)
    op.create_index(op.f('ix_auth_sessions_is_revoked'), 'auth_sessions', ['is_revoked'], unique=False)
    op.create_index(op.f('ix_auth_sessions_refresh_token'), 'auth_sessions', ['refresh_token'], unique=True)
    op.create_index(op.f('ix_auth_sessions_user_id'), 'auth_sessions', ['user_id'], unique=False)
    op.create_table('files',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('original_name', sa.Text(), nullable=False),
    sa.Column('name', sa.Text(), nullable=False),
    sa.Column('path', sa.Text(), nullable=False),
    sa.Column('file_type', sa.String(length=50), nullable=False),
    sa.Column('mime', sa.String(length=255), nullable=False),
    sa.Column('storage_key', sa.String(length=100), nullable=True),
    sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=False),
    sa.Column('created_by_id', sa.Integer(), nullable=False),
    sa.Column('cdn_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['cdn_id'], ['cdns.id'], ),
    sa.ForeignKeyConstraint(['created_by_id'], ['users.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_files_id'), 'files', ['id'], unique=False)
    op.create_index(op.f('ix_files_storage_key'), 'files', ['storage_key'], unique=True)
    op.create_table('notes',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('description', sa.Text(), nullable=False),
    sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=False),
    sa.Column('updated_at', sa.DateTime(), nullable=True),
    sa.Column('deleted_at', sa.DateTime(), nullable=True),
    sa.Column('created_by_id', sa.Integer(), nullable=False),
    sa.ForeignKeyConstraint(['created_by_id'], ['users.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_notes_id'), 'notes', ['id'], unique=False)
    op.create_table('merchants',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('uuid', sa.UUID(), nullable=False),
    sa.Column('uin', sa.String(length=255), nullable=False),
    sa.Column('merchant_id', sa.String(length=50), nullable=True),
    sa.Column('name', sa.String(length=255), nullable=False),
    sa.Column('tagline', sa.String(length=255), nullable=True),
    sa.Column('industry', sa.String(length=255), nullable=True),
    sa.Column('email', sa.String(length=255), nullable=True),
    sa.Column('phone', sa.String(length=255), nullable=True),
    sa.Column('registration_no', sa.String(length=255), nullable=True),
    sa.Column('license_no', sa.String(length=255), nullable=True),
    sa.Column('is_onboarded', sa.Boolean(), nullable=False),
    sa.Column('is_active', sa.Boolean(), nullable=False),
    sa.Column('is_verified', sa.Boolean(), nullable=False),
    sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=False),
    sa.Column('updated_at', sa.DateTime(), nullable=True),
    sa.Column('deleted_at', sa.DateTime(), nullable=True),
    sa.Column('tilled_status', sa.String(length=30), nullable=True),
    sa.Column('tilled_account_id', sa.Text(), nullable=True),
    sa.Column('tilled_customer_id', sa.Text(), nullable=True),
    sa.Column('subdomain', sa.Text(), nullable=True),
    sa.Column('custom_domain', sa.Text(), nullable=True),
    sa.Column('tnc_accepted', sa.Boolean(), nullable=False),
    sa.Column('dob', sa.DateTime(), nullable=True),
    sa.Column('approved_by', sa.Integer(), nullable=True),
    sa.Column('approved_at', sa.DateTime(), nullable=True),
    sa.Column('merchant_literal', sa.Text(), nullable=True),
    sa.Column('brand_logo_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['approved_by'], ['users.id'], ),
    sa.ForeignKeyConstraint(['brand_logo_id'], ['files.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_merchants_id'), 'merchants', ['id'], unique=False)
    op.create_index(op.f('ix_merchants_merchant_id'), 'merchants', ['merchant_id'], unique=True)
    op.create_index(op.f('ix_merchants_uin'), 'merchants', ['uin'], unique=True)
    op.create_index(op.f('ix_merchants_uuid'), 'merchants', ['uuid'], unique=True)
    op.create_table('customers',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('uin', sa.String(length=255), nullable=False),
    sa.Column('first_name', sa.String(length=32), nullable=True),
    sa.Column('middle_name', sa.String(length=32), nullable=True),
    sa.Column('last_name', sa.String(length=32), nullable=True),
    sa.Column('email', sa.String(length=255), nullable=True),
    sa.Column('phone', sa.String(length=255), nullable=True),
    sa.Column('customer_id', sa.String(length=50), nullable=True),
    sa.Column('account_type', sa.String(length=255), nullable=False),
    sa.Column('industry', sa.String(length=255), nullable=False),
    sa.Column('business_legal_name', sa.String(length=255), nullable=True),
    sa.Column('office_phone', sa.String(length=255), nullable=True),
    sa.Column('account_expires_on', sa.DateTime(), nullable=True),
    sa.Column('timezone', sa.String(length=32), nullable=True),
    sa.Column('is_active', sa.Boolean(), nullable=False),
    sa.Column('is_vendor', sa.Boolean(), nullable=False),
    sa.Column('customer_type', sa.String(length=50), nullable=True),
    sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=False),
    sa.Column('updated_at', sa.DateTime(), nullable=True),
    sa.Column('deleted_at', sa.DateTime(), nullable=True),
    sa.Column('tilled_id', sa.String(length=255), nullable=True),
    sa.Column('website', sa.String(length=255), nullable=True),
    sa.Column('account_tax_id', sa.String(length=255), nullable=True),
    sa.Column('tags', sa.Text(), nullable=True),
    sa.Column('account_literal', sa.Text(), nullable=True),
    sa.Column('avatar_id', sa.Integer(), nullable=True),
    sa.Column('merchant_id', sa.Integer(), nullable=False),
    sa.Column('user_account_id', sa.Integer(), nullable=False),
    sa.ForeignKeyConstraint(['avatar_id'], ['files.id'], ),
    sa.ForeignKeyConstraint(['merchant_id'], ['merchants.id'], ),
    sa.ForeignKeyConstraint(['user_account_id'], ['users.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_customers_customer_id'), 'customers', ['customer_id'], unique=True)
    op.create_index(op.f('ix_customers_id'), 'customers', ['id'], unique=False)
    op.create_index(op.f('ix_customers_uin'), 'customers', ['uin'], unique=True)
    op.create_table('merchant_acceptances',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('merchant_id', sa.Integer(), nullable=False),
    sa.Column('agreement_accept', sa.Boolean(), nullable=False),
    sa.Column('banking_policy_accept', sa.Boolean(), nullable=False),
    sa.Column('merchant_signing', sa.Text(), nullable=True),
    sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=False),
    sa.Column('updated_at', sa.DateTime(), nullable=True),
    sa.ForeignKeyConstraint(['merchant_id'], ['merchants.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_merchant_acceptances_id'), 'merchant_acceptances', ['id'], unique=False)
    op.create_table('merchant_contacts',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('contact_id', sa.String(length=50), nullable=True),
    sa.Column('name', sa.String(length=255), nullable=True),
    sa.Column('email', sa.String(length=255), nullable=True),
    sa.Column('phone', sa.String(length=255), nullable=True),
    sa.Column('contact_type', sa.String(length=50), nullable=True),
    sa.Column('is_active', sa.Boolean(), nullable=True),
    sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=False),
    sa.Column('updated_at', sa.DateTime(), nullable=True),
    sa.Column('deleted_at', sa.DateTime(), nullable=True),
    sa.Column('title', sa.String(length=255), nullable=True),
    sa.Column('dob', sa.DateTime(), nullable=True),
    sa.Column('timezone', sa.String(length=32), nullable=True),
    sa.Column('website', sa.String(length=255), nullable=True),
    sa.Column('merchant_id', sa.Integer(), nullable=False),
    sa.ForeignKeyConstraint(['merchant_id'], ['merchants.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_merchant_contacts_contact_id'), 'merchant_contacts', ['contact_id'], unique=True)
    op.create_index(op.f('ix_merchant_contacts_id'), 'merchant_contacts', ['id'], unique=False)
    op.create_table('merchant_discount',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('title', sa.String(length=255), nullable=False),
    sa.Column('discount_id', sa.String(), nullable=True),
    sa.Column('discount_value', sa.Integer(), nullable=True),
    sa.Column('discount_type', sa.String(length=50), nullable=False),
    sa.Column('is_active', sa.Boolean(), nullable=True),
    sa.Column('created_by_id', sa.Integer(), nullable=False),
    sa.Column('merchant_id', sa.Integer(), nullable=False),
    sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=False),
    sa.Column('updated_at', sa.DateTime(), nullable=True),
    sa.Column('deleted_at', sa.DateTime(), nullable=True),
    sa.ForeignKeyConstraint(['created_by_id'], ['users.id'], ),
    sa.ForeignKeyConstraint(['merchant_id'], ['merchants.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_merchant_discount_discount_id'), 'merchant_discount', ['discount_id'], unique=True)
    op.create_index(op.f('ix_merchant_discount_id'), 'merchant_discount', ['id'], unique=False)
    op.create_table('merchant_payment_history',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('key', sa.String(length=255), nullable=False),
    sa.Column('value', sa.Text(), nullable=False),
    sa.Column('label', sa.Text(), nullable=False),
    sa.Column('group', sa.String(length=255), nullable=False),
    sa.Column('input_type', sa.String(length=255), nullable=False),
    sa.Column('merchant_id', sa.Integer(), nullable=False),
    sa.ForeignKeyConstraint(['merchant_id'], ['merchants.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_merchant_payment_history_id'), 'merchant_payment_history', ['id'], unique=False)
    op.create_table('merchant_settings',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('key', sa.String(length=255), nullable=False),
    sa.Column('value', sa.Text(), nullable=False),
    sa.Column('label', sa.Text(), nullable=False),
    sa.Column('group', sa.String(length=255), nullable=False),
    sa.Column('field_name', sa.String(length=255), nullable=False),
    sa.Column('field_type', sa.String(length=50), nullable=False),
    sa.Column('field_options', sa.JSON(), nullable=True),
    sa.Column('has_lock', sa.Boolean(), nullable=True),
    sa.Column('is_locked', sa.Boolean(), nullable=True),
    sa.Column('display_order', sa.Integer(), nullable=False),
    sa.Column('merchant_id', sa.Integer(), nullable=False),
    sa.ForeignKeyConstraint(['merchant_id'], ['merchants.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_merchant_settings_id'), 'merchant_settings', ['id'], unique=False)
    op.create_table('merchant_users',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('is_owner', sa.Boolean(), nullable=False),
    sa.Column('user_id', sa.Integer(), nullable=True),
    sa.Column('merchant_id', sa.Integer(), nullable=False),
    sa.ForeignKeyConstraint(['merchant_id'], ['merchants.id'], ),
    sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_merchant_users_id'), 'merchant_users', ['id'], unique=False)
    op.create_table('products_category',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('name', sa.Text(), nullable=False),
    sa.Column('code', sa.String(length=255), nullable=False),
    sa.Column('slug', sa.Text(), nullable=False),
    sa.Column('description', sa.Text(), nullable=True),
    sa.Column('order', sa.Integer(), nullable=True),
    sa.Column('is_active', sa.Boolean(), nullable=False),
    sa.Column('parent_id', sa.Integer(), nullable=True),
    sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=False),
    sa.Column('updated_at', sa.DateTime(), nullable=True),
    sa.Column('deleted_at', sa.DateTime(), nullable=True),
    sa.Column('merchant_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['merchant_id'], ['merchants.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_products_category_id'), 'products_category', ['id'], unique=False)
    op.create_table('address',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('name', sa.String(length=255), nullable=True),
    sa.Column('attention', sa.String(length=255), nullable=True),
    sa.Column('address_line_1', sa.Text(), nullable=True),
    sa.Column('address_line_2', sa.Text(), nullable=True),
    sa.Column('zipcode', sa.String(length=255), nullable=True),
    sa.Column('city', sa.String(length=255), nullable=True),
    sa.Column('state', sa.String(length=255), nullable=True),
    sa.Column('country', sa.String(length=255), nullable=True),
    sa.Column('address_type', sa.String(length=50), nullable=True),
    sa.Column('location_data', sa.JSON(), nullable=True),
    sa.Column('lat', sa.DECIMAL(precision=10, scale=8), nullable=True),
    sa.Column('lng', sa.DECIMAL(precision=11, scale=8), nullable=True),
    sa.Column('use_as_default', sa.Boolean(), nullable=True),
    sa.Column('is_active', sa.Boolean(), nullable=True),
    sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=True),
    sa.Column('updated_at', sa.DateTime(), nullable=True),
    sa.Column('deleted_at', sa.DateTime(), nullable=True),
    sa.Column('merchant_id', sa.Integer(), nullable=True),
    sa.Column('customer_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['customer_id'], ['customers.id'], ),
    sa.ForeignKeyConstraint(['merchant_id'], ['merchants.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_address_id'), 'address', ['id'], unique=False)
    op.create_table('customer_attachments',
    sa.Column('customer_id', sa.Integer(), nullable=True),
    sa.Column('file_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['customer_id'], ['customers.id'], ),
    sa.ForeignKeyConstraint(['file_id'], ['files.id'], )
    )
    op.create_table('customer_contacts',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('contact_id', sa.String(length=50), nullable=False),
    sa.Column('name', sa.String(length=255), nullable=False),
    sa.Column('designation', sa.String(length=255), nullable=False),
    sa.Column('dob', sa.DateTime(), nullable=True),
    sa.Column('email', sa.String(length=255), nullable=False),
    sa.Column('phone', sa.String(length=255), nullable=True),
    sa.Column('office_phone', sa.String(length=255), nullable=True),
    sa.Column('relation', sa.String(length=255), nullable=True),
    sa.Column('is_active', sa.Boolean(), nullable=False),
    sa.Column('tilled_id', sa.String(length=50), nullable=True),
    sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=False),
    sa.Column('updated_at', sa.DateTime(), nullable=True),
    sa.Column('deleted_at', sa.DateTime(), nullable=True),
    sa.Column('website', sa.String(length=255), nullable=True),
    sa.Column('timezone', sa.String(length=32), nullable=True),
    sa.Column('avatar_id', sa.Integer(), nullable=True),
    sa.Column('customer_id', sa.Integer(), nullable=False),
    sa.Column('user_account_id', sa.Integer(), nullable=False),
    sa.ForeignKeyConstraint(['avatar_id'], ['files.id'], ),
    sa.ForeignKeyConstraint(['customer_id'], ['customers.id'], ),
    sa.ForeignKeyConstraint(['user_account_id'], ['users.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_customer_contacts_contact_id'), 'customer_contacts', ['contact_id'], unique=True)
    op.create_index(op.f('ix_customer_contacts_id'), 'customer_contacts', ['id'], unique=False)
    op.create_table('customer_notes',
    sa.Column('customer_id', sa.Integer(), nullable=True),
    sa.Column('note_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['customer_id'], ['customers.id'], ),
    sa.ForeignKeyConstraint(['note_id'], ['notes.id'], )
    )
    op.create_table('customer_settings',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('key', sa.String(length=255), nullable=False),
    sa.Column('value', sa.Text(), nullable=True),
    sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=False),
    sa.Column('updated_at', sa.DateTime(), nullable=True),
    sa.Column('deleted_at', sa.DateTime(), nullable=True),
    sa.Column('customer_id', sa.Integer(), nullable=False),
    sa.ForeignKeyConstraint(['customer_id'], ['customers.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_customer_settings_id'), 'customer_settings', ['id'], unique=False)
    op.create_table('products',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('name', sa.Text(), nullable=False),
    sa.Column('sku', sa.Text(), nullable=False),
    sa.Column('code', sa.Text(), nullable=True),
    sa.Column('slug', sa.Text(), nullable=False),
    sa.Column('unit_price', sa.Float(), nullable=True),
    sa.Column('sale_price', sa.Float(), nullable=True),
    sa.Column('description', sa.Text(), nullable=True),
    sa.Column('is_active', sa.Boolean(), nullable=False),
    sa.Column('is_new', sa.Boolean(), nullable=False),
    sa.Column('new_until', sa.DateTime(), nullable=True),
    sa.Column('type', sa.Integer(), nullable=False),
    sa.Column('is_purchase', sa.Boolean(), nullable=False),
    sa.Column('purchase_msrp', sa.Float(), nullable=True),
    sa.Column('purchase_manufacture_part_number', sa.Text(), nullable=True),
    sa.Column('purchase_supplier_sku', sa.Text(), nullable=True),
    sa.Column('purchase_description', sa.Text(), nullable=True),
    sa.Column('calculated_purchase_tax_rate', sa.Float(), nullable=False),
    sa.Column('is_sell', sa.Boolean(), nullable=False),
    sa.Column('sell_msrp', sa.Float(), nullable=True),
    sa.Column('sell_manufacture_part_number', sa.Text(), nullable=True),
    sa.Column('sell_supplier_sku', sa.Text(), nullable=True),
    sa.Column('sell_description', sa.Text(), nullable=True),
    sa.Column('calculated_sell_tax_rate', sa.Float(), nullable=False),
    sa.Column('length', sa.Float(), nullable=True),
    sa.Column('height', sa.Float(), nullable=True),
    sa.Column('width', sa.Float(), nullable=True),
    sa.Column('weight', sa.Float(), nullable=True),
    sa.Column('depth', sa.Float(), nullable=True),
    sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=False),
    sa.Column('updated_at', sa.DateTime(), nullable=True),
    sa.Column('deleted_at', sa.DateTime(), nullable=True),
    sa.Column('category_id', sa.Integer(), nullable=True),
    sa.Column('merchant_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['category_id'], ['products_category.id'], ),
    sa.ForeignKeyConstraint(['merchant_id'], ['merchants.id'], ),
    sa.PrimaryKeyConstraint('id'),
    sa.UniqueConstraint('sku'),
    sa.UniqueConstraint('slug')
    )
    op.create_index(op.f('ix_products_id'), 'products', ['id'], unique=False)
    op.create_table('contact_addresses',
    sa.Column('contact_id', sa.Integer(), nullable=True),
    sa.Column('address_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['address_id'], ['address.id'], ),
    sa.ForeignKeyConstraint(['contact_id'], ['customer_contacts.id'], )
    )
    op.create_table('customer_addresses',
    sa.Column('customer_id', sa.Integer(), nullable=True),
    sa.Column('address_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['address_id'], ['address.id'], ),
    sa.ForeignKeyConstraint(['customer_id'], ['customers.id'], )
    )
    op.create_table('customer_users',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('is_owner', sa.Boolean(), nullable=False),
    sa.Column('user_id', sa.Integer(), nullable=True),
    sa.Column('customer_id', sa.Integer(), nullable=False),
    sa.Column('contact_id', sa.Integer(), nullable=True),
    sa.Column('merchant_id', sa.Integer(), nullable=False),
    sa.ForeignKeyConstraint(['contact_id'], ['customer_contacts.id'], ),
    sa.ForeignKeyConstraint(['customer_id'], ['customers.id'], ),
    sa.ForeignKeyConstraint(['merchant_id'], ['merchants.id'], ),
    sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_customer_users_id'), 'customer_users', ['id'], unique=False)
    op.create_table('merchant_addresses',
    sa.Column('merchant_id', sa.Integer(), nullable=True),
    sa.Column('address_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['address_id'], ['address.id'], ),
    sa.ForeignKeyConstraint(['merchant_id'], ['merchants.id'], )
    )
    op.create_table('merchant_contact_addresses',
    sa.Column('contact_id', sa.Integer(), nullable=True),
    sa.Column('address_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['address_id'], ['address.id'], ),
    sa.ForeignKeyConstraint(['contact_id'], ['merchant_contacts.id'], )
    )
    op.create_table('merchant_locations',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('name', sa.String(length=255), nullable=True),
    sa.Column('email', sa.String(length=255), nullable=True),
    sa.Column('phone', sa.String(length=255), nullable=True),
    sa.Column('is_active', sa.Boolean(), nullable=True),
    sa.Column('location_type', sa.String(length=50), nullable=True),
    sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=False),
    sa.Column('updated_at', sa.DateTime(), nullable=True),
    sa.Column('deleted_at', sa.DateTime(), nullable=True),
    sa.Column('address_id', sa.Integer(), nullable=True),
    sa.Column('merchant_id', sa.Integer(), nullable=False),
    sa.ForeignKeyConstraint(['address_id'], ['address.id'], ),
    sa.ForeignKeyConstraint(['merchant_id'], ['merchants.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_merchant_locations_id'), 'merchant_locations', ['id'], unique=False)
    op.create_table('merchant_payment_methods',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('method', sa.String(length=50), nullable=False),
    sa.Column('is_connected', sa.Boolean(), nullable=False),
    sa.Column('in_use', sa.Boolean(), nullable=False),
    sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=False),
    sa.Column('updated_at', sa.DateTime(), nullable=True),
    sa.Column('deleted_at', sa.DateTime(), nullable=True),
    sa.Column('merchant_id', sa.Integer(), nullable=False),
    sa.Column('card_details_id', sa.Integer(), nullable=True),
    sa.Column('ach_details_id', sa.Integer(), nullable=True),
    sa.Column('billing_address_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['ach_details_id'], ['payment_methods_ach_details.id'], ),
    sa.ForeignKeyConstraint(['billing_address_id'], ['address.id'], ),
    sa.ForeignKeyConstraint(['card_details_id'], ['payment_methods_card_details.id'], ),
    sa.ForeignKeyConstraint(['merchant_id'], ['merchants.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_merchant_payment_methods_id'), 'merchant_payment_methods', ['id'], unique=False)
    op.create_table('payment_requests',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('payment_request_id', sa.String(length=50), nullable=True),
    sa.Column('amount', sa.Float(), nullable=False),
    sa.Column('payment_frequency', sa.String(length=50), nullable=True),
    sa.Column('authorization_type', sa.String(length=50), nullable=True),
    sa.Column('status', sa.Integer(), nullable=False),
    sa.Column('currency', sa.String(length=50), nullable=False),
    sa.Column('save_payment_method', sa.Boolean(), nullable=False),
    sa.Column('allow_tip', sa.Boolean(), nullable=False),
    sa.Column('is_certified', sa.Boolean(), nullable=False),
    sa.Column('configure_adjustment', sa.Boolean(), nullable=False),
    sa.Column('message', sa.Text(), nullable=True),
    sa.Column('title', sa.Text(), nullable=True),
    sa.Column('description', sa.Text(), nullable=True),
    sa.Column('billing_date', sa.DateTime(), nullable=True),
    sa.Column('due_date', sa.DateTime(), nullable=True),
    sa.Column('reference_id', sa.Text(), nullable=True),
    sa.Column('tax_percent', sa.Float(), nullable=True),
    sa.Column('payment_request_literal', sa.Text(), nullable=True),
    sa.Column('enable_email', sa.Boolean(), nullable=False),
    sa.Column('enable_sms', sa.Boolean(), nullable=False),
    sa.Column('enable_email_receipt', sa.Boolean(), nullable=False),
    sa.Column('enable_sms_receipt', sa.Boolean(), nullable=False),
    sa.Column('shipping_fee', sa.Float(), nullable=False),
    sa.Column('require_billing_address', sa.Boolean(), nullable=False),
    sa.Column('require_cvv', sa.Boolean(), nullable=False),
    sa.Column('require_sms_authorization', sa.Boolean(), nullable=False),
    sa.Column('require_shipping_address', sa.Boolean(), nullable=False),
    sa.Column('require_signature_authorization', sa.Boolean(), nullable=False),
    sa.Column('defined_by', sa.Integer(), nullable=True),
    sa.Column('payment_request_type', sa.String(length=20), nullable=False),
    sa.Column('payment_redirect_url', sa.Text(), nullable=True),
    sa.Column('payment_split_frequency', sa.String(length=255), nullable=True),
    sa.Column('charge_description', sa.Text(), nullable=True),
    sa.Column('donation_description', sa.Text(), nullable=True),
    sa.Column('has_effective_date', sa.Boolean(), nullable=False),
    sa.Column('is_message', sa.Boolean(), nullable=False),
    sa.Column('reference', sa.Text(), nullable=True),
    sa.Column('tax_type', sa.String(length=255), nullable=True),
    sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=False),
    sa.Column('updated_at', sa.DateTime(), nullable=True),
    sa.Column('deleted_at', sa.DateTime(), nullable=True),
    sa.Column('is_surcharge_enabled', sa.Boolean(), nullable=False),
    sa.Column('surcharge_type', sa.String(length=20), nullable=True),
    sa.Column('payment_type', sa.String(length=50), nullable=False),
    sa.Column('invoice_terms', sa.Text(), nullable=True),
    sa.Column('shipping_address_id', sa.Integer(), nullable=True),
    sa.Column('merchant_id', sa.Integer(), nullable=False),
    sa.Column('created_by_id', sa.Integer(), nullable=False),
    sa.ForeignKeyConstraint(['created_by_id'], ['users.id'], ),
    sa.ForeignKeyConstraint(['merchant_id'], ['merchants.id'], ),
    sa.ForeignKeyConstraint(['shipping_address_id'], ['address.id'], ),
    sa.PrimaryKeyConstraint('id'),
    sa.UniqueConstraint('reference_id')
    )
    op.create_index(op.f('ix_payment_requests_id'), 'payment_requests', ['id'], unique=False)
    op.create_index(op.f('ix_payment_requests_payment_request_id'), 'payment_requests', ['payment_request_id'], unique=True)
    op.create_table('products_files',
    sa.Column('product_id', sa.Integer(), nullable=True),
    sa.Column('file_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['file_id'], ['files.id'], ),
    sa.ForeignKeyConstraint(['product_id'], ['products.id'], )
    )
    op.create_table('products_notes',
    sa.Column('product_id', sa.Integer(), nullable=True),
    sa.Column('note_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['note_id'], ['notes.id'], ),
    sa.ForeignKeyConstraint(['product_id'], ['products.id'], )
    )
    op.create_table('reminders',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('description', sa.Text(), nullable=True),
    sa.Column('frequency_type', sa.String(length=50), nullable=True),
    sa.Column('reminder_date', sa.DateTime(), nullable=True),
    sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=False),
    sa.Column('updated_at', sa.DateTime(), nullable=True),
    sa.Column('deleted_at', sa.DateTime(), nullable=True),
    sa.Column('user_id', sa.Integer(), nullable=True),
    sa.Column('customer_id', sa.Integer(), nullable=True),
    sa.Column('payer_id', sa.Integer(), nullable=True),
    sa.Column('approver_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['approver_id'], ['customer_contacts.id'], ),
    sa.ForeignKeyConstraint(['customer_id'], ['customers.id'], ),
    sa.ForeignKeyConstraint(['payer_id'], ['customer_contacts.id'], ),
    sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_reminders_id'), 'reminders', ['id'], unique=False)
    op.create_table('invoices',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('invoice_id', sa.String(length=255), nullable=False),
    sa.Column('amount', sa.Float(), nullable=False),
    sa.Column('due_date', sa.DateTime(), nullable=True),
    sa.Column('billing_date', sa.DateTime(), nullable=True),
    sa.Column('next_due_date', sa.DateTime(), nullable=True),
    sa.Column('tax_fee', sa.Float(), nullable=False),
    sa.Column('shipping_fee', sa.Float(), nullable=False),
    sa.Column('tip', sa.Float(), nullable=False),
    sa.Column('discount', sa.Float(), nullable=False),
    sa.Column('surcharge', sa.Float(), nullable=False),
    sa.Column('charge', sa.Float(), nullable=False),
    sa.Column('additional_fee', sa.Float(), nullable=False),
    sa.Column('status', sa.Integer(), nullable=False),
    sa.Column('comments', sa.String(length=255), nullable=True),
    sa.Column('invoice_literal', sa.Text(), nullable=True),
    sa.Column('reference', sa.Text(), nullable=True),
    sa.Column('paid_amount', sa.Float(), nullable=False),
    sa.Column('paid_date', sa.DateTime(), nullable=True),
    sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=False),
    sa.Column('updated_at', sa.DateTime(), nullable=True),
    sa.Column('deleted_at', sa.DateTime(), nullable=True),
    sa.Column('is_surcharge_enabled', sa.Boolean(), nullable=False),
    sa.Column('surcharge_type', sa.String(length=20), nullable=True),
    sa.Column('following', sa.Boolean(), nullable=False),
    sa.Column('sequence_id', sa.Integer(), nullable=True),
    sa.Column('payment_request_id', sa.Integer(), nullable=False),
    sa.Column('merchant_id', sa.Integer(), nullable=False),
    sa.Column('customer_id', sa.Integer(), nullable=False),
    sa.Column('payer_id', sa.Integer(), nullable=True),
    sa.Column('approver_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['approver_id'], ['customer_contacts.id'], ),
    sa.ForeignKeyConstraint(['customer_id'], ['customers.id'], ),
    sa.ForeignKeyConstraint(['merchant_id'], ['merchants.id'], ),
    sa.ForeignKeyConstraint(['payer_id'], ['customer_contacts.id'], ),
    sa.ForeignKeyConstraint(['payment_request_id'], ['payment_requests.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_invoices_id'), 'invoices', ['id'], unique=False)
    op.create_index(op.f('ix_invoices_invoice_id'), 'invoices', ['invoice_id'], unique=True)
    op.create_table('merchant_transactions',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('txn_amount', sa.Float(), nullable=False),
    sa.Column('txn_type', sa.String(length=50), nullable=False),
    sa.Column('txn_status', sa.Integer(), nullable=False),
    sa.Column('occurred_at', sa.DateTime(), server_default=sa.text('now()'), nullable=False),
    sa.Column('txn_id', sa.String(length=255), nullable=False),
    sa.Column('reference_id', sa.Text(), nullable=True),
    sa.Column('txn_metadata', sa.JSON(), nullable=True),
    sa.Column('txn_literal', sa.Text(), nullable=True),
    sa.Column('merchant_id', sa.Integer(), nullable=False),
    sa.Column('payment_method_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['merchant_id'], ['merchants.id'], ),
    sa.ForeignKeyConstraint(['payment_method_id'], ['merchant_payment_methods.id'], ),
    sa.PrimaryKeyConstraint('id'),
    sa.UniqueConstraint('reference_id'),
    sa.UniqueConstraint('txn_id')
    )
    op.create_index(op.f('ix_merchant_transactions_id'), 'merchant_transactions', ['id'], unique=False)
    op.create_table('partial_payment_requests_configs',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('defined_by', sa.String(length=20), nullable=True),
    sa.Column('partial_payment_type', sa.String(length=20), nullable=True),
    sa.Column('partial_payment_value', sa.Float(), nullable=True),
    sa.Column('due_date', sa.DateTime(), nullable=True),
    sa.Column('paid_date', sa.DateTime(), nullable=True),
    sa.Column('payment_request_id', sa.Integer(), nullable=False),
    sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=False),
    sa.Column('updated_at', sa.DateTime(), nullable=True),
    sa.Column('deleted_at', sa.DateTime(), nullable=True),
    sa.ForeignKeyConstraint(['payment_request_id'], ['payment_requests.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_partial_payment_requests_configs_id'), 'partial_payment_requests_configs', ['id'], unique=False)
    op.create_table('payment_methods',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('method', sa.String(length=50), nullable=False),
    sa.Column('payment_method_id', sa.Text(), nullable=True),
    sa.Column('is_connected', sa.Boolean(), nullable=False),
    sa.Column('scope', sa.String(length=50), nullable=False),
    sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=False),
    sa.Column('updated_at', sa.DateTime(), nullable=True),
    sa.Column('deleted_at', sa.DateTime(), nullable=True),
    sa.Column('in_use', sa.Boolean(), nullable=False),
    sa.Column('pay_split_type', sa.String(length=20), nullable=True),
    sa.Column('pay_split_value', sa.Float(), nullable=True),
    sa.Column('paid_date', sa.DateTime(), nullable=True),
    sa.Column('card_details_id', sa.Integer(), nullable=True),
    sa.Column('ach_details_id', sa.Integer(), nullable=True),
    sa.Column('cheque_details_id', sa.Integer(), nullable=True),
    sa.Column('customer_id', sa.Integer(), nullable=False),
    sa.Column('payer_id', sa.Integer(), nullable=False),
    sa.Column('merchant_id', sa.Integer(), nullable=False),
    sa.Column('payment_request_id', sa.Integer(), nullable=False),
    sa.Column('billing_address_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['ach_details_id'], ['payment_methods_ach_details.id'], ),
    sa.ForeignKeyConstraint(['billing_address_id'], ['address.id'], ),
    sa.ForeignKeyConstraint(['card_details_id'], ['payment_methods_card_details.id'], ),
    sa.ForeignKeyConstraint(['cheque_details_id'], ['payment_methods_cheque_details.id'], ),
    sa.ForeignKeyConstraint(['customer_id'], ['customers.id'], ),
    sa.ForeignKeyConstraint(['merchant_id'], ['merchants.id'], ),
    sa.ForeignKeyConstraint(['payer_id'], ['customer_contacts.id'], ),
    sa.ForeignKeyConstraint(['payment_request_id'], ['payment_requests.id'], ),
    sa.PrimaryKeyConstraint('id'),
    sa.UniqueConstraint('payment_method_id')
    )
    op.create_index(op.f('ix_payment_methods_id'), 'payment_methods', ['id'], unique=False)
    op.create_table('payment_request_intents',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('amount', sa.Float(), nullable=False),
    sa.Column('intent_id', sa.Text(), server_default=sa.text('now()'), nullable=False),
    sa.Column('intent_status', sa.Text(), nullable=True),
    sa.Column('payment_request_id', sa.Integer(), nullable=False),
    sa.ForeignKeyConstraint(['payment_request_id'], ['payment_requests.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_payment_request_intents_id'), 'payment_request_intents', ['id'], unique=False)
    op.create_table('payment_request_products',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('order', sa.Integer(), nullable=False),
    sa.Column('is_taxable', sa.Boolean(), nullable=False),
    sa.Column('quantity', sa.Integer(), nullable=False),
    sa.Column('description', sa.Text(), nullable=True),
    sa.Column('tax_percent', sa.Integer(), nullable=False),
    sa.Column('unit_price', sa.Float(), nullable=False),
    sa.Column('payment_request_id', sa.Integer(), nullable=True),
    sa.Column('product_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['payment_request_id'], ['payment_requests.id'], ),
    sa.ForeignKeyConstraint(['product_id'], ['products.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_payment_request_products_id'), 'payment_request_products', ['id'], unique=False)
    op.create_table('payment_request_reminders',
    sa.Column('payment_request_id', sa.Integer(), nullable=True),
    sa.Column('reminder_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['payment_request_id'], ['payment_requests.id'], ),
    sa.ForeignKeyConstraint(['reminder_id'], ['reminders.id'], )
    )
    op.create_table('payment_requests_adjustments',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('is_surcharged', sa.Boolean(), nullable=False),
    sa.Column('adjustment_description', sa.Text(), nullable=True),
    sa.Column('disclaimer', sa.Text(), nullable=True),
    sa.Column('is_discounted', sa.Boolean(), nullable=False),
    sa.Column('is_manual_discount', sa.Boolean(), nullable=False),
    sa.Column('discount_name', sa.String(length=255), nullable=True),
    sa.Column('discount_amount', sa.Float(), nullable=False),
    sa.Column('discount_type', sa.String(), nullable=False),
    sa.Column('has_late_fee', sa.Boolean(), nullable=False),
    sa.Column('fee_amount', sa.Integer(), nullable=False),
    sa.Column('late_fee_type', sa.String(), nullable=False),
    sa.Column('fee_frequency', sa.String(), nullable=True),
    sa.Column('late_fee_delay', sa.Integer(), nullable=False),
    sa.Column('late_fee_delay_frequency', sa.String(), nullable=True),
    sa.Column('cap_fee_amount', sa.Float(), nullable=False),
    sa.Column('discount_id', sa.Integer(), nullable=True),
    sa.Column('payment_request_id', sa.Integer(), nullable=False),
    sa.ForeignKeyConstraint(['discount_id'], ['merchant_discount.id'], ),
    sa.ForeignKeyConstraint(['payment_request_id'], ['payment_requests.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_payment_requests_adjustments_id'), 'payment_requests_adjustments', ['id'], unique=False)
    op.create_table('payment_requests_approvals',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('payment_request_id', sa.Integer(), nullable=True),
    sa.Column('merchant_id', sa.Integer(), nullable=True),
    sa.Column('merchant_signer_id', sa.Integer(), nullable=True),
    sa.Column('is_approved', sa.Boolean(), nullable=True),
    sa.Column('approved_at', sa.DateTime(), nullable=True),
    sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=False),
    sa.ForeignKeyConstraint(['merchant_id'], ['merchants.id'], ),
    sa.ForeignKeyConstraint(['merchant_signer_id'], ['users.id'], ),
    sa.ForeignKeyConstraint(['payment_request_id'], ['payment_requests.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_payment_requests_approvals_id'), 'payment_requests_approvals', ['id'], unique=False)
    op.create_table('payment_requests_authorizations',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('authorization_id', sa.String(length=50), nullable=True),
    sa.Column('authorization_literal', sa.Text(), nullable=True),
    sa.Column('authorization_date', sa.DateTime(), nullable=True),
    sa.Column('authorization_type', sa.String(), nullable=False),
    sa.Column('authorization_value', sa.Text(), nullable=True),
    sa.Column('auth_metadata', sa.JSON(), nullable=True),
    sa.Column('is_verified', sa.Boolean(), nullable=False),
    sa.Column('signing_name', sa.String(length=100), nullable=True),
    sa.Column('ip_address', sa.String(length=50), nullable=True),
    sa.Column('payment_request_id', sa.Integer(), nullable=False),
    sa.Column('customer_id', sa.Integer(), nullable=False),
    sa.Column('payer_id', sa.Integer(), nullable=False),
    sa.Column('merchant_signer_id', sa.Integer(), nullable=False),
    sa.Column('merchant_id', sa.Integer(), nullable=False),
    sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=False),
    sa.Column('updated_at', sa.DateTime(), nullable=True),
    sa.Column('deleted_at', sa.DateTime(), nullable=True),
    sa.ForeignKeyConstraint(['customer_id'], ['customers.id'], ),
    sa.ForeignKeyConstraint(['merchant_id'], ['merchants.id'], ),
    sa.ForeignKeyConstraint(['merchant_signer_id'], ['users.id'], ),
    sa.ForeignKeyConstraint(['payer_id'], ['customer_contacts.id'], ),
    sa.ForeignKeyConstraint(['payment_request_id'], ['payment_requests.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_payment_requests_authorizations_authorization_id'), 'payment_requests_authorizations', ['authorization_id'], unique=True)
    op.create_index(op.f('ix_payment_requests_authorizations_id'), 'payment_requests_authorizations', ['id'], unique=False)
    op.create_table('payment_requests_customers',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('payment_request_id', sa.Integer(), nullable=False),
    sa.Column('customer_id', sa.Integer(), nullable=False),
    sa.Column('payer_id', sa.Integer(), nullable=False),
    sa.Column('approver_id', sa.Integer(), nullable=False),
    sa.Column('payer_email_request_enabled', sa.Boolean(), nullable=False),
    sa.Column('payer_email_receipt_enabled', sa.Boolean(), nullable=False),
    sa.Column('payer_sms_request_enabled', sa.Boolean(), nullable=False),
    sa.Column('payer_sms_receipt_enabled', sa.Boolean(), nullable=False),
    sa.Column('approver_email_receipt_enabled', sa.Boolean(), nullable=False),
    sa.Column('approver_sms_receipt_enabled', sa.Boolean(), nullable=False),
    sa.Column('is_approver_approved', sa.Boolean(), nullable=False),
    sa.ForeignKeyConstraint(['approver_id'], ['customer_contacts.id'], ),
    sa.ForeignKeyConstraint(['customer_id'], ['customers.id'], ),
    sa.ForeignKeyConstraint(['payer_id'], ['customer_contacts.id'], ),
    sa.ForeignKeyConstraint(['payment_request_id'], ['payment_requests.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_payment_requests_customers_id'), 'payment_requests_customers', ['id'], unique=False)
    op.create_table('payment_requests_files',
    sa.Column('payment_request_id', sa.Integer(), nullable=True),
    sa.Column('file_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['file_id'], ['files.id'], ),
    sa.ForeignKeyConstraint(['payment_request_id'], ['payment_requests.id'], )
    )
    op.create_table('payment_requests_line_items',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('title', sa.Text(), nullable=False),
    sa.Column('description', sa.Text(), nullable=True),
    sa.Column('unit_price', sa.Float(), nullable=False),
    sa.Column('quantity', sa.Integer(), nullable=False),
    sa.Column('tax', sa.Float(), nullable=False),
    sa.Column('display_order', sa.Integer(), nullable=False),
    sa.Column('tax_amount', sa.Float(), nullable=True),
    sa.Column('discount', sa.Float(), nullable=True),
    sa.Column('discount_type', sa.String(length=20), nullable=True),
    sa.Column('cost', sa.Float(), nullable=True),
    sa.Column('upcharge', sa.Float(), nullable=True),
    sa.Column('product_id', sa.Integer(), nullable=True),
    sa.Column('payment_request_id', sa.Integer(), nullable=False),
    sa.ForeignKeyConstraint(['payment_request_id'], ['payment_requests.id'], ),
    sa.ForeignKeyConstraint(['product_id'], ['products.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_payment_requests_line_items_id'), 'payment_requests_line_items', ['id'], unique=False)
    op.create_table('payment_requests_notes',
    sa.Column('payment_request_id', sa.Integer(), nullable=True),
    sa.Column('note_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['note_id'], ['notes.id'], ),
    sa.ForeignKeyConstraint(['payment_request_id'], ['payment_requests.id'], )
    )
    op.create_table('recurring_payment_requests',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('prorate_first_payment', sa.Boolean(), nullable=False),
    sa.Column('interval', sa.String(length=50), nullable=False),
    sa.Column('interval_value', sa.Integer(), nullable=False),
    sa.Column('interval_time', sa.String(length=50), nullable=True),
    sa.Column('start_date', sa.DateTime(), nullable=True),
    sa.Column('prorate_date', sa.DateTime(), nullable=True),
    sa.Column('next_due_date', sa.DateTime(), nullable=True),
    sa.Column('next_due_amount', sa.Float(), nullable=False),
    sa.Column('repeat_type', sa.String(length=50), nullable=False),
    sa.Column('end_type', sa.String(length=50), nullable=False),
    sa.Column('end_date', sa.DateTime(), nullable=True),
    sa.Column('pay_until_count', sa.Integer(), nullable=True),
    sa.Column('paid_count', sa.Integer(), nullable=True),
    sa.Column('is_autopay', sa.Boolean(), nullable=False),
    sa.Column('autopay_type', sa.String(length=50), nullable=True),
    sa.Column('autopay_interval', sa.Integer(), nullable=True),
    sa.Column('checkout_interval', sa.String(length=50), nullable=False),
    sa.Column('checkout_interval_value', sa.Integer(), nullable=False),
    sa.Column('checkout_interval_time', sa.String(length=50), nullable=True),
    sa.Column('checkout_repeat_type', sa.String(length=50), nullable=False),
    sa.Column('payment_request_id', sa.Integer(), nullable=False),
    sa.ForeignKeyConstraint(['payment_request_id'], ['payment_requests.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_recurring_payment_requests_id'), 'recurring_payment_requests', ['id'], unique=False)
    op.create_table('split_payment_requests',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('sequence', sa.Integer(), nullable=True),
    sa.Column('split_type', sa.String(length=50), nullable=False),
    sa.Column('split_value', sa.Float(), nullable=False),
    sa.Column('billing_date', sa.DateTime(), nullable=True),
    sa.Column('due_date', sa.DateTime(), nullable=True),
    sa.Column('paid_date', sa.DateTime(), nullable=True),
    sa.Column('payment_request_id', sa.Integer(), nullable=False),
    sa.ForeignKeyConstraint(['payment_request_id'], ['payment_requests.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_split_payment_requests_id'), 'split_payment_requests', ['id'], unique=False)
    op.create_table('invoice_adjustments',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('invoice_id', sa.Integer(), nullable=False),
    sa.Column('is_surcharged', sa.Boolean(), nullable=False),
    sa.Column('adjustment_description', sa.Text(), nullable=True),
    sa.Column('disclaimer', sa.Text(), nullable=True),
    sa.Column('is_discounted', sa.Boolean(), nullable=False),
    sa.Column('is_manual_discount', sa.Boolean(), nullable=False),
    sa.Column('discount_name', sa.String(length=255), nullable=True),
    sa.Column('discount_amount', sa.Float(), nullable=False),
    sa.Column('discount_type', sa.String(), nullable=False),
    sa.Column('has_late_fee', sa.Boolean(), nullable=False),
    sa.Column('fee_amount', sa.Integer(), nullable=False),
    sa.Column('late_fee_type', sa.String(), nullable=False),
    sa.Column('fee_frequency', sa.String(), nullable=True),
    sa.Column('late_fee_delay', sa.Integer(), nullable=False),
    sa.Column('late_fee_delay_frequency', sa.String(), nullable=True),
    sa.Column('cap_fee_amount', sa.Float(), nullable=False),
    sa.Column('discount_id', sa.Integer(), nullable=True),
    sa.Column('payment_request_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['discount_id'], ['merchant_discount.id'], ),
    sa.ForeignKeyConstraint(['invoice_id'], ['invoices.id'], ),
    sa.ForeignKeyConstraint(['payment_request_id'], ['payment_requests.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_invoice_adjustments_id'), 'invoice_adjustments', ['id'], unique=False)
    op.create_table('invoices_files',
    sa.Column('invoice_id', sa.Integer(), nullable=True),
    sa.Column('file_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['file_id'], ['files.id'], ),
    sa.ForeignKeyConstraint(['invoice_id'], ['invoices.id'], )
    )
    op.create_table('invoices_line_items',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('title', sa.Text(), nullable=False),
    sa.Column('description', sa.Text(), nullable=True),
    sa.Column('unit_price', sa.Float(), nullable=False),
    sa.Column('quantity', sa.Integer(), nullable=False),
    sa.Column('tax', sa.Float(), nullable=False),
    sa.Column('display_order', sa.Integer(), nullable=False),
    sa.Column('discount', sa.Float(), nullable=True),
    sa.Column('discount_type', sa.String(length=20), nullable=True),
    sa.Column('cost', sa.Float(), nullable=True),
    sa.Column('upcharge', sa.Float(), nullable=True),
    sa.Column('product_id', sa.Integer(), nullable=True),
    sa.Column('invoice_id', sa.Integer(), nullable=False),
    sa.ForeignKeyConstraint(['invoice_id'], ['invoices.id'], ),
    sa.ForeignKeyConstraint(['product_id'], ['products.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_invoices_line_items_id'), 'invoices_line_items', ['id'], unique=False)
    op.create_table('invoices_notes',
    sa.Column('invoice_id', sa.Integer(), nullable=True),
    sa.Column('note_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['invoice_id'], ['invoices.id'], ),
    sa.ForeignKeyConstraint(['note_id'], ['notes.id'], )
    )
    op.create_table('invoices_reminders',
    sa.Column('invoice_id', sa.Integer(), nullable=True),
    sa.Column('reminder_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['invoice_id'], ['invoices.id'], ),
    sa.ForeignKeyConstraint(['reminder_id'], ['reminders.id'], )
    )
    op.create_table('payment_requests_links',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('link', sa.Text(), nullable=True),
    sa.Column('token', sa.Text(), nullable=True),
    sa.Column('is_expired', sa.Boolean(), nullable=False),
    sa.Column('start_date', sa.DateTime(), nullable=True),
    sa.Column('end_date', sa.DateTime(), nullable=True),
    sa.Column('payment_request_id', sa.Integer(), nullable=False),
    sa.Column('invoice_id', sa.Integer(), nullable=False),
    sa.ForeignKeyConstraint(['invoice_id'], ['invoices.id'], ),
    sa.ForeignKeyConstraint(['payment_request_id'], ['payment_requests.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_payment_requests_links_id'), 'payment_requests_links', ['id'], unique=False)
    op.create_table('transactions',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('txn_amount', sa.Float(), nullable=False),
    sa.Column('txn_type', sa.String(length=50), nullable=True),
    sa.Column('txn_status', sa.Integer(), nullable=False),
    sa.Column('ocurred_at', sa.DateTime(), server_default=sa.text('now()'), nullable=False),
    sa.Column('txn_id', sa.String(length=255), nullable=False),
    sa.Column('txn_literal', sa.Text(), nullable=True),
    sa.Column('reference_id', sa.Text(), nullable=True),
    sa.Column('currency', sa.String(length=50), nullable=False),
    sa.Column('platform_fee_amount', sa.Float(), nullable=True),
    sa.Column('txn_metadata', sa.JSON(), nullable=True),
    sa.Column('billing_name', sa.String(length=255), nullable=True),
    sa.Column('description', sa.Text(), nullable=True),
    sa.Column('category', sa.String(length=50), nullable=False),
    sa.Column('transaction_type', sa.String(length=50), nullable=False),
    sa.Column('txn_source', sa.String(length=20), nullable=True),
    sa.Column('billing_address_id', sa.Integer(), nullable=True),
    sa.Column('payment_request_id', sa.Integer(), nullable=False),
    sa.Column('merchant_id', sa.Integer(), nullable=False),
    sa.Column('customer_id', sa.Integer(), nullable=False),
    sa.Column('payment_request_split_id', sa.Integer(), nullable=True),
    sa.Column('payment_method_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['billing_address_id'], ['address.id'], ),
    sa.ForeignKeyConstraint(['customer_id'], ['customers.id'], ),
    sa.ForeignKeyConstraint(['merchant_id'], ['merchants.id'], ),
    sa.ForeignKeyConstraint(['payment_method_id'], ['payment_methods.id'], ),
    sa.ForeignKeyConstraint(['payment_request_id'], ['payment_requests.id'], ),
    sa.ForeignKeyConstraint(['payment_request_split_id'], ['split_payment_requests.id'], ),
    sa.PrimaryKeyConstraint('id'),
    sa.UniqueConstraint('reference_id'),
    sa.UniqueConstraint('txn_id')
    )
    op.create_index(op.f('ix_transactions_id'), 'transactions', ['id'], unique=False)
    op.create_table('receipts',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('receipt_id', sa.String(length=255), nullable=False),
    sa.Column('receipt_literal', sa.Text(), nullable=True),
    sa.Column('amount', sa.Float(), nullable=False),
    sa.Column('paid_date', sa.DateTime(), nullable=True),
    sa.Column('billing_date', sa.DateTime(), nullable=True),
    sa.Column('tax_fee', sa.Float(), nullable=False),
    sa.Column('shipping_fee', sa.Float(), nullable=False),
    sa.Column('tip', sa.Float(), nullable=False),
    sa.Column('charge', sa.Float(), nullable=False),
    sa.Column('additional_fee', sa.Float(), nullable=False),
    sa.Column('comments', sa.Text(), nullable=True),
    sa.Column('description', sa.Text(), nullable=True),
    sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=False),
    sa.Column('updated_at', sa.DateTime(), nullable=True),
    sa.Column('deleted_at', sa.DateTime(), nullable=True),
    sa.Column('payment_request_id', sa.Integer(), nullable=False),
    sa.Column('merchant_id', sa.Integer(), nullable=False),
    sa.Column('customer_id', sa.Integer(), nullable=False),
    sa.Column('transaction_id', sa.Integer(), nullable=False),
    sa.ForeignKeyConstraint(['customer_id'], ['customers.id'], ),
    sa.ForeignKeyConstraint(['merchant_id'], ['merchants.id'], ),
    sa.ForeignKeyConstraint(['payment_request_id'], ['payment_requests.id'], ),
    sa.ForeignKeyConstraint(['transaction_id'], ['transactions.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_receipts_id'), 'receipts', ['id'], unique=False)
    op.create_index(op.f('ix_receipts_receipt_id'), 'receipts', ['receipt_id'], unique=True)
    op.create_table('transactions_files',
    sa.Column('transaction_id', sa.Integer(), nullable=True),
    sa.Column('file_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['file_id'], ['files.id'], ),
    sa.ForeignKeyConstraint(['transaction_id'], ['transactions.id'], )
    )
    op.create_table('transactions_invoices',
    sa.Column('transaction_id', sa.Integer(), nullable=False),
    sa.Column('invoice_id', sa.Integer(), nullable=False),
    sa.ForeignKeyConstraint(['invoice_id'], ['invoices.id'], ),
    sa.ForeignKeyConstraint(['transaction_id'], ['transactions.id'], ),
    sa.PrimaryKeyConstraint('transaction_id', 'invoice_id')
    )
    op.create_table('transactions_notes',
    sa.Column('transaction_id', sa.Integer(), nullable=True),
    sa.Column('note_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['note_id'], ['notes.id'], ),
    sa.ForeignKeyConstraint(['transaction_id'], ['transactions.id'], )
    )
    op.create_table('transactions_refunds',
    sa.Column('transaction_id', sa.Integer(), nullable=False),
    sa.Column('refund_id', sa.Integer(), nullable=False),
    sa.ForeignKeyConstraint(['refund_id'], ['transactions.id'], ),
    sa.ForeignKeyConstraint(['transaction_id'], ['transactions.id'], ),
    sa.PrimaryKeyConstraint('transaction_id', 'refund_id')
    )
    op.create_table('receipts_files',
    sa.Column('receipt_id', sa.Integer(), nullable=True),
    sa.Column('file_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['file_id'], ['files.id'], ),
    sa.ForeignKeyConstraint(['receipt_id'], ['receipts.id'], )
    )
    # ### end Alembic commands ###


def downgrade() -> None:
    """Downgrade schema."""
    # ### commands auto generated by Alembic - please adjust! ###
    op.drop_table('receipts_files')
    op.drop_table('transactions_refunds')
    op.drop_table('transactions_notes')
    op.drop_table('transactions_invoices')
    op.drop_table('transactions_files')
    op.drop_index(op.f('ix_receipts_receipt_id'), table_name='receipts')
    op.drop_index(op.f('ix_receipts_id'), table_name='receipts')
    op.drop_table('receipts')
    op.drop_index(op.f('ix_transactions_id'), table_name='transactions')
    op.drop_table('transactions')
    op.drop_index(op.f('ix_payment_requests_links_id'), table_name='payment_requests_links')
    op.drop_table('payment_requests_links')
    op.drop_table('invoices_reminders')
    op.drop_table('invoices_notes')
    op.drop_index(op.f('ix_invoices_line_items_id'), table_name='invoices_line_items')
    op.drop_table('invoices_line_items')
    op.drop_table('invoices_files')
    op.drop_index(op.f('ix_invoice_adjustments_id'), table_name='invoice_adjustments')
    op.drop_table('invoice_adjustments')
    op.drop_index(op.f('ix_split_payment_requests_id'), table_name='split_payment_requests')
    op.drop_table('split_payment_requests')
    op.drop_index(op.f('ix_recurring_payment_requests_id'), table_name='recurring_payment_requests')
    op.drop_table('recurring_payment_requests')
    op.drop_table('payment_requests_notes')
    op.drop_index(op.f('ix_payment_requests_line_items_id'), table_name='payment_requests_line_items')
    op.drop_table('payment_requests_line_items')
    op.drop_table('payment_requests_files')
    op.drop_index(op.f('ix_payment_requests_customers_id'), table_name='payment_requests_customers')
    op.drop_table('payment_requests_customers')
    op.drop_index(op.f('ix_payment_requests_authorizations_id'), table_name='payment_requests_authorizations')
    op.drop_index(op.f('ix_payment_requests_authorizations_authorization_id'), table_name='payment_requests_authorizations')
    op.drop_table('payment_requests_authorizations')
    op.drop_index(op.f('ix_payment_requests_approvals_id'), table_name='payment_requests_approvals')
    op.drop_table('payment_requests_approvals')
    op.drop_index(op.f('ix_payment_requests_adjustments_id'), table_name='payment_requests_adjustments')
    op.drop_table('payment_requests_adjustments')
    op.drop_table('payment_request_reminders')
    op.drop_index(op.f('ix_payment_request_products_id'), table_name='payment_request_products')
    op.drop_table('payment_request_products')
    op.drop_index(op.f('ix_payment_request_intents_id'), table_name='payment_request_intents')
    op.drop_table('payment_request_intents')
    op.drop_index(op.f('ix_payment_methods_id'), table_name='payment_methods')
    op.drop_table('payment_methods')
    op.drop_index(op.f('ix_partial_payment_requests_configs_id'), table_name='partial_payment_requests_configs')
    op.drop_table('partial_payment_requests_configs')
    op.drop_index(op.f('ix_merchant_transactions_id'), table_name='merchant_transactions')
    op.drop_table('merchant_transactions')
    op.drop_index(op.f('ix_invoices_invoice_id'), table_name='invoices')
    op.drop_index(op.f('ix_invoices_id'), table_name='invoices')
    op.drop_table('invoices')
    op.drop_index(op.f('ix_reminders_id'), table_name='reminders')
    op.drop_table('reminders')
    op.drop_table('products_notes')
    op.drop_table('products_files')
    op.drop_index(op.f('ix_payment_requests_payment_request_id'), table_name='payment_requests')
    op.drop_index(op.f('ix_payment_requests_id'), table_name='payment_requests')
    op.drop_table('payment_requests')
    op.drop_index(op.f('ix_merchant_payment_methods_id'), table_name='merchant_payment_methods')
    op.drop_table('merchant_payment_methods')
    op.drop_index(op.f('ix_merchant_locations_id'), table_name='merchant_locations')
    op.drop_table('merchant_locations')
    op.drop_table('merchant_contact_addresses')
    op.drop_table('merchant_addresses')
    op.drop_index(op.f('ix_customer_users_id'), table_name='customer_users')
    op.drop_table('customer_users')
    op.drop_table('customer_addresses')
    op.drop_table('contact_addresses')
    op.drop_index(op.f('ix_products_id'), table_name='products')
    op.drop_table('products')
    op.drop_index(op.f('ix_customer_settings_id'), table_name='customer_settings')
    op.drop_table('customer_settings')
    op.drop_table('customer_notes')
    op.drop_index(op.f('ix_customer_contacts_id'), table_name='customer_contacts')
    op.drop_index(op.f('ix_customer_contacts_contact_id'), table_name='customer_contacts')
    op.drop_table('customer_contacts')
    op.drop_table('customer_attachments')
    op.drop_index(op.f('ix_address_id'), table_name='address')
    op.drop_table('address')
    op.drop_index(op.f('ix_products_category_id'), table_name='products_category')
    op.drop_table('products_category')
    op.drop_index(op.f('ix_merchant_users_id'), table_name='merchant_users')
    op.drop_table('merchant_users')
    op.drop_index(op.f('ix_merchant_settings_id'), table_name='merchant_settings')
    op.drop_table('merchant_settings')
    op.drop_index(op.f('ix_merchant_payment_history_id'), table_name='merchant_payment_history')
    op.drop_table('merchant_payment_history')
    op.drop_index(op.f('ix_merchant_discount_id'), table_name='merchant_discount')
    op.drop_index(op.f('ix_merchant_discount_discount_id'), table_name='merchant_discount')
    op.drop_table('merchant_discount')
    op.drop_index(op.f('ix_merchant_contacts_id'), table_name='merchant_contacts')
    op.drop_index(op.f('ix_merchant_contacts_contact_id'), table_name='merchant_contacts')
    op.drop_table('merchant_contacts')
    op.drop_index(op.f('ix_merchant_acceptances_id'), table_name='merchant_acceptances')
    op.drop_table('merchant_acceptances')
    op.drop_index(op.f('ix_customers_uin'), table_name='customers')
    op.drop_index(op.f('ix_customers_id'), table_name='customers')
    op.drop_index(op.f('ix_customers_customer_id'), table_name='customers')
    op.drop_table('customers')
    op.drop_index(op.f('ix_merchants_uuid'), table_name='merchants')
    op.drop_index(op.f('ix_merchants_uin'), table_name='merchants')
    op.drop_index(op.f('ix_merchants_merchant_id'), table_name='merchants')
    op.drop_index(op.f('ix_merchants_id'), table_name='merchants')
    op.drop_table('merchants')
    op.drop_index(op.f('ix_notes_id'), table_name='notes')
    op.drop_table('notes')
    op.drop_index(op.f('ix_files_storage_key'), table_name='files')
    op.drop_index(op.f('ix_files_id'), table_name='files')
    op.drop_table('files')
    op.drop_index(op.f('ix_auth_sessions_user_id'), table_name='auth_sessions')
    op.drop_index(op.f('ix_auth_sessions_refresh_token'), table_name='auth_sessions')
    op.drop_index(op.f('ix_auth_sessions_is_revoked'), table_name='auth_sessions')
    op.drop_index(op.f('ix_auth_sessions_is_active'), table_name='auth_sessions')
    op.drop_index(op.f('ix_auth_sessions_id'), table_name='auth_sessions')
    op.drop_index(op.f('ix_auth_sessions_access_token'), table_name='auth_sessions')
    op.drop_table('auth_sessions')
    op.drop_index(op.f('ix_users_username'), table_name='users')
    op.drop_index(op.f('ix_users_user_id'), table_name='users')
    op.drop_index(op.f('ix_users_id'), table_name='users')
    op.drop_index(op.f('ix_users_email'), table_name='users')
    op.drop_table('users')
    op.drop_index(op.f('ix_site_settings_id'), table_name='site_settings')
    op.drop_table('site_settings')
    op.drop_index(op.f('ix_payment_methods_cheque_details_id'), table_name='payment_methods_cheque_details')
    op.drop_table('payment_methods_cheque_details')
    op.drop_index(op.f('ix_payment_methods_card_details_id'), table_name='payment_methods_card_details')
    op.drop_table('payment_methods_card_details')
    op.drop_index(op.f('ix_payment_methods_ach_details_id'), table_name='payment_methods_ach_details')
    op.drop_table('payment_methods_ach_details')
    op.drop_index(op.f('ix_cdns_id'), table_name='cdns')
    op.drop_table('cdns')
    # ### end Alembic commands ###
