diff --git a/app/__init__.py b/app/__init__.py index 1530810..6239e16 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -18,6 +18,10 @@ from flask_jwt_extended import ( def create_app(): """Factory function to create a Flask app instance""" + # import oracledb + + # oracledb.init_oracle_client(lib_dir=None) + app = Flask(__name__) # Load configuration diff --git a/app/api/services/offer_analysis.py b/app/api/services/offer_analysis.py index 279de6f..1c2297d 100644 --- a/app/api/services/offer_analysis.py +++ b/app/api/services/offer_analysis.py @@ -40,6 +40,7 @@ class OfferAnalysis: original_transaction = transaction_id return transaction_offer, offer, eligible_amount, original_transaction + @staticmethod def _analyze_rack_checks(rack_response, offer): logger.info(f"This is PayLoad for ANALYSYS ***** : {str(rack_response)}", exc_info=True) diff --git a/app/config.py b/app/config.py index 564d58e..d1f4a86 100644 --- a/app/config.py +++ b/app/config.py @@ -16,10 +16,16 @@ class Config: DATABASE_PASSWORD = os.environ.get("DATABASE_PASSWORD") DATABASE_HOST = os.environ.get("DATABASE_HOST") DATABASE_PORT = os.environ.get("DATABASE_PORT", 10532) - DATABASE_NAME = os.environ.get("DATABASE_NAME") + DATABASE_NAME = os.environ.get("DATABASE_NAME", "firstadvancedev") + DATABASE_SID = os.environ.get("DATABASE_SID", "FREE") + DNS = f"(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST={DATABASE_HOST})(PORT={DATABASE_PORT}))(CONNECT_DATA=(SID={DATABASE_SID})))" + # Database Connection - SQLALCHEMY_DATABASE_URI = f"postgresql+psycopg2://{DATABASE_USER}:{DATABASE_PASSWORD}@{DATABASE_HOST}:{DATABASE_PORT}/{DATABASE_NAME}" + # SQLALCHEMY_DATABASE_URI = f"postgresql+psycopg2://{DATABASE_USER}:{DATABASE_PASSWORD}@{DATABASE_HOST}:{DATABASE_PORT}/{DATABASE_NAME}" + + SQLALCHEMY_DATABASE_URI = (f"oracle+oracledb://{DATABASE_USER}:{DATABASE_PASSWORD}@{DNS}") + SQLALCHEMY_TRACK_MODIFICATIONS = False diff --git a/app/models/offer.py b/app/models/offer.py index a3250ae..8dfa3eb 100644 --- a/app/models/offer.py +++ b/app/models/offer.py @@ -7,8 +7,8 @@ from sqlalchemy.sql import func class Offer(db.Model): __tablename__ = 'offers' - id = db.Column(db.String, primary_key=True) - product_id = db.Column(db.String, nullable=False) + id = db.Column(db.String(50), primary_key=True) + product_id = db.Column(db.String(50), nullable=False) min_amount = db.Column(db.Float, nullable=False) max_amount = db.Column(db.Float, nullable=False) tenor = db.Column(db.Integer, nullable=False) diff --git a/app/models/rac_checks.py b/app/models/rac_checks.py index a4d56b5..cf3f00e 100644 --- a/app/models/rac_checks.py +++ b/app/models/rac_checks.py @@ -3,6 +3,7 @@ from app.extensions import db from sqlalchemy.orm import relationship from sqlalchemy.exc import IntegrityError from uuid import uuid4 +import json from sqlalchemy.types import JSON from sqlalchemy.sql import func @@ -11,11 +12,22 @@ class RACCheck(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) transaction_id = db.Column(db.String(50), nullable=False) - customer_id = db.Column(db.String, nullable=False) - account_id = db.Column(db.String, nullable=False) - rac_response = db.Column(db.JSON, nullable=False) + customer_id = db.Column(db.String(50), nullable=False) + account_id = db.Column(db.String(50), nullable=False) + rac_response = db.Column(db.Text, nullable=False) created_at = db.Column(db.DateTime(timezone=True), server_default=func.now()) updated_at = db.Column(db.DateTime(timezone=True), server_default=func.now(), onupdate=func.now()) + + + @property + def rac_response_data(self): + return json.loads(self.rac_response) + + @rac_response_data.setter + def rac_response_data(self, value): + self.rac_response = json.dumps(value) + + @classmethod def add_rac_check(cls, customer_id, account_id, transaction_id, data = None): @@ -25,10 +37,11 @@ class RACCheck(db.Model): customer_id = customer_id, account_id = account_id, transaction_id = transaction_id, - rac_response = data, created_at=datetime.now(timezone.utc), updated_at=datetime.now(timezone.utc) ) + + rac_check.rac_response_data = data or {} try: db.session.add(rac_check) @@ -66,7 +79,7 @@ class RACCheck(db.Model): "transactionId": str(self.transaction_id), "customerId": self.customer_id, "accountId": self.account_id, - "racResponse": self.rac_response, + "racResponse": self.rac_response_data, "createdAt": self.created_at.isoformat(), "updatedAt": self.updated_at.isoformat() if self.updated_at else None } diff --git a/migrations/versions/05b5494ad406_.py b/migrations/versions/05b5494ad406_.py new file mode 100644 index 0000000..5000d1a --- /dev/null +++ b/migrations/versions/05b5494ad406_.py @@ -0,0 +1,31 @@ +"""empty message + +Revision ID: 05b5494ad406 +Revises: 33e09efd85e3 +Create Date: 2025-07-06 09:28:26.264927 + +""" + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = "05b5494ad406" +down_revision = "33e09efd85e3" +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column("loans", sa.Column("balance", sa.Float(), nullable=True)) + + +# ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column("loans", "balance") + # ### end Alembic commands ### diff --git a/migrations/versions/0acd553309a1_migration_on_tue_jun_10_08_41_00_wat_.py b/migrations/versions/0acd553309a1_migration_on_tue_jun_10_08_41_00_wat_.py deleted file mode 100644 index b9ca93d..0000000 --- a/migrations/versions/0acd553309a1_migration_on_tue_jun_10_08_41_00_wat_.py +++ /dev/null @@ -1,35 +0,0 @@ -"""Migration on Tue Jun 10 08:41:00 WAT 2025 - -Revision ID: 0acd553309a1 -Revises: 45790fd659fb -Create Date: 2025-06-10 08:41:45.222513 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '0acd553309a1' -down_revision = '45790fd659fb' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - 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('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.PrimaryKeyConstraint('id') - ) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_table('repayments_data') - # ### end Alembic commands ### diff --git a/migrations/versions/1340e7e578b9_migration_on_thu_apr_10_21_50_01_utc_.py b/migrations/versions/1340e7e578b9_migration_on_thu_apr_10_21_50_01_utc_.py deleted file mode 100644 index 92e0eef..0000000 --- a/migrations/versions/1340e7e578b9_migration_on_thu_apr_10_21_50_01_utc_.py +++ /dev/null @@ -1,32 +0,0 @@ -"""Migration on Thu Apr 10 21:50:01 UTC 2025 - -Revision ID: 1340e7e578b9 -Revises: b8f6fd76ead8 -Create Date: 2025-04-10 21:50:32.113149 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '1340e7e578b9' -down_revision = 'b8f6fd76ead8' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('transactions', schema=None) as batch_op: - batch_op.add_column(sa.Column('ref_model', sa.String(length=50), nullable=True)) - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('transactions', schema=None) as batch_op: - batch_op.drop_column('ref_model') - - # ### end Alembic commands ### diff --git a/migrations/versions/1696ee63c28a_.py b/migrations/versions/1696ee63c28a_.py deleted file mode 100644 index ddbe1fa..0000000 --- a/migrations/versions/1696ee63c28a_.py +++ /dev/null @@ -1,52 +0,0 @@ -"""empty message - -Revision ID: 1696ee63c28a -Revises: b54422fb31e0 -Create Date: 2025-06-18 12:28:23.942143 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '1696ee63c28a' -down_revision = 'b54422fb31e0' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - 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_type', 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('now()'), nullable=True), - sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=True), - sa.Column('updated_at', sa.DateTime(), server_default=sa.text('now()'), nullable=True), - sa.PrimaryKeyConstraint('id') - ) - with op.batch_alter_table('repayments', schema=None) as batch_op: - batch_op.add_column(sa.Column('initiated_by', sa.String(length=50), nullable=True)) - batch_op.add_column(sa.Column('salary_amount', sa.Float(), nullable=True)) - - with op.batch_alter_table('repayments_data', schema=None) as batch_op: - batch_op.add_column(sa.Column('balance', sa.Float(), nullable=True)) - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('repayments_data', schema=None) as batch_op: - batch_op.drop_column('balance') - - with op.batch_alter_table('repayments', schema=None) as batch_op: - batch_op.drop_column('salary_amount') - batch_op.drop_column('initiated_by') - - op.drop_table('salaries') - # ### end Alembic commands ### diff --git a/migrations/versions/173ea45db189_migration_on_sat_may_10_09_54_34_utc_.py b/migrations/versions/173ea45db189_migration_on_sat_may_10_09_54_34_utc_.py deleted file mode 100644 index 0c3686b..0000000 --- a/migrations/versions/173ea45db189_migration_on_sat_may_10_09_54_34_utc_.py +++ /dev/null @@ -1,32 +0,0 @@ -"""Migration on Sat May 10 09:54:34 UTC 2025 - -Revision ID: 173ea45db189 -Revises: 3105abd795d4 -Create Date: 2025-05-10 09:54:39.380499 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '173ea45db189' -down_revision = '3105abd795d4' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('transaction_offers', schema=None) as batch_op: - batch_op.add_column(sa.Column('original_transaction', sa.String(length=50), nullable=True)) - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('transaction_offers', schema=None) as batch_op: - batch_op.drop_column('original_transaction') - - # ### end Alembic commands ### diff --git a/migrations/versions/1b2339f43824_migration_on_thu_apr_24_17_42_25_utc_.py b/migrations/versions/1b2339f43824_migration_on_thu_apr_24_17_42_25_utc_.py deleted file mode 100644 index c66d8a4..0000000 --- a/migrations/versions/1b2339f43824_migration_on_thu_apr_24_17_42_25_utc_.py +++ /dev/null @@ -1,53 +0,0 @@ -"""Migration on Thu Apr 24 17:42:25 UTC 2025 - -Revision ID: 1b2339f43824 -Revises: de9ad96ba34e -Create Date: 2025-04-24 17:43:09.589626 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '1b2339f43824' -down_revision = 'de9ad96ba34e' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('rac_checks', - sa.Column('id', sa.String(), nullable=False), - sa.Column('transaction_id', sa.String(length=50), nullable=False), - sa.Column('customer_id', sa.String(), nullable=False), - sa.Column('account_id', sa.String(), nullable=False), - sa.Column('rac_response', sa.JSON(), nullable=False), - sa.Column('created_at', sa.DateTime(), nullable=True), - sa.Column('updated_at', sa.DateTime(), nullable=True), - sa.PrimaryKeyConstraint('id') - ) - with op.batch_alter_table('loan_charges', schema=None) as batch_op: - batch_op.alter_column('amount', - existing_type=sa.NUMERIC(precision=10, scale=2), - type_=sa.Float(), - existing_nullable=True) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loans', schema=None) as batch_op: - batch_op.drop_column('installment_amount') - batch_op.drop_column('repayment_amount') - batch_op.drop_column('upfront_fee') - - with op.batch_alter_table('loan_charges', schema=None) as batch_op: - batch_op.alter_column('amount', - existing_type=sa.Float(), - type_=sa.NUMERIC(precision=10, scale=2), - existing_nullable=True) - - op.drop_table('rac_checks') - # ### end Alembic commands ### diff --git a/migrations/versions/287ecb02d3d7_migration_on_wed_apr_16_18_35_18_utc_.py b/migrations/versions/287ecb02d3d7_migration_on_wed_apr_16_18_35_18_utc_.py deleted file mode 100644 index 583c616..0000000 --- a/migrations/versions/287ecb02d3d7_migration_on_wed_apr_16_18_35_18_utc_.py +++ /dev/null @@ -1,32 +0,0 @@ -"""Migration on Wed Apr 16 18:35:18 UTC 2025 - -Revision ID: 287ecb02d3d7 -Revises: a4847b997191 -Create Date: 2025-04-16 18:36:04.632791 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '287ecb02d3d7' -down_revision = 'a4847b997191' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loan_charges', schema=None) as batch_op: - batch_op.drop_column('transaction_id') - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loan_charges', schema=None) as batch_op: - batch_op.add_column(sa.Column('transaction_id', sa.VARCHAR(length=50), autoincrement=False, nullable=True)) - - # ### end Alembic commands ### diff --git a/migrations/versions/2a45dd99c9cb_migration_on_fri_apr_25_15_01_00_utc_.py b/migrations/versions/2a45dd99c9cb_migration_on_fri_apr_25_15_01_00_utc_.py deleted file mode 100644 index 7b388b5..0000000 --- a/migrations/versions/2a45dd99c9cb_migration_on_fri_apr_25_15_01_00_utc_.py +++ /dev/null @@ -1,42 +0,0 @@ -"""Migration on Fri Apr 25 15:01:00 UTC 2025 - -Revision ID: 2a45dd99c9cb -Revises: 2cf0c177ca02 -Create Date: 2025-04-25 15:01:51.129681 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '2a45dd99c9cb' -down_revision = '2cf0c177ca02' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loan_repayment_schedules', schema=None) as batch_op: - batch_op.add_column(sa.Column('product_id', sa.String(length=20), nullable=True)) - batch_op.add_column(sa.Column('installment_amount', sa.Float(), nullable=True)) - batch_op.add_column(sa.Column('total_repayment_amount', sa.Float(), nullable=True)) - batch_op.drop_column('principal_amount') - batch_op.drop_column('interest_amount') - batch_op.drop_column('total_installment') - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loan_repayment_schedules', schema=None) as batch_op: - batch_op.add_column(sa.Column('total_installment', sa.DOUBLE_PRECISION(precision=53), autoincrement=False, nullable=True)) - batch_op.add_column(sa.Column('interest_amount', sa.DOUBLE_PRECISION(precision=53), autoincrement=False, nullable=True)) - batch_op.add_column(sa.Column('principal_amount', sa.DOUBLE_PRECISION(precision=53), autoincrement=False, nullable=True)) - batch_op.drop_column('total_repayment_amount') - batch_op.drop_column('installment_amount') - batch_op.drop_column('product_id') - - # ### end Alembic commands ### diff --git a/migrations/versions/2cf0c177ca02_migration_on_fri_apr_25_14_02_01_utc_.py b/migrations/versions/2cf0c177ca02_migration_on_fri_apr_25_14_02_01_utc_.py deleted file mode 100644 index 6876ba6..0000000 --- a/migrations/versions/2cf0c177ca02_migration_on_fri_apr_25_14_02_01_utc_.py +++ /dev/null @@ -1,41 +0,0 @@ -"""Migration on Fri Apr 25 14:02:01 UTC 2025 - -Revision ID: 2cf0c177ca02 -Revises: 1b2339f43824 -Create Date: 2025-04-25 14:02:42.244146 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '2cf0c177ca02' -down_revision = '1b2339f43824' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - 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('installment_number', sa.Integer(), nullable=False), - sa.Column('due_date', sa.DateTime(), nullable=False), - sa.Column('principal_amount', sa.Float(), nullable=True), - sa.Column('interest_amount', sa.Float(), nullable=True), - sa.Column('total_installment', 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(), nullable=True), - sa.Column('updated_at', sa.DateTime(), nullable=True), - sa.PrimaryKeyConstraint('id') - ) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_table('loan_repayment_schedules') - # ### end Alembic commands ### diff --git a/migrations/versions/2eee4157505f_.py b/migrations/versions/2eee4157505f_.py deleted file mode 100644 index 427b545..0000000 --- a/migrations/versions/2eee4157505f_.py +++ /dev/null @@ -1,250 +0,0 @@ -"""empty message - -Revision ID: 2eee4157505f -Revises: 565bc3d0ba6e -Create Date: 2025-05-16 13:24:41.914400 - -""" -from alembic import op -import sqlalchemy as sa -from sqlalchemy.dialects import postgresql - -# revision identifiers, used by Alembic. -revision = '2eee4157505f' -down_revision = '565bc3d0ba6e' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('accounts', schema=None) as batch_op: - batch_op.alter_column('created_at', - existing_type=postgresql.TIMESTAMP(), - type_=sa.DateTime(timezone=True), - existing_nullable=True) - batch_op.alter_column('updated_at', - existing_type=postgresql.TIMESTAMP(), - type_=sa.DateTime(timezone=True), - existing_nullable=True) - - with op.batch_alter_table('charges', schema=None) as batch_op: - batch_op.alter_column('created_at', - existing_type=postgresql.TIMESTAMP(), - type_=sa.DateTime(timezone=True), - existing_nullable=True) - batch_op.alter_column('updated_at', - existing_type=postgresql.TIMESTAMP(), - type_=sa.DateTime(timezone=True), - existing_nullable=True) - - with op.batch_alter_table('customers', schema=None) as batch_op: - batch_op.alter_column('created_at', - existing_type=postgresql.TIMESTAMP(), - type_=sa.DateTime(timezone=True), - existing_nullable=True) - batch_op.alter_column('updated_at', - existing_type=postgresql.TIMESTAMP(), - type_=sa.DateTime(timezone=True), - existing_nullable=True) - - with op.batch_alter_table('loan_charges', schema=None) as batch_op: - batch_op.alter_column('created_at', - existing_type=postgresql.TIMESTAMP(), - type_=sa.DateTime(timezone=True), - existing_nullable=True) - batch_op.alter_column('updated_at', - existing_type=postgresql.TIMESTAMP(), - type_=sa.DateTime(timezone=True), - existing_nullable=True) - - with op.batch_alter_table('loan_repayment_schedules', schema=None) as batch_op: - batch_op.alter_column('created_at', - existing_type=postgresql.TIMESTAMP(), - type_=sa.DateTime(timezone=True), - existing_nullable=True) - batch_op.alter_column('updated_at', - existing_type=postgresql.TIMESTAMP(), - type_=sa.DateTime(timezone=True), - existing_nullable=True) - - with op.batch_alter_table('loans', schema=None) as batch_op: - batch_op.alter_column('created_at', - existing_type=postgresql.TIMESTAMP(), - type_=sa.DateTime(timezone=True), - existing_nullable=True) - batch_op.alter_column('updated_at', - existing_type=postgresql.TIMESTAMP(), - type_=sa.DateTime(timezone=True), - existing_nullable=True) - - with op.batch_alter_table('offers', schema=None) as batch_op: - batch_op.alter_column('created_at', - existing_type=postgresql.TIMESTAMP(), - type_=sa.DateTime(timezone=True), - existing_nullable=True) - batch_op.alter_column('updated_at', - existing_type=postgresql.TIMESTAMP(), - type_=sa.DateTime(timezone=True), - existing_nullable=True) - - with op.batch_alter_table('rac_checks', schema=None) as batch_op: - batch_op.alter_column('created_at', - existing_type=postgresql.TIMESTAMP(), - type_=sa.DateTime(timezone=True), - existing_nullable=True) - batch_op.alter_column('updated_at', - existing_type=postgresql.TIMESTAMP(), - type_=sa.DateTime(timezone=True), - existing_nullable=True) - - with op.batch_alter_table('repayments', schema=None) as batch_op: - batch_op.alter_column('created_at', - existing_type=postgresql.TIMESTAMP(), - type_=sa.DateTime(timezone=True), - existing_nullable=True) - batch_op.alter_column('updated_at', - existing_type=postgresql.TIMESTAMP(), - type_=sa.DateTime(timezone=True), - existing_nullable=True) - - with op.batch_alter_table('transaction_offers', schema=None) as batch_op: - batch_op.alter_column('created_at', - existing_type=postgresql.TIMESTAMP(), - type_=sa.DateTime(timezone=True), - existing_nullable=True) - batch_op.alter_column('updated_at', - existing_type=postgresql.TIMESTAMP(), - type_=sa.DateTime(timezone=True), - existing_nullable=True) - - with op.batch_alter_table('transactions', schema=None) as batch_op: - batch_op.alter_column('created_at', - existing_type=postgresql.TIMESTAMP(), - type_=sa.DateTime(timezone=True), - existing_nullable=True, - existing_server_default=sa.text('now()')) - batch_op.alter_column('updated_at', - existing_type=postgresql.TIMESTAMP(), - type_=sa.DateTime(timezone=True), - existing_nullable=True, - existing_server_default=sa.text('now()')) - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('transactions', schema=None) as batch_op: - batch_op.alter_column('updated_at', - existing_type=sa.DateTime(timezone=True), - type_=postgresql.TIMESTAMP(), - existing_nullable=True, - existing_server_default=sa.text('now()')) - batch_op.alter_column('created_at', - existing_type=sa.DateTime(timezone=True), - type_=postgresql.TIMESTAMP(), - existing_nullable=True, - existing_server_default=sa.text('now()')) - - with op.batch_alter_table('transaction_offers', schema=None) as batch_op: - batch_op.alter_column('updated_at', - existing_type=sa.DateTime(timezone=True), - type_=postgresql.TIMESTAMP(), - existing_nullable=True) - batch_op.alter_column('created_at', - existing_type=sa.DateTime(timezone=True), - type_=postgresql.TIMESTAMP(), - existing_nullable=True) - - with op.batch_alter_table('repayments', schema=None) as batch_op: - batch_op.alter_column('updated_at', - existing_type=sa.DateTime(timezone=True), - type_=postgresql.TIMESTAMP(), - existing_nullable=True) - batch_op.alter_column('created_at', - existing_type=sa.DateTime(timezone=True), - type_=postgresql.TIMESTAMP(), - existing_nullable=True) - - with op.batch_alter_table('rac_checks', schema=None) as batch_op: - batch_op.alter_column('updated_at', - existing_type=sa.DateTime(timezone=True), - type_=postgresql.TIMESTAMP(), - existing_nullable=True) - batch_op.alter_column('created_at', - existing_type=sa.DateTime(timezone=True), - type_=postgresql.TIMESTAMP(), - existing_nullable=True) - - with op.batch_alter_table('offers', schema=None) as batch_op: - batch_op.alter_column('updated_at', - existing_type=sa.DateTime(timezone=True), - type_=postgresql.TIMESTAMP(), - existing_nullable=True) - batch_op.alter_column('created_at', - existing_type=sa.DateTime(timezone=True), - type_=postgresql.TIMESTAMP(), - existing_nullable=True) - - with op.batch_alter_table('loans', schema=None) as batch_op: - batch_op.alter_column('updated_at', - existing_type=sa.DateTime(timezone=True), - type_=postgresql.TIMESTAMP(), - existing_nullable=True) - batch_op.alter_column('created_at', - existing_type=sa.DateTime(timezone=True), - type_=postgresql.TIMESTAMP(), - existing_nullable=True) - - with op.batch_alter_table('loan_repayment_schedules', schema=None) as batch_op: - batch_op.alter_column('updated_at', - existing_type=sa.DateTime(timezone=True), - type_=postgresql.TIMESTAMP(), - existing_nullable=True) - batch_op.alter_column('created_at', - existing_type=sa.DateTime(timezone=True), - type_=postgresql.TIMESTAMP(), - existing_nullable=True) - - with op.batch_alter_table('loan_charges', schema=None) as batch_op: - batch_op.alter_column('updated_at', - existing_type=sa.DateTime(timezone=True), - type_=postgresql.TIMESTAMP(), - existing_nullable=True) - batch_op.alter_column('created_at', - existing_type=sa.DateTime(timezone=True), - type_=postgresql.TIMESTAMP(), - existing_nullable=True) - - with op.batch_alter_table('customers', schema=None) as batch_op: - batch_op.alter_column('updated_at', - existing_type=sa.DateTime(timezone=True), - type_=postgresql.TIMESTAMP(), - existing_nullable=True) - batch_op.alter_column('created_at', - existing_type=sa.DateTime(timezone=True), - type_=postgresql.TIMESTAMP(), - existing_nullable=True) - - with op.batch_alter_table('charges', schema=None) as batch_op: - batch_op.alter_column('updated_at', - existing_type=sa.DateTime(timezone=True), - type_=postgresql.TIMESTAMP(), - existing_nullable=True) - batch_op.alter_column('created_at', - existing_type=sa.DateTime(timezone=True), - type_=postgresql.TIMESTAMP(), - existing_nullable=True) - - with op.batch_alter_table('accounts', schema=None) as batch_op: - batch_op.alter_column('updated_at', - existing_type=sa.DateTime(timezone=True), - type_=postgresql.TIMESTAMP(), - existing_nullable=True) - batch_op.alter_column('created_at', - existing_type=sa.DateTime(timezone=True), - type_=postgresql.TIMESTAMP(), - existing_nullable=True) - - # ### end Alembic commands ### diff --git a/migrations/versions/3105abd795d4_.py b/migrations/versions/3105abd795d4_.py deleted file mode 100644 index c6ae0da..0000000 --- a/migrations/versions/3105abd795d4_.py +++ /dev/null @@ -1,52 +0,0 @@ -"""empty message - -Revision ID: 3105abd795d4 -Revises: 95a52be203c4 -Create Date: 2025-05-07 11:44:18.483694 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '3105abd795d4' -down_revision = '95a52be203c4' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('rac_checks', schema=None) as batch_op: - # Step 1: Drop the default value - batch_op.alter_column('id', - server_default=None, - existing_type=sa.VARCHAR(), - existing_nullable=False - ) - - with op.batch_alter_table('rac_checks', schema=None) as batch_op: - # Step 2: Change the column type - batch_op.alter_column('id', - existing_type=sa.VARCHAR(), - type_=sa.Integer(), - existing_nullable=False, - autoincrement=True, - postgresql_using='id::integer' - ) - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('rac_checks', schema=None) as batch_op: - batch_op.alter_column('id', - existing_type=sa.Integer(), - type_=sa.VARCHAR(), - existing_nullable=False, - autoincrement=True, - existing_server_default=sa.text("''::character varying")) - - # ### end Alembic commands ### diff --git a/migrations/versions/33e09efd85e3_.py b/migrations/versions/33e09efd85e3_.py new file mode 100644 index 0000000..af74f67 --- /dev/null +++ b/migrations/versions/33e09efd85e3_.py @@ -0,0 +1,280 @@ +"""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}")) diff --git a/migrations/versions/38acee611d55_migration_for_mloan_table.py b/migrations/versions/38acee611d55_migration_for_mloan_table.py deleted file mode 100644 index cb327d3..0000000 --- a/migrations/versions/38acee611d55_migration_for_mloan_table.py +++ /dev/null @@ -1,32 +0,0 @@ -"""Migration for mloan table - -Revision ID: 38acee611d55 -Revises: f1e83a993034 -Create Date: 2025-04-30 09:55:30.552838 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '38acee611d55' -down_revision = 'f1e83a993034' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loans', schema=None) as batch_op: - batch_op.add_column(sa.Column('tenor', sa.Integer(), nullable=True)) - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loans', schema=None) as batch_op: - batch_op.drop_column('tenor') - - # ### end Alembic commands ### diff --git a/migrations/versions/45790fd659fb_.py b/migrations/versions/45790fd659fb_.py deleted file mode 100644 index 2895b4f..0000000 --- a/migrations/versions/45790fd659fb_.py +++ /dev/null @@ -1,54 +0,0 @@ -"""empty message - -Revision ID: 45790fd659fb -Revises: b3a5e10bc77e -Create Date: 2025-06-04 12:37:48.180736 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '45790fd659fb' -down_revision = 'b3a5e10bc77e' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loans', schema=None) as batch_op: - batch_op.add_column(sa.Column('disburse_result', sa.String(length=10), nullable=True)) - batch_op.add_column(sa.Column('disburse_description', sa.String(length=100), nullable=True)) - batch_op.add_column(sa.Column('verify_result', sa.String(length=10), nullable=True)) - batch_op.add_column(sa.Column('verify_description', sa.String(length=100), nullable=True)) - - with op.batch_alter_table('repayments', schema=None) as batch_op: - batch_op.add_column(sa.Column('repay_date', sa.DateTime(), nullable=True)) - batch_op.add_column(sa.Column('repay_result', sa.String(length=10), nullable=True)) - batch_op.add_column(sa.Column('repay_description', sa.String(length=100), nullable=True)) - batch_op.add_column(sa.Column('verify_date', sa.DateTime(), nullable=True)) - batch_op.add_column(sa.Column('verify_result', sa.String(length=10), nullable=True)) - batch_op.add_column(sa.Column('verify_description', sa.String(length=100), nullable=True)) - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('repayments', schema=None) as batch_op: - batch_op.drop_column('verify_description') - batch_op.drop_column('verify_result') - batch_op.drop_column('verify_date') - batch_op.drop_column('repay_description') - batch_op.drop_column('repay_result') - batch_op.drop_column('repay_date') - - with op.batch_alter_table('loans', schema=None) as batch_op: - batch_op.drop_column('verify_description') - batch_op.drop_column('verify_result') - batch_op.drop_column('disburse_description') - batch_op.drop_column('disburse_result') - - # ### end Alembic commands ### diff --git a/migrations/versions/48c62b4da905_.py b/migrations/versions/48c62b4da905_.py deleted file mode 100644 index b659f4a..0000000 --- a/migrations/versions/48c62b4da905_.py +++ /dev/null @@ -1,32 +0,0 @@ -"""empty message - -Revision ID: 48c62b4da905 -Revises: 7a0caf83d5be -Create Date: 2025-06-23 11:08:22.928700 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '48c62b4da905' -down_revision = '7a0caf83d5be' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loans', schema=None) as batch_op: - batch_op.add_column(sa.Column('balance', sa.Float(), nullable=True)) - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loans', schema=None) as batch_op: - batch_op.drop_column('balance') - - # ### end Alembic commands ### diff --git a/migrations/versions/565bc3d0ba6e_migration_on_sat_may_10_12_54_52_utc_.py b/migrations/versions/565bc3d0ba6e_migration_on_sat_may_10_12_54_52_utc_.py deleted file mode 100644 index 91895f2..0000000 --- a/migrations/versions/565bc3d0ba6e_migration_on_sat_may_10_12_54_52_utc_.py +++ /dev/null @@ -1,34 +0,0 @@ -"""Migration on Sat May 10 12:54:52 UTC 2025 - -Revision ID: 565bc3d0ba6e -Revises: 173ea45db189 -Create Date: 2025-05-10 12:54:56.683215 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '565bc3d0ba6e' -down_revision = '173ea45db189' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loans', schema=None) as batch_op: - batch_op.add_column(sa.Column('disburse_date', sa.DateTime(), nullable=True)) - batch_op.add_column(sa.Column('disburse_verify', sa.DateTime(), nullable=True)) - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loans', schema=None) as batch_op: - batch_op.drop_column('disburse_verify') - batch_op.drop_column('disburse_date') - - # ### end Alembic commands ### diff --git a/migrations/versions/610b7e9d15a6_migration_on_fri_apr_11_14_15_19_utc_.py b/migrations/versions/610b7e9d15a6_migration_on_fri_apr_11_14_15_19_utc_.py deleted file mode 100644 index ab24390..0000000 --- a/migrations/versions/610b7e9d15a6_migration_on_fri_apr_11_14_15_19_utc_.py +++ /dev/null @@ -1,32 +0,0 @@ -"""Migration on Fri Apr 11 14:15:19 UTC 2025 - -Revision ID: 610b7e9d15a6 -Revises: 9bb0367eb486 -Create Date: 2025-04-11 14:16:12.533227 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '610b7e9d15a6' -down_revision = '9bb0367eb486' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loans', schema=None) as batch_op: - batch_op.add_column(sa.Column('transaction_id', sa.String(length=50), nullable=True)) - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loans', schema=None) as batch_op: - batch_op.drop_column('transaction_id') - - # ### end Alembic commands ### diff --git a/migrations/versions/783a023a477f_migration_on_mon_apr_14_15_15_05_utc_.py b/migrations/versions/783a023a477f_migration_on_mon_apr_14_15_15_05_utc_.py deleted file mode 100644 index 7308758..0000000 --- a/migrations/versions/783a023a477f_migration_on_mon_apr_14_15_15_05_utc_.py +++ /dev/null @@ -1,32 +0,0 @@ -"""Migration on Mon Apr 14 15:15:05 UTC 2025 - -Revision ID: 783a023a477f -Revises: f6cd1bfc8832 -Create Date: 2025-04-14 15:15:36.991148 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '783a023a477f' -down_revision = 'f6cd1bfc8832' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('transactions', schema=None) as batch_op: - batch_op.add_column(sa.Column('customer_id', sa.String(length=50), nullable=True)) - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('transactions', schema=None) as batch_op: - batch_op.drop_column('customer_id') - - # ### end Alembic commands ### diff --git a/migrations/versions/7a0caf83d5be_.py b/migrations/versions/7a0caf83d5be_.py deleted file mode 100644 index 190e4f4..0000000 --- a/migrations/versions/7a0caf83d5be_.py +++ /dev/null @@ -1,34 +0,0 @@ -"""empty message - -Revision ID: 7a0caf83d5be -Revises: 1696ee63c28a -Create Date: 2025-06-19 04:35:23.660261 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '7a0caf83d5be' -down_revision = '1696ee63c28a' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('salaries', schema=None) as batch_op: - batch_op.add_column(sa.Column('account_id', sa.String(length=50), nullable=True)) - batch_op.drop_column('account_type') - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('salaries', schema=None) as batch_op: - batch_op.add_column(sa.Column('account_type', sa.VARCHAR(length=50), autoincrement=False, nullable=True)) - batch_op.drop_column('account_id') - - # ### end Alembic commands ### diff --git a/migrations/versions/86e701febdda_.py b/migrations/versions/86e701febdda_.py deleted file mode 100644 index 5f54178..0000000 --- a/migrations/versions/86e701febdda_.py +++ /dev/null @@ -1,41 +0,0 @@ -"""empty message - -Revision ID: 86e701febdda -Revises: eb99c7fb9e09 -Create Date: 2025-04-29 07:59:33.305967 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '86e701febdda' -down_revision = 'eb99c7fb9e09' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - 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('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(), nullable=True), - sa.Column('updated_at', sa.DateTime(), nullable=True), - sa.PrimaryKeyConstraint('id') - ) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_table('transaction_offers') - # ### end Alembic commands ### diff --git a/migrations/versions/89759cebb9c6_migration_on_sat_apr_26_12_50_46_utc_.py b/migrations/versions/89759cebb9c6_migration_on_sat_apr_26_12_50_46_utc_.py deleted file mode 100644 index 3c33c55..0000000 --- a/migrations/versions/89759cebb9c6_migration_on_sat_apr_26_12_50_46_utc_.py +++ /dev/null @@ -1,38 +0,0 @@ -"""Migration on Sat Apr 26 12:50:46 UTC 2025 - -Revision ID: 89759cebb9c6 -Revises: 2a45dd99c9cb -Create Date: 2025-04-26 12:50:49.771355 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '89759cebb9c6' -down_revision = '2a45dd99c9cb' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('offers', schema=None) as batch_op: - batch_op.add_column(sa.Column('interest_rate', sa.Float(), nullable=True)) - batch_op.add_column(sa.Column('management_rate', sa.Float(), nullable=True)) - batch_op.add_column(sa.Column('insurance_rate', sa.Float(), nullable=True)) - batch_op.add_column(sa.Column('vat_rate', sa.Float(), nullable=True)) - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('offers', schema=None) as batch_op: - batch_op.drop_column('vat_rate') - batch_op.drop_column('insurance_rate') - batch_op.drop_column('management_rate') - batch_op.drop_column('interest_rate') - - # ### end Alembic commands ### diff --git a/migrations/versions/95a52be203c4_migration_on_sat_may_3_21_53_29_utc_2025.py b/migrations/versions/95a52be203c4_migration_on_sat_may_3_21_53_29_utc_2025.py deleted file mode 100644 index 7a03ceb..0000000 --- a/migrations/versions/95a52be203c4_migration_on_sat_may_3_21_53_29_utc_2025.py +++ /dev/null @@ -1,32 +0,0 @@ -"""Migration on Sat May 3 21:53:29 UTC 2025 - -Revision ID: 95a52be203c4 -Revises: 38acee611d55 -Create Date: 2025-05-03 21:53:32.154029 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '95a52be203c4' -down_revision = '38acee611d55' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loans', schema=None) as batch_op: - batch_op.add_column(sa.Column('eligible_amount', sa.Float(), nullable=True)) - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loans', schema=None) as batch_op: - batch_op.drop_column('eligible_amount') - - # ### end Alembic commands ### diff --git a/migrations/versions/9bb0367eb486_migration_on_fri_apr_11_12_48_01_utc_.py b/migrations/versions/9bb0367eb486_migration_on_fri_apr_11_12_48_01_utc_.py deleted file mode 100644 index be5e457..0000000 --- a/migrations/versions/9bb0367eb486_migration_on_fri_apr_11_12_48_01_utc_.py +++ /dev/null @@ -1,40 +0,0 @@ -"""Migration on Fri Apr 11 12:48:01 UTC 2025 - -Revision ID: 9bb0367eb486 -Revises: fd447d78b161 -Create Date: 2025-04-11 12:48:36.145311 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '9bb0367eb486' -down_revision = 'fd447d78b161' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loans', schema=None) as batch_op: - batch_op.add_column(sa.Column('product_id', sa.String(length=20), nullable=True)) - batch_op.add_column(sa.Column('current_loan_amount', sa.Float(), nullable=True)) - batch_op.add_column(sa.Column('default_penalty_fee', sa.Float(), nullable=True)) - batch_op.add_column(sa.Column('continuous_fee', sa.Float(), nullable=True)) - batch_op.add_column(sa.Column('due_date', sa.DateTime(), nullable=True)) - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loans', schema=None) as batch_op: - batch_op.drop_column('due_date') - batch_op.drop_column('continuous_fee') - batch_op.drop_column('default_penalty_fee') - batch_op.drop_column('current_loan_amount') - batch_op.drop_column('product_id') - - # ### end Alembic commands ### diff --git a/migrations/versions/a4847b997191_migration_on_wed_apr_16_17_42_49_utc_.py b/migrations/versions/a4847b997191_migration_on_wed_apr_16_17_42_49_utc_.py deleted file mode 100644 index a41dc5c..0000000 --- a/migrations/versions/a4847b997191_migration_on_wed_apr_16_17_42_49_utc_.py +++ /dev/null @@ -1,57 +0,0 @@ -"""Migration on Wed Apr 16 17:42:49 UTC 2025 - -Revision ID: a4847b997191 -Revises: 783a023a477f -Create Date: 2025-04-16 17:43:22.509659 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = 'a4847b997191' -down_revision = '783a023a477f' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - 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('created_at', sa.DateTime(), nullable=True), - sa.Column('updated_at', sa.DateTime(), nullable=True), - sa.PrimaryKeyConstraint('id') - ) - op.create_table('offers', - sa.Column('id', sa.String(), nullable=False), - sa.Column('product_id', sa.String(), 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('created_at', sa.DateTime(), nullable=True), - sa.Column('updated_at', sa.DateTime(), nullable=True), - sa.PrimaryKeyConstraint('id') - ) - with op.batch_alter_table('loans', schema=None) as batch_op: - batch_op.add_column(sa.Column('product_id', sa.String(length=20), nullable=True)) - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loans', schema=None) as batch_op: - batch_op.drop_column('product_id') - - op.drop_table('offers') - op.drop_table('loan_charges') - # ### end Alembic commands ### diff --git a/migrations/versions/b3a5e10bc77e_.py b/migrations/versions/b3a5e10bc77e_.py deleted file mode 100644 index 8a8205a..0000000 --- a/migrations/versions/b3a5e10bc77e_.py +++ /dev/null @@ -1,32 +0,0 @@ -"""empty message - -Revision ID: b3a5e10bc77e -Revises: e8dd9b841ad7 -Create Date: 2025-05-27 01:52:48.538333 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = 'b3a5e10bc77e' -down_revision = 'e8dd9b841ad7' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loans', schema=None) as batch_op: - batch_op.add_column(sa.Column('reference', sa.String(length=50), nullable=True)) - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loans', schema=None) as batch_op: - batch_op.drop_column('reference') - - # ### end Alembic commands ### diff --git a/migrations/versions/b54422fb31e0_.py b/migrations/versions/b54422fb31e0_.py deleted file mode 100644 index dd26721..0000000 --- a/migrations/versions/b54422fb31e0_.py +++ /dev/null @@ -1,46 +0,0 @@ -"""empty message - -Revision ID: b54422fb31e0 -Revises: 0acd553309a1 -Create Date: 2025-06-16 12:24:09.159498 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = 'b54422fb31e0' -down_revision = '0acd553309a1' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('repayments_data', schema=None) as batch_op: - batch_op.add_column(sa.Column('fbn_transaction_id', sa.String(length=50), nullable=True)) - batch_op.add_column(sa.Column('customer_id', sa.String(length=50), nullable=True)) - batch_op.add_column(sa.Column('account_id', sa.String(length=50), nullable=True)) - batch_op.add_column(sa.Column('repayment_amount', sa.Float(), nullable=True)) - batch_op.add_column(sa.Column('amount_collected', sa.Float(), nullable=True)) - - with op.batch_alter_table('transactions', schema=None) as batch_op: - batch_op.add_column(sa.Column('phone_number', sa.String(length=50), nullable=True)) - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('transactions', schema=None) as batch_op: - batch_op.drop_column('phone_number') - - with op.batch_alter_table('repayments_data', schema=None) as batch_op: - batch_op.drop_column('amount_collected') - batch_op.drop_column('repayment_amount') - batch_op.drop_column('account_id') - batch_op.drop_column('customer_id') - batch_op.drop_column('fbn_transaction_id') - - # ### end Alembic commands ### diff --git a/migrations/versions/b8f6fd76ead8_migration_on_thu_apr_10_16_21_45_utc_.py b/migrations/versions/b8f6fd76ead8_migration_on_thu_apr_10_16_21_45_utc_.py deleted file mode 100644 index 69d16e7..0000000 --- a/migrations/versions/b8f6fd76ead8_migration_on_thu_apr_10_16_21_45_utc_.py +++ /dev/null @@ -1,86 +0,0 @@ -"""Migration on Thu Apr 10 16:21:45 UTC 2025 - -Revision ID: b8f6fd76ead8 -Revises: -Create Date: 2025-04-10 16:22:15.946157 - -""" -from alembic import op -import sqlalchemy as sa -from sqlalchemy.dialects import postgresql - -# revision identifiers, used by Alembic. -revision = 'b8f6fd76ead8' -down_revision = None -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - 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(), nullable=True), - sa.Column('updated_at', sa.DateTime(), nullable=True), - sa.PrimaryKeyConstraint('id') - ) - with op.batch_alter_table('loans', schema=None) as batch_op: - batch_op.alter_column('id', - existing_type=sa.VARCHAR(length=50), - type_=sa.Integer(), - existing_nullable=False, - autoincrement=True, - existing_server_default=sa.text("nextval('loan_id_seq'::regclass)")) - - with op.batch_alter_table('transactions', schema=None) as batch_op: - batch_op.alter_column('channel', - existing_type=sa.VARCHAR(length=8), - type_=sa.String(length=50), - existing_nullable=False) - batch_op.alter_column('created_at', - existing_type=postgresql.TIMESTAMP(timezone=True), - type_=sa.DateTime(), - existing_nullable=True, - existing_server_default=sa.text('now()')) - batch_op.alter_column('updated_at', - existing_type=postgresql.TIMESTAMP(timezone=True), - type_=sa.DateTime(), - existing_nullable=True, - existing_server_default=sa.text('now()')) - batch_op.drop_constraint('transactions_id_key', type_='unique') - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('transactions', schema=None) as batch_op: - batch_op.create_unique_constraint('transactions_id_key', ['id']) - batch_op.alter_column('updated_at', - existing_type=sa.DateTime(), - type_=postgresql.TIMESTAMP(timezone=True), - existing_nullable=True, - existing_server_default=sa.text('now()')) - batch_op.alter_column('created_at', - existing_type=sa.DateTime(), - type_=postgresql.TIMESTAMP(timezone=True), - existing_nullable=True, - existing_server_default=sa.text('now()')) - batch_op.alter_column('channel', - existing_type=sa.String(length=50), - type_=sa.VARCHAR(length=8), - existing_nullable=False) - - with op.batch_alter_table('loans', schema=None) as batch_op: - batch_op.alter_column('id', - existing_type=sa.Integer(), - type_=sa.VARCHAR(length=50), - existing_nullable=False, - autoincrement=True, - existing_server_default=sa.text("nextval('loan_id_seq'::regclass)")) - - op.drop_table('repayments') - # ### end Alembic commands ### diff --git a/migrations/versions/de9ad96ba34e_migration_on_thu_apr_17_14_15_36_utc_.py b/migrations/versions/de9ad96ba34e_migration_on_thu_apr_17_14_15_36_utc_.py deleted file mode 100644 index a4f4276..0000000 --- a/migrations/versions/de9ad96ba34e_migration_on_thu_apr_17_14_15_36_utc_.py +++ /dev/null @@ -1,38 +0,0 @@ -"""Migration on Thu Apr 17 14:15:36 UTC 2025 - -Revision ID: de9ad96ba34e -Revises: ec8d97f9b584 -Create Date: 2025-04-17 14:16:16.537466 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = 'de9ad96ba34e' -down_revision = 'ec8d97f9b584' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - 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(), nullable=True), - sa.Column('updated_at', sa.DateTime(), nullable=True), - sa.PrimaryKeyConstraint('id') - ) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_table('charges') - # ### end Alembic commands ### diff --git a/migrations/versions/e8dd9b841ad7_.py b/migrations/versions/e8dd9b841ad7_.py deleted file mode 100644 index 22a3b68..0000000 --- a/migrations/versions/e8dd9b841ad7_.py +++ /dev/null @@ -1,36 +0,0 @@ -"""empty message - -Revision ID: e8dd9b841ad7 -Revises: 2eee4157505f -Create Date: 2025-05-19 11:46:19.204637 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = 'e8dd9b841ad7' -down_revision = '2eee4157505f' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('offers', schema=None) as batch_op: - batch_op.add_column(sa.Column('max_daily_loans', sa.Integer(), nullable=True)) - batch_op.add_column(sa.Column('max_active_loans', sa.Integer(), nullable=True)) - batch_op.add_column(sa.Column('max_life_loans', sa.Integer(), nullable=True)) - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('offers', schema=None) as batch_op: - batch_op.drop_column('max_life_loans') - batch_op.drop_column('max_active_loans') - batch_op.drop_column('max_daily_loans') - - # ### end Alembic commands ### diff --git a/migrations/versions/eb99c7fb9e09_migration_on_sat_apr_26_19_02_17_utc_.py b/migrations/versions/eb99c7fb9e09_migration_on_sat_apr_26_19_02_17_utc_.py deleted file mode 100644 index c77223e..0000000 --- a/migrations/versions/eb99c7fb9e09_migration_on_sat_apr_26_19_02_17_utc_.py +++ /dev/null @@ -1,32 +0,0 @@ -"""Migration on Sat Apr 26 19:02:17 UTC 2025 - -Revision ID: eb99c7fb9e09 -Revises: 89759cebb9c6 -Create Date: 2025-04-26 19:02:20.443678 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = 'eb99c7fb9e09' -down_revision = '89759cebb9c6' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loans', schema=None) as batch_op: - batch_op.add_column(sa.Column('original_transaction', sa.String(length=50), nullable=True)) - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loans', schema=None) as batch_op: - batch_op.drop_column('original_transaction') - - # ### end Alembic commands ### diff --git a/migrations/versions/ec8d97f9b584_migration_on_thu_apr_17_10_40_05_utc_.py b/migrations/versions/ec8d97f9b584_migration_on_thu_apr_17_10_40_05_utc_.py deleted file mode 100644 index 1cf6d46..0000000 --- a/migrations/versions/ec8d97f9b584_migration_on_thu_apr_17_10_40_05_utc_.py +++ /dev/null @@ -1,34 +0,0 @@ -"""Migration on Thu Apr 17 10:40:05 UTC 2025 - -Revision ID: ec8d97f9b584 -Revises: 287ecb02d3d7 -Create Date: 2025-04-17 10:40:34.751272 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = 'ec8d97f9b584' -down_revision = '287ecb02d3d7' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loan_charges', schema=None) as batch_op: - batch_op.add_column(sa.Column('transaction_id', sa.String(length=50), nullable=True)) - batch_op.add_column(sa.Column('due_date', sa.DateTime(), nullable=True)) - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loan_charges', schema=None) as batch_op: - batch_op.drop_column('due_date') - batch_op.drop_column('transaction_id') - - # ### end Alembic commands ### diff --git a/migrations/versions/f1e83a993034_migration_on_tue_apr_29_20_43_35_utc_.py b/migrations/versions/f1e83a993034_migration_on_tue_apr_29_20_43_35_utc_.py deleted file mode 100644 index 8fd4163..0000000 --- a/migrations/versions/f1e83a993034_migration_on_tue_apr_29_20_43_35_utc_.py +++ /dev/null @@ -1,32 +0,0 @@ -"""Migration on Tue Apr 29 20:43:35 UTC 2025 - -Revision ID: f1e83a993034 -Revises: 86e701febdda -Create Date: 2025-04-29 20:43:38.595543 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = 'f1e83a993034' -down_revision = '86e701febdda' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loan_repayment_schedules', schema=None) as batch_op: - batch_op.add_column(sa.Column('transaction_id', sa.String(length=50), nullable=True)) - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loan_repayment_schedules', schema=None) as batch_op: - batch_op.drop_column('transaction_id') - - # ### end Alembic commands ### diff --git a/migrations/versions/f6cd1bfc8832_migration_on_fri_apr_11_14_34_36_utc_.py b/migrations/versions/f6cd1bfc8832_migration_on_fri_apr_11_14_34_36_utc_.py deleted file mode 100644 index 498ede0..0000000 --- a/migrations/versions/f6cd1bfc8832_migration_on_fri_apr_11_14_34_36_utc_.py +++ /dev/null @@ -1,34 +0,0 @@ -"""Migration on Fri Apr 11 14:34:36 UTC 2025 - -Revision ID: f6cd1bfc8832 -Revises: 610b7e9d15a6 -Create Date: 2025-04-11 14:35:07.093967 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = 'f6cd1bfc8832' -down_revision = '610b7e9d15a6' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loans', schema=None) as batch_op: - batch_op.add_column(sa.Column('collection_type', sa.String(length=20), nullable=True)) - batch_op.drop_column('product_id') - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('loans', schema=None) as batch_op: - batch_op.add_column(sa.Column('product_id', sa.VARCHAR(length=20), autoincrement=False, nullable=True)) - batch_op.drop_column('collection_type') - - # ### end Alembic commands ### diff --git a/migrations/versions/fd447d78b161_migration_on_fri_apr_11_12_02_45_utc_.py b/migrations/versions/fd447d78b161_migration_on_fri_apr_11_12_02_45_utc_.py deleted file mode 100644 index eff663e..0000000 --- a/migrations/versions/fd447d78b161_migration_on_fri_apr_11_12_02_45_utc_.py +++ /dev/null @@ -1,38 +0,0 @@ -"""Migration on Fri Apr 11 12:02:45 UTC 2025 - -Revision ID: fd447d78b161 -Revises: 1340e7e578b9 -Create Date: 2025-04-11 12:03:28.346671 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = 'fd447d78b161' -down_revision = '1340e7e578b9' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('transactions', schema=None) as batch_op: - batch_op.alter_column('account_id', - existing_type=sa.VARCHAR(length=50), - nullable=True) - batch_op.drop_column('ref_model') - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('transactions', schema=None) as batch_op: - batch_op.add_column(sa.Column('ref_model', sa.VARCHAR(length=50), autoincrement=False, nullable=True)) - batch_op.alter_column('account_id', - existing_type=sa.VARCHAR(length=50), - nullable=False) - - # ### end Alembic commands ### diff --git a/requirements.txt b/requirements.txt index 820a23d..3c2ad72 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,6 +6,7 @@ flask-sqlalchemy flask-migrate psycopg2-binary alembic +oracledb # Schema for validations Flask-Marshmallow==0.15.0