"""empty message Revision ID: 33e09efd85e3 Revises: Create Date: 2025-07-03 14:07:14.424548 """ from alembic import op import sqlalchemy as sa from sqlalchemy import literal_column from sqlalchemy import text # revision identifiers, used by Alembic. revision = '33e09efd85e3' down_revision = None branch_labels = None depends_on = None sequences_and_triggers = [ ("transactions", "transactions_seq", "trg_transactions_id"), ("transaction_offers", "transaction_offers_seq", "trg_transaction_offers_id"), ("salaries", "salaries_seq", "trg_salaries_id"), ("repayments_data", "repayments_data_seq", "trg_repayments_data_id"), ("repayments", "repayments_seq", "trg_repayments_id"), ("rac_checks", "rac_checks_seq", "trg_rac_checks_id"), ("loans", "loans_seq", "trg_loans_id"), ( "loan_repayment_schedules", "loan_repayment_schedules_seq", "trg_loan_repayment_schedules_id", ), ("loan_charges", "loan_charges_seq", "trg_loan_charges_id"), ("charges", "charges_seq", "trg_charges_id"), ] def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.create_table('accounts', sa.Column('id', sa.String(length=50), nullable=False), sa.Column('customer_id', sa.String(length=50), nullable=False), sa.Column('account_type', sa.String(length=50), nullable=True), sa.Column('status', sa.String(length=20), nullable=True), sa.Column('lien_amount', sa.Float(), nullable=True), sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True), sa.Column('updated_at', sa.DateTime(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True), sa.PrimaryKeyConstraint('id') ) op.create_table('charges', sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), sa.Column('offer_id', sa.String(length=50), nullable=False), sa.Column('code', sa.String(length=50), nullable=False), sa.Column('percent', sa.Float(), nullable=True), sa.Column('description', sa.Text(), nullable=True), sa.Column('due', sa.Integer(), nullable=False), sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True), sa.Column('updated_at', sa.DateTime(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True), sa.PrimaryKeyConstraint('id') ) op.create_table('customers', sa.Column('id', sa.String(length=50), nullable=False), sa.Column('msisdn', sa.String(length=20), nullable=False), sa.Column('country_code', sa.String(length=3), nullable=False), sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True), sa.Column('updated_at', sa.DateTime(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True), sa.PrimaryKeyConstraint('id'), sa.UniqueConstraint('msisdn') ) op.create_table('loan_charges', sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), sa.Column('loan_id', sa.Integer(), nullable=False), sa.Column('transaction_id', sa.String(length=50), nullable=True), sa.Column('code', sa.String(length=50), nullable=False), sa.Column('amount', sa.Float(), nullable=True), sa.Column('percent', sa.Float(), nullable=True), sa.Column('description', sa.Text(), nullable=True), sa.Column('due', sa.Integer(), nullable=False), sa.Column('due_date', sa.DateTime(), nullable=True), sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True), sa.Column('updated_at', sa.DateTime(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True), sa.PrimaryKeyConstraint('id') ) op.create_table('loan_repayment_schedules', sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), sa.Column('loan_id', sa.Integer(), nullable=False), sa.Column('transaction_id', sa.String(length=50), nullable=True), sa.Column('product_id', sa.String(length=20), nullable=True), sa.Column('installment_number', sa.Integer(), nullable=False), sa.Column('due_date', sa.DateTime(), nullable=False), sa.Column('installment_amount', sa.Float(), nullable=True), sa.Column('total_repayment_amount', sa.Float(), nullable=True), sa.Column('paid', sa.Boolean(), nullable=True), sa.Column('paid_at', sa.DateTime(), nullable=True), sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True), sa.Column('updated_at', sa.DateTime(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True), sa.PrimaryKeyConstraint('id') ) op.create_table('loans', sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), sa.Column('customer_id', sa.String(length=50), nullable=False), sa.Column('transaction_id', sa.String(length=50), nullable=True), sa.Column('original_transaction', sa.String(length=50), nullable=True), sa.Column('account_id', sa.String(length=50), nullable=False), sa.Column('offer_id', sa.String(length=20), nullable=False), sa.Column('product_id', sa.String(length=20), nullable=True), sa.Column('collection_type', sa.String(length=20), nullable=True), sa.Column('current_loan_amount', sa.Float(), nullable=True), sa.Column('initial_loan_amount', sa.Float(), nullable=False), sa.Column('default_penalty_fee', sa.Float(), nullable=True), sa.Column('continuous_fee', sa.Float(), nullable=True), sa.Column('upfront_fee', sa.Float(), nullable=True), sa.Column('repayment_amount', sa.Float(), nullable=True), sa.Column('installment_amount', sa.Float(), nullable=True), sa.Column('status', sa.String(length=20), nullable=True), sa.Column('tenor', sa.Integer(), nullable=True), sa.Column('due_date', sa.DateTime(), nullable=True), sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True), sa.Column('updated_at', sa.DateTime(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True), sa.Column('eligible_amount', sa.Float(), nullable=True), sa.Column('disburse_date', sa.DateTime(), nullable=True), sa.Column('disburse_verify', sa.DateTime(), nullable=True), sa.Column('reference', sa.String(length=50), nullable=True), sa.Column('disburse_result', sa.String(length=10), nullable=True), sa.Column('disburse_description', sa.String(length=100), nullable=True), sa.Column('verify_result', sa.String(length=10), nullable=True), sa.Column('verify_description', sa.String(length=100), nullable=True), sa.PrimaryKeyConstraint('id') ) op.create_table('offers', sa.Column('id', sa.String(length=50), nullable=False), sa.Column('product_id', sa.String(length=50), nullable=False), sa.Column('min_amount', sa.Float(), nullable=False), sa.Column('max_amount', sa.Float(), nullable=False), sa.Column('tenor', sa.Integer(), nullable=False), sa.Column('schedule', sa.Integer(), nullable=True), sa.Column('interest_rate', sa.Float(), nullable=True), sa.Column('management_rate', sa.Float(), nullable=True), sa.Column('insurance_rate', sa.Float(), nullable=True), sa.Column('vat_rate', sa.Float(), nullable=True), sa.Column('list_order', sa.Integer(), nullable=True), sa.Column('max_daily_loans', sa.Integer(), nullable=True), sa.Column('max_active_loans', sa.Integer(), nullable=True), sa.Column('max_life_loans', sa.Integer(), nullable=True), sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True), sa.Column('updated_at', sa.DateTime(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True), sa.PrimaryKeyConstraint('id') ) op.create_table('rac_checks', sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), sa.Column('transaction_id', sa.String(length=50), nullable=False), sa.Column('customer_id', sa.String(length=50), nullable=False), sa.Column('account_id', sa.String(length=50), nullable=False), sa.Column('rac_response', sa.Text(), nullable=False), sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True), sa.Column('updated_at', sa.DateTime(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True), sa.PrimaryKeyConstraint('id') ) op.create_table('repayments', sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), sa.Column('loan_id', sa.String(length=50), nullable=False), sa.Column('customer_id', sa.String(length=50), nullable=False), sa.Column('product_id', sa.String(length=20), nullable=True), sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True), sa.Column('updated_at', sa.DateTime(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True), sa.Column('transaction_id', sa.String(length=50), nullable=True), sa.Column('repay_date', sa.DateTime(), nullable=True), sa.Column('repay_result', sa.String(length=10), nullable=True), sa.Column('repay_description', sa.String(length=100), nullable=True), sa.Column('verify_date', sa.DateTime(), nullable=True), sa.Column('verify_result', sa.String(length=10), nullable=True), sa.Column('verify_description', sa.String(length=100), nullable=True), sa.Column('initiated_by', sa.String(length=50), nullable=True), sa.Column('salary_amount', sa.Float(), nullable=True), sa.PrimaryKeyConstraint('id') ) op.create_table('repayments_data', sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), sa.Column('transaction_id', sa.String(length=50), nullable=False), sa.Column('fbn_transaction_id', sa.String(length=50), nullable=True), sa.Column('customer_id', sa.String(length=50), nullable=True), sa.Column('account_id', sa.String(length=50), nullable=True), sa.Column('repayment_amount', sa.Float(), nullable=True), sa.Column('amount_collected', sa.Float(), nullable=True), sa.Column('added_date', sa.DateTime(timezone=True), nullable=False), sa.Column('response_code', sa.String(length=10), nullable=True), sa.Column('response_descr', sa.String(length=255), nullable=True), sa.Column('balance', sa.Float(), nullable=True), sa.PrimaryKeyConstraint('id') ) op.create_table('salaries', sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), sa.Column('customer_id', sa.String(length=50), nullable=False), sa.Column('account_id', sa.String(length=50), nullable=True), sa.Column('status', sa.String(length=20), nullable=True), sa.Column('amount', sa.Float(), nullable=False), sa.Column('salary_date', sa.DateTime(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True), sa.Column('created_at', sa.DateTime(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True), sa.Column('updated_at', sa.DateTime(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True), sa.PrimaryKeyConstraint('id') ) op.create_table('transaction_offers', sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), sa.Column('customer_id', sa.String(length=50), nullable=False), sa.Column('transaction_id', sa.String(length=50), nullable=False), sa.Column('original_transaction', sa.String(length=50), nullable=True), sa.Column('offer_id', sa.String(length=20), nullable=False), sa.Column('product_id', sa.String(length=20), nullable=True), sa.Column('min_amount', sa.Float(), nullable=False), sa.Column('max_amount', sa.Float(), nullable=False), sa.Column('eligible_amount', sa.Float(), nullable=True), sa.Column('tenor', sa.Integer(), nullable=True), sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True), sa.Column('updated_at', sa.DateTime(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True), sa.PrimaryKeyConstraint('id') ) op.create_table('transactions', sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), sa.Column('transaction_id', sa.String(length=50), nullable=False), sa.Column('account_id', sa.String(length=50), nullable=True), sa.Column('customer_id', sa.String(length=50), nullable=True), sa.Column('type', sa.String(length=50), nullable=False), sa.Column('channel', sa.String(length=50), nullable=False), sa.Column('phone_number', sa.String(length=50), nullable=True), sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True), sa.Column('updated_at', sa.DateTime(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True), sa.PrimaryKeyConstraint('id') ) for table, seq, trg in sequences_and_triggers: op.execute( text( f""" BEGIN EXECUTE IMMEDIATE 'CREATE SEQUENCE {seq} START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -955 THEN RAISE; END IF; END; """ ) ) op.execute( text( f""" CREATE OR REPLACE TRIGGER {trg} BEFORE INSERT ON {table} FOR EACH ROW BEGIN IF ||':'||'NEW.id IS NULL THEN SELECT {seq}.NEXTVAL INTO '||':'||'NEW.id FROM dual; END IF; END; """ ) ) def downgrade(): # ### commands auto generated by Alembic - please adjust! ### op.drop_table('transactions') op.drop_table('transaction_offers') op.drop_table('salaries') op.drop_table('repayments_data') op.drop_table('repayments') op.drop_table('rac_checks') op.drop_table('offers') op.drop_table('loans') op.drop_table('loan_repayment_schedules') op.drop_table('loan_charges') op.drop_table('customers') op.drop_table('charges') op.drop_table('accounts') # ### end Alembic commands ### for table, seq, trg in sequences_and_triggers: op.execute(text(f"DROP TRIGGER {trg}")) op.execute(text(f"DROP SEQUENCE {seq}"))