From 9dae2d951ca544fdd91b65e13eb12e3225a93572 Mon Sep 17 00:00:00 2001 From: VivianDee <115420678+VivianDee@users.noreply.github.com> Date: Wed, 30 Apr 2025 09:57:49 +0100 Subject: [PATCH] [add]: transaction id to loan schedules, [add]: tenor to loans --- app/api/services/provide_loan.py | 5 +-- app/models/loan.py | 9 ++++-- app/models/loan_repayment_schedule.py | 7 ++-- .../38acee611d55_migration_for_mloan_table.py | 32 +++++++++++++++++++ ...4_migration_on_tue_apr_29_20_43_35_utc_.py | 2 +- 5 files changed, 46 insertions(+), 9 deletions(-) create mode 100644 migrations/versions/38acee611d55_migration_for_mloan_table.py diff --git a/app/api/services/provide_loan.py b/app/api/services/provide_loan.py index 33f8b25..7115e2e 100644 --- a/app/api/services/provide_loan.py +++ b/app/api/services/provide_loan.py @@ -95,7 +95,8 @@ class ProvideLoanService(BaseService): upfront_fee = upfront_fee, repayment_amount = repayment_amount, installment_amount = installment_amount, - status= LoanStatus.ACTIVE + status = LoanStatus.ACTIVE, + tenor = offer.tenor ) if not loan: @@ -106,7 +107,7 @@ class ProvideLoanService(BaseService): db.session.flush() - schedule = LoanRepaymentSchedule.add_repayment_schedule(loan = loan, tenor = tenor) + schedule = LoanRepaymentSchedule.add_repayment_schedule(loan = loan, tenor = tenor, transaction_id = transaction_id) if not schedule: diff --git a/app/models/loan.py b/app/models/loan.py index d852dd4..9895ad9 100644 --- a/app/models/loan.py +++ b/app/models/loan.py @@ -30,6 +30,7 @@ class Loan(db.Model): repayment_amount = db.Column(db.Float, nullable=True, default=0.0) installment_amount = db.Column(db.Float, nullable=True, default=0.0) status = db.Column(db.String(20), default='pending') + tenor = db.Column(db.Integer, nullable=True) due_date = db.Column(db.DateTime, nullable=True) created_at = db.Column(db.DateTime, default=datetime.now(timezone.utc)) updated_at = db.Column(db.DateTime, default=datetime.now(timezone.utc), onupdate=datetime.now(timezone.utc)) @@ -69,7 +70,8 @@ class Loan(db.Model): upfront_fee, repayment_amount, installment_amount, - status="pending", + tenor, + status = "pending", ): # Check if customer exists customer = Customer.is_valid_customer(customer_id) @@ -92,8 +94,9 @@ class Loan(db.Model): upfront_fee = upfront_fee, repayment_amount = repayment_amount, installment_amount = installment_amount, - due_date=now, - status = status + due_date=now, + tenor = tenor, + status = status, ) try: diff --git a/app/models/loan_repayment_schedule.py b/app/models/loan_repayment_schedule.py index bfbff13..ebcf694 100644 --- a/app/models/loan_repayment_schedule.py +++ b/app/models/loan_repayment_schedule.py @@ -8,6 +8,7 @@ class LoanRepaymentSchedule(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) loan_id = db.Column(db.Integer, nullable=False) + transaction_id = db.Column(db.String(50), nullable=True) product_id = db.Column(db.String(20), nullable=True) installment_number = db.Column(db.Integer, nullable=False) due_date = db.Column(db.DateTime, nullable=False) @@ -18,7 +19,6 @@ class LoanRepaymentSchedule(db.Model): created_at = db.Column(db.DateTime, default=datetime.now(timezone.utc)) updated_at = db.Column(db.DateTime, default=datetime.now(timezone.utc), onupdate=datetime.now(timezone.utc)) - # transaction_id = db.Column(db.String(50), nullable=False) loan = relationship( "Loan", @@ -29,7 +29,7 @@ class LoanRepaymentSchedule(db.Model): @classmethod - def add_repayment_schedule(cls, loan, tenor): + def add_repayment_schedule(cls, loan, tenor, transaction_id): """ Add repayment schedules for a given loan. """ @@ -44,7 +44,8 @@ class LoanRepaymentSchedule(db.Model): due_date=due_date, total_repayment_amount = round(loan.repayment_amount, 2), installment_amount=round(loan.installment_amount, 2), - product_id = loan.product_id + product_id = loan.product_id, + transaction_id = transaction_id ) db.session.add(schedule) diff --git a/migrations/versions/38acee611d55_migration_for_mloan_table.py b/migrations/versions/38acee611d55_migration_for_mloan_table.py new file mode 100644 index 0000000..cb327d3 --- /dev/null +++ b/migrations/versions/38acee611d55_migration_for_mloan_table.py @@ -0,0 +1,32 @@ +"""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/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 index 7bc0249..8fd4163 100644 --- 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 @@ -19,7 +19,7 @@ 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=False)) + batch_op.add_column(sa.Column('transaction_id', sa.String(length=50), nullable=True)) # ### end Alembic commands ###